bugfix
[picodrive.git] / cpu / musashi / m68kopdm.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_dbt_16(void)\r
9{\r
10 REG_PC += 2;\r
11}\r
12\r
13\r
14void m68k_op_dbf_16(void)\r
15{\r
16 uint* r_dst = &DY;\r
17 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
18\r
19 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
20 if(res != 0xffff)\r
21 {\r
22 uint offset = OPER_I_16();\r
23 REG_PC -= 2;\r
24 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
25 m68ki_branch_16(offset);\r
26 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
27 return;\r
28 }\r
29 REG_PC += 2;\r
30 USE_CYCLES(CYC_DBCC_F_EXP);\r
31}\r
32\r
33\r
34void m68k_op_dbhi_16(void)\r
35{\r
36 if(COND_NOT_HI())\r
37 {\r
38 uint* r_dst = &DY;\r
39 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
40\r
41 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
42 if(res != 0xffff)\r
43 {\r
44 uint offset = OPER_I_16();\r
45 REG_PC -= 2;\r
46 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
47 m68ki_branch_16(offset);\r
48 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
49 return;\r
50 }\r
51 REG_PC += 2;\r
52 USE_CYCLES(CYC_DBCC_F_EXP);\r
53 return;\r
54 }\r
55 REG_PC += 2;\r
56}\r
57\r
58\r
59void m68k_op_dbls_16(void)\r
60{\r
61 if(COND_NOT_LS())\r
62 {\r
63 uint* r_dst = &DY;\r
64 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
65\r
66 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
67 if(res != 0xffff)\r
68 {\r
69 uint offset = OPER_I_16();\r
70 REG_PC -= 2;\r
71 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
72 m68ki_branch_16(offset);\r
73 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
74 return;\r
75 }\r
76 REG_PC += 2;\r
77 USE_CYCLES(CYC_DBCC_F_EXP);\r
78 return;\r
79 }\r
80 REG_PC += 2;\r
81}\r
82\r
83\r
84void m68k_op_dbcc_16(void)\r
85{\r
86 if(COND_NOT_CC())\r
87 {\r
88 uint* r_dst = &DY;\r
89 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
90\r
91 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
92 if(res != 0xffff)\r
93 {\r
94 uint offset = OPER_I_16();\r
95 REG_PC -= 2;\r
96 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
97 m68ki_branch_16(offset);\r
98 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
99 return;\r
100 }\r
101 REG_PC += 2;\r
102 USE_CYCLES(CYC_DBCC_F_EXP);\r
103 return;\r
104 }\r
105 REG_PC += 2;\r
106}\r
107\r
108\r
109void m68k_op_dbcs_16(void)\r
110{\r
111 if(COND_NOT_CS())\r
112 {\r
113 uint* r_dst = &DY;\r
114 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
115\r
116 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
117 if(res != 0xffff)\r
118 {\r
119 uint offset = OPER_I_16();\r
120 REG_PC -= 2;\r
121 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
122 m68ki_branch_16(offset);\r
123 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
124 return;\r
125 }\r
126 REG_PC += 2;\r
127 USE_CYCLES(CYC_DBCC_F_EXP);\r
128 return;\r
129 }\r
130 REG_PC += 2;\r
131}\r
132\r
133\r
134void m68k_op_dbne_16(void)\r
135{\r
136 if(COND_NOT_NE())\r
137 {\r
138 uint* r_dst = &DY;\r
139 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
140\r
141 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
142 if(res != 0xffff)\r
143 {\r
144 uint offset = OPER_I_16();\r
145 REG_PC -= 2;\r
146 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
147 m68ki_branch_16(offset);\r
148 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
149 return;\r
150 }\r
151 REG_PC += 2;\r
152 USE_CYCLES(CYC_DBCC_F_EXP);\r
153 return;\r
154 }\r
155 REG_PC += 2;\r
156}\r
157\r
158\r
159void m68k_op_dbeq_16(void)\r
160{\r
161 if(COND_NOT_EQ())\r
162 {\r
163 uint* r_dst = &DY;\r
164 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
165\r
166 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
167 if(res != 0xffff)\r
168 {\r
169 uint offset = OPER_I_16();\r
170 REG_PC -= 2;\r
171 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
172 m68ki_branch_16(offset);\r
173 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
174 return;\r
175 }\r
176 REG_PC += 2;\r
177 USE_CYCLES(CYC_DBCC_F_EXP);\r
178 return;\r
179 }\r
180 REG_PC += 2;\r
181}\r
182\r
183\r
184void m68k_op_dbvc_16(void)\r
185{\r
186 if(COND_NOT_VC())\r
187 {\r
188 uint* r_dst = &DY;\r
189 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
190\r
191 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
192 if(res != 0xffff)\r
193 {\r
194 uint offset = OPER_I_16();\r
195 REG_PC -= 2;\r
196 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
197 m68ki_branch_16(offset);\r
198 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
199 return;\r
200 }\r
201 REG_PC += 2;\r
202 USE_CYCLES(CYC_DBCC_F_EXP);\r
203 return;\r
204 }\r
205 REG_PC += 2;\r
206}\r
207\r
208\r
209void m68k_op_dbvs_16(void)\r
210{\r
211 if(COND_NOT_VS())\r
212 {\r
213 uint* r_dst = &DY;\r
214 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
215\r
216 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
217 if(res != 0xffff)\r
218 {\r
219 uint offset = OPER_I_16();\r
220 REG_PC -= 2;\r
221 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
222 m68ki_branch_16(offset);\r
223 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
224 return;\r
225 }\r
226 REG_PC += 2;\r
227 USE_CYCLES(CYC_DBCC_F_EXP);\r
228 return;\r
229 }\r
230 REG_PC += 2;\r
231}\r
232\r
233\r
234void m68k_op_dbpl_16(void)\r
235{\r
236 if(COND_NOT_PL())\r
237 {\r
238 uint* r_dst = &DY;\r
239 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
240\r
241 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
242 if(res != 0xffff)\r
243 {\r
244 uint offset = OPER_I_16();\r
245 REG_PC -= 2;\r
246 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
247 m68ki_branch_16(offset);\r
248 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
249 return;\r
250 }\r
251 REG_PC += 2;\r
252 USE_CYCLES(CYC_DBCC_F_EXP);\r
253 return;\r
254 }\r
255 REG_PC += 2;\r
256}\r
257\r
258\r
259void m68k_op_dbmi_16(void)\r
260{\r
261 if(COND_NOT_MI())\r
262 {\r
263 uint* r_dst = &DY;\r
264 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
265\r
266 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
267 if(res != 0xffff)\r
268 {\r
269 uint offset = OPER_I_16();\r
270 REG_PC -= 2;\r
271 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
272 m68ki_branch_16(offset);\r
273 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
274 return;\r
275 }\r
276 REG_PC += 2;\r
277 USE_CYCLES(CYC_DBCC_F_EXP);\r
278 return;\r
279 }\r
280 REG_PC += 2;\r
281}\r
282\r
283\r
284void m68k_op_dbge_16(void)\r
285{\r
286 if(COND_NOT_GE())\r
287 {\r
288 uint* r_dst = &DY;\r
289 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
290\r
291 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
292 if(res != 0xffff)\r
293 {\r
294 uint offset = OPER_I_16();\r
295 REG_PC -= 2;\r
296 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
297 m68ki_branch_16(offset);\r
298 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
299 return;\r
300 }\r
301 REG_PC += 2;\r
302 USE_CYCLES(CYC_DBCC_F_EXP);\r
303 return;\r
304 }\r
305 REG_PC += 2;\r
306}\r
307\r
308\r
309void m68k_op_dblt_16(void)\r
310{\r
311 if(COND_NOT_LT())\r
312 {\r
313 uint* r_dst = &DY;\r
314 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
315\r
316 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
317 if(res != 0xffff)\r
318 {\r
319 uint offset = OPER_I_16();\r
320 REG_PC -= 2;\r
321 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
322 m68ki_branch_16(offset);\r
323 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
324 return;\r
325 }\r
326 REG_PC += 2;\r
327 USE_CYCLES(CYC_DBCC_F_EXP);\r
328 return;\r
329 }\r
330 REG_PC += 2;\r
331}\r
332\r
333\r
334void m68k_op_dbgt_16(void)\r
335{\r
336 if(COND_NOT_GT())\r
337 {\r
338 uint* r_dst = &DY;\r
339 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
340\r
341 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
342 if(res != 0xffff)\r
343 {\r
344 uint offset = OPER_I_16();\r
345 REG_PC -= 2;\r
346 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
347 m68ki_branch_16(offset);\r
348 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
349 return;\r
350 }\r
351 REG_PC += 2;\r
352 USE_CYCLES(CYC_DBCC_F_EXP);\r
353 return;\r
354 }\r
355 REG_PC += 2;\r
356}\r
357\r
358\r
359void m68k_op_dble_16(void)\r
360{\r
361 if(COND_NOT_LE())\r
362 {\r
363 uint* r_dst = &DY;\r
364 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);\r
365\r
366 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
367 if(res != 0xffff)\r
368 {\r
369 uint offset = OPER_I_16();\r
370 REG_PC -= 2;\r
371 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
372 m68ki_branch_16(offset);\r
373 USE_CYCLES(CYC_DBCC_F_NOEXP);\r
374 return;\r
375 }\r
376 REG_PC += 2;\r
377 USE_CYCLES(CYC_DBCC_F_EXP);\r
378 return;\r
379 }\r
380 REG_PC += 2;\r
381}\r
382\r
383\r
384void m68k_op_divs_16_d(void)\r
385{\r
386 uint* r_dst = &DX;\r
387 sint src = MAKE_INT_16(DY);\r
388 sint quotient;\r
389 sint remainder;\r
390\r
391 if(src != 0)\r
392 {\r
393 if((uint32)*r_dst == 0x80000000 && src == -1)\r
394 {\r
395 FLAG_Z = 0;\r
396 FLAG_N = NFLAG_CLEAR;\r
397 FLAG_V = VFLAG_CLEAR;\r
398 FLAG_C = CFLAG_CLEAR;\r
399 *r_dst = 0;\r
400 return;\r
401 }\r
402\r
403 quotient = MAKE_INT_32(*r_dst) / src;\r
404 remainder = MAKE_INT_32(*r_dst) % src;\r
405\r
406 if(quotient == MAKE_INT_16(quotient))\r
407 {\r
408 FLAG_Z = quotient;\r
409 FLAG_N = NFLAG_16(quotient);\r
410 FLAG_V = VFLAG_CLEAR;\r
411 FLAG_C = CFLAG_CLEAR;\r
412 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
413 return;\r
414 }\r
415 FLAG_V = VFLAG_SET;\r
416 return;\r
417 }\r
418 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
419}\r
420\r
421\r
422void m68k_op_divs_16_ai(void)\r
423{\r
424 uint* r_dst = &DX;\r
425 sint src = MAKE_INT_16(OPER_AY_AI_16());\r
426 sint quotient;\r
427 sint remainder;\r
428\r
429 if(src != 0)\r
430 {\r
431 if((uint32)*r_dst == 0x80000000 && src == -1)\r
432 {\r
433 FLAG_Z = 0;\r
434 FLAG_N = NFLAG_CLEAR;\r
435 FLAG_V = VFLAG_CLEAR;\r
436 FLAG_C = CFLAG_CLEAR;\r
437 *r_dst = 0;\r
438 return;\r
439 }\r
440\r
441 quotient = MAKE_INT_32(*r_dst) / src;\r
442 remainder = MAKE_INT_32(*r_dst) % src;\r
443\r
444 if(quotient == MAKE_INT_16(quotient))\r
445 {\r
446 FLAG_Z = quotient;\r
447 FLAG_N = NFLAG_16(quotient);\r
448 FLAG_V = VFLAG_CLEAR;\r
449 FLAG_C = CFLAG_CLEAR;\r
450 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
451 return;\r
452 }\r
453 FLAG_V = VFLAG_SET;\r
454 return;\r
455 }\r
456 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
457}\r
458\r
459\r
460void m68k_op_divs_16_pi(void)\r
461{\r
462 uint* r_dst = &DX;\r
463 sint src = MAKE_INT_16(OPER_AY_PI_16());\r
464 sint quotient;\r
465 sint remainder;\r
466\r
467 if(src != 0)\r
468 {\r
469 if((uint32)*r_dst == 0x80000000 && src == -1)\r
470 {\r
471 FLAG_Z = 0;\r
472 FLAG_N = NFLAG_CLEAR;\r
473 FLAG_V = VFLAG_CLEAR;\r
474 FLAG_C = CFLAG_CLEAR;\r
475 *r_dst = 0;\r
476 return;\r
477 }\r
478\r
479 quotient = MAKE_INT_32(*r_dst) / src;\r
480 remainder = MAKE_INT_32(*r_dst) % src;\r
481\r
482 if(quotient == MAKE_INT_16(quotient))\r
483 {\r
484 FLAG_Z = quotient;\r
485 FLAG_N = NFLAG_16(quotient);\r
486 FLAG_V = VFLAG_CLEAR;\r
487 FLAG_C = CFLAG_CLEAR;\r
488 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
489 return;\r
490 }\r
491 FLAG_V = VFLAG_SET;\r
492 return;\r
493 }\r
494 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
495}\r
496\r
497\r
498void m68k_op_divs_16_pd(void)\r
499{\r
500 uint* r_dst = &DX;\r
501 sint src = MAKE_INT_16(OPER_AY_PD_16());\r
502 sint quotient;\r
503 sint remainder;\r
504\r
505 if(src != 0)\r
506 {\r
507 if((uint32)*r_dst == 0x80000000 && src == -1)\r
508 {\r
509 FLAG_Z = 0;\r
510 FLAG_N = NFLAG_CLEAR;\r
511 FLAG_V = VFLAG_CLEAR;\r
512 FLAG_C = CFLAG_CLEAR;\r
513 *r_dst = 0;\r
514 return;\r
515 }\r
516\r
517 quotient = MAKE_INT_32(*r_dst) / src;\r
518 remainder = MAKE_INT_32(*r_dst) % src;\r
519\r
520 if(quotient == MAKE_INT_16(quotient))\r
521 {\r
522 FLAG_Z = quotient;\r
523 FLAG_N = NFLAG_16(quotient);\r
524 FLAG_V = VFLAG_CLEAR;\r
525 FLAG_C = CFLAG_CLEAR;\r
526 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
527 return;\r
528 }\r
529 FLAG_V = VFLAG_SET;\r
530 return;\r
531 }\r
532 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
533}\r
534\r
535\r
536void m68k_op_divs_16_di(void)\r
537{\r
538 uint* r_dst = &DX;\r
539 sint src = MAKE_INT_16(OPER_AY_DI_16());\r
540 sint quotient;\r
541 sint remainder;\r
542\r
543 if(src != 0)\r
544 {\r
545 if((uint32)*r_dst == 0x80000000 && src == -1)\r
546 {\r
547 FLAG_Z = 0;\r
548 FLAG_N = NFLAG_CLEAR;\r
549 FLAG_V = VFLAG_CLEAR;\r
550 FLAG_C = CFLAG_CLEAR;\r
551 *r_dst = 0;\r
552 return;\r
553 }\r
554\r
555 quotient = MAKE_INT_32(*r_dst) / src;\r
556 remainder = MAKE_INT_32(*r_dst) % src;\r
557\r
558 if(quotient == MAKE_INT_16(quotient))\r
559 {\r
560 FLAG_Z = quotient;\r
561 FLAG_N = NFLAG_16(quotient);\r
562 FLAG_V = VFLAG_CLEAR;\r
563 FLAG_C = CFLAG_CLEAR;\r
564 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
565 return;\r
566 }\r
567 FLAG_V = VFLAG_SET;\r
568 return;\r
569 }\r
570 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
571}\r
572\r
573\r
574void m68k_op_divs_16_ix(void)\r
575{\r
576 uint* r_dst = &DX;\r
577 sint src = MAKE_INT_16(OPER_AY_IX_16());\r
578 sint quotient;\r
579 sint remainder;\r
580\r
581 if(src != 0)\r
582 {\r
583 if((uint32)*r_dst == 0x80000000 && src == -1)\r
584 {\r
585 FLAG_Z = 0;\r
586 FLAG_N = NFLAG_CLEAR;\r
587 FLAG_V = VFLAG_CLEAR;\r
588 FLAG_C = CFLAG_CLEAR;\r
589 *r_dst = 0;\r
590 return;\r
591 }\r
592\r
593 quotient = MAKE_INT_32(*r_dst) / src;\r
594 remainder = MAKE_INT_32(*r_dst) % src;\r
595\r
596 if(quotient == MAKE_INT_16(quotient))\r
597 {\r
598 FLAG_Z = quotient;\r
599 FLAG_N = NFLAG_16(quotient);\r
600 FLAG_V = VFLAG_CLEAR;\r
601 FLAG_C = CFLAG_CLEAR;\r
602 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
603 return;\r
604 }\r
605 FLAG_V = VFLAG_SET;\r
606 return;\r
607 }\r
608 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
609}\r
610\r
611\r
612void m68k_op_divs_16_aw(void)\r
613{\r
614 uint* r_dst = &DX;\r
615 sint src = MAKE_INT_16(OPER_AW_16());\r
616 sint quotient;\r
617 sint remainder;\r
618\r
619 if(src != 0)\r
620 {\r
621 if((uint32)*r_dst == 0x80000000 && src == -1)\r
622 {\r
623 FLAG_Z = 0;\r
624 FLAG_N = NFLAG_CLEAR;\r
625 FLAG_V = VFLAG_CLEAR;\r
626 FLAG_C = CFLAG_CLEAR;\r
627 *r_dst = 0;\r
628 return;\r
629 }\r
630\r
631 quotient = MAKE_INT_32(*r_dst) / src;\r
632 remainder = MAKE_INT_32(*r_dst) % src;\r
633\r
634 if(quotient == MAKE_INT_16(quotient))\r
635 {\r
636 FLAG_Z = quotient;\r
637 FLAG_N = NFLAG_16(quotient);\r
638 FLAG_V = VFLAG_CLEAR;\r
639 FLAG_C = CFLAG_CLEAR;\r
640 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
641 return;\r
642 }\r
643 FLAG_V = VFLAG_SET;\r
644 return;\r
645 }\r
646 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
647}\r
648\r
649\r
650void m68k_op_divs_16_al(void)\r
651{\r
652 uint* r_dst = &DX;\r
653 sint src = MAKE_INT_16(OPER_AL_16());\r
654 sint quotient;\r
655 sint remainder;\r
656\r
657 if(src != 0)\r
658 {\r
659 if((uint32)*r_dst == 0x80000000 && src == -1)\r
660 {\r
661 FLAG_Z = 0;\r
662 FLAG_N = NFLAG_CLEAR;\r
663 FLAG_V = VFLAG_CLEAR;\r
664 FLAG_C = CFLAG_CLEAR;\r
665 *r_dst = 0;\r
666 return;\r
667 }\r
668\r
669 quotient = MAKE_INT_32(*r_dst) / src;\r
670 remainder = MAKE_INT_32(*r_dst) % src;\r
671\r
672 if(quotient == MAKE_INT_16(quotient))\r
673 {\r
674 FLAG_Z = quotient;\r
675 FLAG_N = NFLAG_16(quotient);\r
676 FLAG_V = VFLAG_CLEAR;\r
677 FLAG_C = CFLAG_CLEAR;\r
678 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
679 return;\r
680 }\r
681 FLAG_V = VFLAG_SET;\r
682 return;\r
683 }\r
684 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
685}\r
686\r
687\r
688void m68k_op_divs_16_pcdi(void)\r
689{\r
690 uint* r_dst = &DX;\r
691 sint src = MAKE_INT_16(OPER_PCDI_16());\r
692 sint quotient;\r
693 sint remainder;\r
694\r
695 if(src != 0)\r
696 {\r
697 if((uint32)*r_dst == 0x80000000 && src == -1)\r
698 {\r
699 FLAG_Z = 0;\r
700 FLAG_N = NFLAG_CLEAR;\r
701 FLAG_V = VFLAG_CLEAR;\r
702 FLAG_C = CFLAG_CLEAR;\r
703 *r_dst = 0;\r
704 return;\r
705 }\r
706\r
707 quotient = MAKE_INT_32(*r_dst) / src;\r
708 remainder = MAKE_INT_32(*r_dst) % src;\r
709\r
710 if(quotient == MAKE_INT_16(quotient))\r
711 {\r
712 FLAG_Z = quotient;\r
713 FLAG_N = NFLAG_16(quotient);\r
714 FLAG_V = VFLAG_CLEAR;\r
715 FLAG_C = CFLAG_CLEAR;\r
716 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
717 return;\r
718 }\r
719 FLAG_V = VFLAG_SET;\r
720 return;\r
721 }\r
722 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
723}\r
724\r
725\r
726void m68k_op_divs_16_pcix(void)\r
727{\r
728 uint* r_dst = &DX;\r
729 sint src = MAKE_INT_16(OPER_PCIX_16());\r
730 sint quotient;\r
731 sint remainder;\r
732\r
733 if(src != 0)\r
734 {\r
735 if((uint32)*r_dst == 0x80000000 && src == -1)\r
736 {\r
737 FLAG_Z = 0;\r
738 FLAG_N = NFLAG_CLEAR;\r
739 FLAG_V = VFLAG_CLEAR;\r
740 FLAG_C = CFLAG_CLEAR;\r
741 *r_dst = 0;\r
742 return;\r
743 }\r
744\r
745 quotient = MAKE_INT_32(*r_dst) / src;\r
746 remainder = MAKE_INT_32(*r_dst) % src;\r
747\r
748 if(quotient == MAKE_INT_16(quotient))\r
749 {\r
750 FLAG_Z = quotient;\r
751 FLAG_N = NFLAG_16(quotient);\r
752 FLAG_V = VFLAG_CLEAR;\r
753 FLAG_C = CFLAG_CLEAR;\r
754 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
755 return;\r
756 }\r
757 FLAG_V = VFLAG_SET;\r
758 return;\r
759 }\r
760 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
761}\r
762\r
763\r
764void m68k_op_divs_16_i(void)\r
765{\r
766 uint* r_dst = &DX;\r
767 sint src = MAKE_INT_16(OPER_I_16());\r
768 sint quotient;\r
769 sint remainder;\r
770\r
771 if(src != 0)\r
772 {\r
773 if((uint32)*r_dst == 0x80000000 && src == -1)\r
774 {\r
775 FLAG_Z = 0;\r
776 FLAG_N = NFLAG_CLEAR;\r
777 FLAG_V = VFLAG_CLEAR;\r
778 FLAG_C = CFLAG_CLEAR;\r
779 *r_dst = 0;\r
780 return;\r
781 }\r
782\r
783 quotient = MAKE_INT_32(*r_dst) / src;\r
784 remainder = MAKE_INT_32(*r_dst) % src;\r
785\r
786 if(quotient == MAKE_INT_16(quotient))\r
787 {\r
788 FLAG_Z = quotient;\r
789 FLAG_N = NFLAG_16(quotient);\r
790 FLAG_V = VFLAG_CLEAR;\r
791 FLAG_C = CFLAG_CLEAR;\r
792 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
793 return;\r
794 }\r
795 FLAG_V = VFLAG_SET;\r
796 return;\r
797 }\r
798 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
799}\r
800\r
801\r
802void m68k_op_divu_16_d(void)\r
803{\r
804 uint* r_dst = &DX;\r
805 uint src = MASK_OUT_ABOVE_16(DY);\r
806\r
807 if(src != 0)\r
808 {\r
809 uint quotient = *r_dst / src;\r
810 uint remainder = *r_dst % src;\r
811\r
812 if(quotient < 0x10000)\r
813 {\r
814 FLAG_Z = quotient;\r
815 FLAG_N = NFLAG_16(quotient);\r
816 FLAG_V = VFLAG_CLEAR;\r
817 FLAG_C = CFLAG_CLEAR;\r
818 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
819 return;\r
820 }\r
821 FLAG_V = VFLAG_SET;\r
822 return;\r
823 }\r
824 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
825}\r
826\r
827\r
828void m68k_op_divu_16_ai(void)\r
829{\r
830 uint* r_dst = &DX;\r
831 uint src = OPER_AY_AI_16();\r
832\r
833 if(src != 0)\r
834 {\r
835 uint quotient = *r_dst / src;\r
836 uint remainder = *r_dst % src;\r
837\r
838 if(quotient < 0x10000)\r
839 {\r
840 FLAG_Z = quotient;\r
841 FLAG_N = NFLAG_16(quotient);\r
842 FLAG_V = VFLAG_CLEAR;\r
843 FLAG_C = CFLAG_CLEAR;\r
844 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
845 return;\r
846 }\r
847 FLAG_V = VFLAG_SET;\r
848 return;\r
849 }\r
850 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
851}\r
852\r
853\r
854void m68k_op_divu_16_pi(void)\r
855{\r
856 uint* r_dst = &DX;\r
857 uint src = OPER_AY_PI_16();\r
858\r
859 if(src != 0)\r
860 {\r
861 uint quotient = *r_dst / src;\r
862 uint remainder = *r_dst % src;\r
863\r
864 if(quotient < 0x10000)\r
865 {\r
866 FLAG_Z = quotient;\r
867 FLAG_N = NFLAG_16(quotient);\r
868 FLAG_V = VFLAG_CLEAR;\r
869 FLAG_C = CFLAG_CLEAR;\r
870 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
871 return;\r
872 }\r
873 FLAG_V = VFLAG_SET;\r
874 return;\r
875 }\r
876 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
877}\r
878\r
879\r
880void m68k_op_divu_16_pd(void)\r
881{\r
882 uint* r_dst = &DX;\r
883 uint src = OPER_AY_PD_16();\r
884\r
885 if(src != 0)\r
886 {\r
887 uint quotient = *r_dst / src;\r
888 uint remainder = *r_dst % src;\r
889\r
890 if(quotient < 0x10000)\r
891 {\r
892 FLAG_Z = quotient;\r
893 FLAG_N = NFLAG_16(quotient);\r
894 FLAG_V = VFLAG_CLEAR;\r
895 FLAG_C = CFLAG_CLEAR;\r
896 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
897 return;\r
898 }\r
899 FLAG_V = VFLAG_SET;\r
900 return;\r
901 }\r
902 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
903}\r
904\r
905\r
906void m68k_op_divu_16_di(void)\r
907{\r
908 uint* r_dst = &DX;\r
909 uint src = OPER_AY_DI_16();\r
910\r
911 if(src != 0)\r
912 {\r
913 uint quotient = *r_dst / src;\r
914 uint remainder = *r_dst % src;\r
915\r
916 if(quotient < 0x10000)\r
917 {\r
918 FLAG_Z = quotient;\r
919 FLAG_N = NFLAG_16(quotient);\r
920 FLAG_V = VFLAG_CLEAR;\r
921 FLAG_C = CFLAG_CLEAR;\r
922 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
923 return;\r
924 }\r
925 FLAG_V = VFLAG_SET;\r
926 return;\r
927 }\r
928 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
929}\r
930\r
931\r
932void m68k_op_divu_16_ix(void)\r
933{\r
934 uint* r_dst = &DX;\r
935 uint src = OPER_AY_IX_16();\r
936\r
937 if(src != 0)\r
938 {\r
939 uint quotient = *r_dst / src;\r
940 uint remainder = *r_dst % src;\r
941\r
942 if(quotient < 0x10000)\r
943 {\r
944 FLAG_Z = quotient;\r
945 FLAG_N = NFLAG_16(quotient);\r
946 FLAG_V = VFLAG_CLEAR;\r
947 FLAG_C = CFLAG_CLEAR;\r
948 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
949 return;\r
950 }\r
951 FLAG_V = VFLAG_SET;\r
952 return;\r
953 }\r
954 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
955}\r
956\r
957\r
958void m68k_op_divu_16_aw(void)\r
959{\r
960 uint* r_dst = &DX;\r
961 uint src = OPER_AW_16();\r
962\r
963 if(src != 0)\r
964 {\r
965 uint quotient = *r_dst / src;\r
966 uint remainder = *r_dst % src;\r
967\r
968 if(quotient < 0x10000)\r
969 {\r
970 FLAG_Z = quotient;\r
971 FLAG_N = NFLAG_16(quotient);\r
972 FLAG_V = VFLAG_CLEAR;\r
973 FLAG_C = CFLAG_CLEAR;\r
974 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
975 return;\r
976 }\r
977 FLAG_V = VFLAG_SET;\r
978 return;\r
979 }\r
980 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
981}\r
982\r
983\r
984void m68k_op_divu_16_al(void)\r
985{\r
986 uint* r_dst = &DX;\r
987 uint src = OPER_AL_16();\r
988\r
989 if(src != 0)\r
990 {\r
991 uint quotient = *r_dst / src;\r
992 uint remainder = *r_dst % src;\r
993\r
994 if(quotient < 0x10000)\r
995 {\r
996 FLAG_Z = quotient;\r
997 FLAG_N = NFLAG_16(quotient);\r
998 FLAG_V = VFLAG_CLEAR;\r
999 FLAG_C = CFLAG_CLEAR;\r
1000 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
1001 return;\r
1002 }\r
1003 FLAG_V = VFLAG_SET;\r
1004 return;\r
1005 }\r
1006 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1007}\r
1008\r
1009\r
1010void m68k_op_divu_16_pcdi(void)\r
1011{\r
1012 uint* r_dst = &DX;\r
1013 uint src = OPER_PCDI_16();\r
1014\r
1015 if(src != 0)\r
1016 {\r
1017 uint quotient = *r_dst / src;\r
1018 uint remainder = *r_dst % src;\r
1019\r
1020 if(quotient < 0x10000)\r
1021 {\r
1022 FLAG_Z = quotient;\r
1023 FLAG_N = NFLAG_16(quotient);\r
1024 FLAG_V = VFLAG_CLEAR;\r
1025 FLAG_C = CFLAG_CLEAR;\r
1026 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
1027 return;\r
1028 }\r
1029 FLAG_V = VFLAG_SET;\r
1030 return;\r
1031 }\r
1032 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1033}\r
1034\r
1035\r
1036void m68k_op_divu_16_pcix(void)\r
1037{\r
1038 uint* r_dst = &DX;\r
1039 uint src = OPER_PCIX_16();\r
1040\r
1041 if(src != 0)\r
1042 {\r
1043 uint quotient = *r_dst / src;\r
1044 uint remainder = *r_dst % src;\r
1045\r
1046 if(quotient < 0x10000)\r
1047 {\r
1048 FLAG_Z = quotient;\r
1049 FLAG_N = NFLAG_16(quotient);\r
1050 FLAG_V = VFLAG_CLEAR;\r
1051 FLAG_C = CFLAG_CLEAR;\r
1052 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
1053 return;\r
1054 }\r
1055 FLAG_V = VFLAG_SET;\r
1056 return;\r
1057 }\r
1058 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1059}\r
1060\r
1061\r
1062void m68k_op_divu_16_i(void)\r
1063{\r
1064 uint* r_dst = &DX;\r
1065 uint src = OPER_I_16();\r
1066\r
1067 if(src != 0)\r
1068 {\r
1069 uint quotient = *r_dst / src;\r
1070 uint remainder = *r_dst % src;\r
1071\r
1072 if(quotient < 0x10000)\r
1073 {\r
1074 FLAG_Z = quotient;\r
1075 FLAG_N = NFLAG_16(quotient);\r
1076 FLAG_V = VFLAG_CLEAR;\r
1077 FLAG_C = CFLAG_CLEAR;\r
1078 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));\r
1079 return;\r
1080 }\r
1081 FLAG_V = VFLAG_SET;\r
1082 return;\r
1083 }\r
1084 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1085}\r
1086\r
1087\r
1088void m68k_op_divl_32_d(void)\r
1089{\r
1090#if M68K_USE_64_BIT\r
1091\r
1092 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1093 {\r
1094 uint word2 = OPER_I_16();\r
1095 uint64 divisor = DY;\r
1096 uint64 dividend = 0;\r
1097 uint64 quotient = 0;\r
1098 uint64 remainder = 0;\r
1099\r
1100 if(divisor != 0)\r
1101 {\r
1102 if(BIT_A(word2)) /* 64 bit */\r
1103 {\r
1104 dividend = REG_D[word2 & 7];\r
1105 dividend <<= 32;\r
1106 dividend |= REG_D[(word2 >> 12) & 7];\r
1107\r
1108 if(BIT_B(word2)) /* signed */\r
1109 {\r
1110 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
1111 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
1112 if((sint64)quotient != (sint64)((sint32)quotient))\r
1113 {\r
1114 FLAG_V = VFLAG_SET;\r
1115 return;\r
1116 }\r
1117 }\r
1118 else /* unsigned */\r
1119 {\r
1120 quotient = dividend / divisor;\r
1121 if(quotient > 0xffffffff)\r
1122 {\r
1123 FLAG_V = VFLAG_SET;\r
1124 return;\r
1125 }\r
1126 remainder = dividend % divisor;\r
1127 }\r
1128 }\r
1129 else /* 32 bit */\r
1130 {\r
1131 dividend = REG_D[(word2 >> 12) & 7];\r
1132 if(BIT_B(word2)) /* signed */\r
1133 {\r
1134 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
1135 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
1136 }\r
1137 else /* unsigned */\r
1138 {\r
1139 quotient = dividend / divisor;\r
1140 remainder = dividend % divisor;\r
1141 }\r
1142 }\r
1143\r
1144 REG_D[word2 & 7] = remainder;\r
1145 REG_D[(word2 >> 12) & 7] = quotient;\r
1146\r
1147 FLAG_N = NFLAG_32(quotient);\r
1148 FLAG_Z = quotient;\r
1149 FLAG_V = VFLAG_CLEAR;\r
1150 FLAG_C = CFLAG_CLEAR;\r
1151 return;\r
1152 }\r
1153 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1154 return;\r
1155 }\r
1156 m68ki_exception_illegal();\r
1157\r
1158#else\r
1159\r
1160 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1161 {\r
1162 uint word2 = OPER_I_16();\r
1163 uint divisor = DY;\r
1164 uint dividend_hi = REG_D[word2 & 7];\r
1165 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
1166 uint quotient = 0;\r
1167 uint remainder = 0;\r
1168 uint dividend_neg = 0;\r
1169 uint divisor_neg = 0;\r
1170 sint i;\r
1171 uint overflow;\r
1172\r
1173 if(divisor != 0)\r
1174 {\r
1175 /* quad / long : long quotient, long remainder */\r
1176 if(BIT_A(word2))\r
1177 {\r
1178 if(BIT_B(word2)) /* signed */\r
1179 {\r
1180 /* special case in signed divide */\r
1181 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
1182 {\r
1183 REG_D[word2 & 7] = 0;\r
1184 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
1185\r
1186 FLAG_N = NFLAG_SET;\r
1187 FLAG_Z = ZFLAG_CLEAR;\r
1188 FLAG_V = VFLAG_CLEAR;\r
1189 FLAG_C = CFLAG_CLEAR;\r
1190 return;\r
1191 }\r
1192 if(GET_MSB_32(dividend_hi))\r
1193 {\r
1194 dividend_neg = 1;\r
1195 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
1196 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
1197 }\r
1198 if(GET_MSB_32(divisor))\r
1199 {\r
1200 divisor_neg = 1;\r
1201 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
1202\r
1203 }\r
1204 }\r
1205\r
1206 /* if the upper long is greater than the divisor, we're overflowing. */\r
1207 if(dividend_hi >= divisor)\r
1208 {\r
1209 FLAG_V = VFLAG_SET;\r
1210 return;\r
1211 }\r
1212\r
1213 for(i = 31; i >= 0; i--)\r
1214 {\r
1215 quotient <<= 1;\r
1216 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
1217 if(remainder >= divisor)\r
1218 {\r
1219 remainder -= divisor;\r
1220 quotient++;\r
1221 }\r
1222 }\r
1223 for(i = 31; i >= 0; i--)\r
1224 {\r
1225 quotient <<= 1;\r
1226 overflow = GET_MSB_32(remainder);\r
1227 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
1228 if(remainder >= divisor || overflow)\r
1229 {\r
1230 remainder -= divisor;\r
1231 quotient++;\r
1232 }\r
1233 }\r
1234\r
1235 if(BIT_B(word2)) /* signed */\r
1236 {\r
1237 if(quotient > 0x7fffffff)\r
1238 {\r
1239 FLAG_V = VFLAG_SET;\r
1240 return;\r
1241 }\r
1242 if(dividend_neg)\r
1243 {\r
1244 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
1245 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
1246 }\r
1247 if(divisor_neg)\r
1248 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
1249 }\r
1250\r
1251 REG_D[word2 & 7] = remainder;\r
1252 REG_D[(word2 >> 12) & 7] = quotient;\r
1253\r
1254 FLAG_N = NFLAG_32(quotient);\r
1255 FLAG_Z = quotient;\r
1256 FLAG_V = VFLAG_CLEAR;\r
1257 FLAG_C = CFLAG_CLEAR;\r
1258 return;\r
1259 }\r
1260\r
1261 /* long / long: long quotient, maybe long remainder */\r
1262 if(BIT_B(word2)) /* signed */\r
1263 {\r
1264 /* Special case in divide */\r
1265 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
1266 {\r
1267 FLAG_N = NFLAG_SET;\r
1268 FLAG_Z = ZFLAG_CLEAR;\r
1269 FLAG_V = VFLAG_CLEAR;\r
1270 FLAG_C = CFLAG_CLEAR;\r
1271 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
1272 REG_D[word2 & 7] = 0;\r
1273 return;\r
1274 }\r
1275 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
1276 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
1277 }\r
1278 else\r
1279 {\r
1280 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
1281 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
1282 }\r
1283\r
1284 FLAG_N = NFLAG_32(quotient);\r
1285 FLAG_Z = quotient;\r
1286 FLAG_V = VFLAG_CLEAR;\r
1287 FLAG_C = CFLAG_CLEAR;\r
1288 return;\r
1289 }\r
1290 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1291 return;\r
1292 }\r
1293 m68ki_exception_illegal();\r
1294\r
1295#endif\r
1296}\r
1297\r
1298\r
1299void m68k_op_divl_32_ai(void)\r
1300{\r
1301#if M68K_USE_64_BIT\r
1302\r
1303 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1304 {\r
1305 uint word2 = OPER_I_16();\r
1306 uint64 divisor = OPER_AY_AI_32();\r
1307 uint64 dividend = 0;\r
1308 uint64 quotient = 0;\r
1309 uint64 remainder = 0;\r
1310\r
1311 if(divisor != 0)\r
1312 {\r
1313 if(BIT_A(word2)) /* 64 bit */\r
1314 {\r
1315 dividend = REG_D[word2 & 7];\r
1316 dividend <<= 32;\r
1317 dividend |= REG_D[(word2 >> 12) & 7];\r
1318\r
1319 if(BIT_B(word2)) /* signed */\r
1320 {\r
1321 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
1322 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
1323 if((sint64)quotient != (sint64)((sint32)quotient))\r
1324 {\r
1325 FLAG_V = VFLAG_SET;\r
1326 return;\r
1327 }\r
1328 }\r
1329 else /* unsigned */\r
1330 {\r
1331 quotient = dividend / divisor;\r
1332 if(quotient > 0xffffffff)\r
1333 {\r
1334 FLAG_V = VFLAG_SET;\r
1335 return;\r
1336 }\r
1337 remainder = dividend % divisor;\r
1338 }\r
1339 }\r
1340 else /* 32 bit */\r
1341 {\r
1342 dividend = REG_D[(word2 >> 12) & 7];\r
1343 if(BIT_B(word2)) /* signed */\r
1344 {\r
1345 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
1346 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
1347 }\r
1348 else /* unsigned */\r
1349 {\r
1350 quotient = dividend / divisor;\r
1351 remainder = dividend % divisor;\r
1352 }\r
1353 }\r
1354\r
1355 REG_D[word2 & 7] = remainder;\r
1356 REG_D[(word2 >> 12) & 7] = quotient;\r
1357\r
1358 FLAG_N = NFLAG_32(quotient);\r
1359 FLAG_Z = quotient;\r
1360 FLAG_V = VFLAG_CLEAR;\r
1361 FLAG_C = CFLAG_CLEAR;\r
1362 return;\r
1363 }\r
1364 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1365 return;\r
1366 }\r
1367 m68ki_exception_illegal();\r
1368\r
1369#else\r
1370\r
1371 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1372 {\r
1373 uint word2 = OPER_I_16();\r
1374 uint divisor = OPER_AY_AI_32();\r
1375 uint dividend_hi = REG_D[word2 & 7];\r
1376 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
1377 uint quotient = 0;\r
1378 uint remainder = 0;\r
1379 uint dividend_neg = 0;\r
1380 uint divisor_neg = 0;\r
1381 sint i;\r
1382 uint overflow;\r
1383\r
1384 if(divisor != 0)\r
1385 {\r
1386 /* quad / long : long quotient, long remainder */\r
1387 if(BIT_A(word2))\r
1388 {\r
1389 if(BIT_B(word2)) /* signed */\r
1390 {\r
1391 /* special case in signed divide */\r
1392 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
1393 {\r
1394 REG_D[word2 & 7] = 0;\r
1395 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
1396\r
1397 FLAG_N = NFLAG_SET;\r
1398 FLAG_Z = ZFLAG_CLEAR;\r
1399 FLAG_V = VFLAG_CLEAR;\r
1400 FLAG_C = CFLAG_CLEAR;\r
1401 return;\r
1402 }\r
1403 if(GET_MSB_32(dividend_hi))\r
1404 {\r
1405 dividend_neg = 1;\r
1406 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
1407 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
1408 }\r
1409 if(GET_MSB_32(divisor))\r
1410 {\r
1411 divisor_neg = 1;\r
1412 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
1413\r
1414 }\r
1415 }\r
1416\r
1417 /* if the upper long is greater than the divisor, we're overflowing. */\r
1418 if(dividend_hi >= divisor)\r
1419 {\r
1420 FLAG_V = VFLAG_SET;\r
1421 return;\r
1422 }\r
1423\r
1424 for(i = 31; i >= 0; i--)\r
1425 {\r
1426 quotient <<= 1;\r
1427 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
1428 if(remainder >= divisor)\r
1429 {\r
1430 remainder -= divisor;\r
1431 quotient++;\r
1432 }\r
1433 }\r
1434 for(i = 31; i >= 0; i--)\r
1435 {\r
1436 quotient <<= 1;\r
1437 overflow = GET_MSB_32(remainder);\r
1438 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
1439 if(remainder >= divisor || overflow)\r
1440 {\r
1441 remainder -= divisor;\r
1442 quotient++;\r
1443 }\r
1444 }\r
1445\r
1446 if(BIT_B(word2)) /* signed */\r
1447 {\r
1448 if(quotient > 0x7fffffff)\r
1449 {\r
1450 FLAG_V = VFLAG_SET;\r
1451 return;\r
1452 }\r
1453 if(dividend_neg)\r
1454 {\r
1455 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
1456 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
1457 }\r
1458 if(divisor_neg)\r
1459 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
1460 }\r
1461\r
1462 REG_D[word2 & 7] = remainder;\r
1463 REG_D[(word2 >> 12) & 7] = quotient;\r
1464\r
1465 FLAG_N = NFLAG_32(quotient);\r
1466 FLAG_Z = quotient;\r
1467 FLAG_V = VFLAG_CLEAR;\r
1468 FLAG_C = CFLAG_CLEAR;\r
1469 return;\r
1470 }\r
1471\r
1472 /* long / long: long quotient, maybe long remainder */\r
1473 if(BIT_B(word2)) /* signed */\r
1474 {\r
1475 /* Special case in divide */\r
1476 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
1477 {\r
1478 FLAG_N = NFLAG_SET;\r
1479 FLAG_Z = ZFLAG_CLEAR;\r
1480 FLAG_V = VFLAG_CLEAR;\r
1481 FLAG_C = CFLAG_CLEAR;\r
1482 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
1483 REG_D[word2 & 7] = 0;\r
1484 return;\r
1485 }\r
1486 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
1487 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
1488 }\r
1489 else\r
1490 {\r
1491 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
1492 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
1493 }\r
1494\r
1495 FLAG_N = NFLAG_32(quotient);\r
1496 FLAG_Z = quotient;\r
1497 FLAG_V = VFLAG_CLEAR;\r
1498 FLAG_C = CFLAG_CLEAR;\r
1499 return;\r
1500 }\r
1501 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1502 return;\r
1503 }\r
1504 m68ki_exception_illegal();\r
1505\r
1506#endif\r
1507}\r
1508\r
1509\r
1510void m68k_op_divl_32_pi(void)\r
1511{\r
1512#if M68K_USE_64_BIT\r
1513\r
1514 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1515 {\r
1516 uint word2 = OPER_I_16();\r
1517 uint64 divisor = OPER_AY_PI_32();\r
1518 uint64 dividend = 0;\r
1519 uint64 quotient = 0;\r
1520 uint64 remainder = 0;\r
1521\r
1522 if(divisor != 0)\r
1523 {\r
1524 if(BIT_A(word2)) /* 64 bit */\r
1525 {\r
1526 dividend = REG_D[word2 & 7];\r
1527 dividend <<= 32;\r
1528 dividend |= REG_D[(word2 >> 12) & 7];\r
1529\r
1530 if(BIT_B(word2)) /* signed */\r
1531 {\r
1532 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
1533 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
1534 if((sint64)quotient != (sint64)((sint32)quotient))\r
1535 {\r
1536 FLAG_V = VFLAG_SET;\r
1537 return;\r
1538 }\r
1539 }\r
1540 else /* unsigned */\r
1541 {\r
1542 quotient = dividend / divisor;\r
1543 if(quotient > 0xffffffff)\r
1544 {\r
1545 FLAG_V = VFLAG_SET;\r
1546 return;\r
1547 }\r
1548 remainder = dividend % divisor;\r
1549 }\r
1550 }\r
1551 else /* 32 bit */\r
1552 {\r
1553 dividend = REG_D[(word2 >> 12) & 7];\r
1554 if(BIT_B(word2)) /* signed */\r
1555 {\r
1556 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
1557 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
1558 }\r
1559 else /* unsigned */\r
1560 {\r
1561 quotient = dividend / divisor;\r
1562 remainder = dividend % divisor;\r
1563 }\r
1564 }\r
1565\r
1566 REG_D[word2 & 7] = remainder;\r
1567 REG_D[(word2 >> 12) & 7] = quotient;\r
1568\r
1569 FLAG_N = NFLAG_32(quotient);\r
1570 FLAG_Z = quotient;\r
1571 FLAG_V = VFLAG_CLEAR;\r
1572 FLAG_C = CFLAG_CLEAR;\r
1573 return;\r
1574 }\r
1575 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1576 return;\r
1577 }\r
1578 m68ki_exception_illegal();\r
1579\r
1580#else\r
1581\r
1582 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1583 {\r
1584 uint word2 = OPER_I_16();\r
1585 uint divisor = OPER_AY_PI_32();\r
1586 uint dividend_hi = REG_D[word2 & 7];\r
1587 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
1588 uint quotient = 0;\r
1589 uint remainder = 0;\r
1590 uint dividend_neg = 0;\r
1591 uint divisor_neg = 0;\r
1592 sint i;\r
1593 uint overflow;\r
1594\r
1595 if(divisor != 0)\r
1596 {\r
1597 /* quad / long : long quotient, long remainder */\r
1598 if(BIT_A(word2))\r
1599 {\r
1600 if(BIT_B(word2)) /* signed */\r
1601 {\r
1602 /* special case in signed divide */\r
1603 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
1604 {\r
1605 REG_D[word2 & 7] = 0;\r
1606 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
1607\r
1608 FLAG_N = NFLAG_SET;\r
1609 FLAG_Z = ZFLAG_CLEAR;\r
1610 FLAG_V = VFLAG_CLEAR;\r
1611 FLAG_C = CFLAG_CLEAR;\r
1612 return;\r
1613 }\r
1614 if(GET_MSB_32(dividend_hi))\r
1615 {\r
1616 dividend_neg = 1;\r
1617 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
1618 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
1619 }\r
1620 if(GET_MSB_32(divisor))\r
1621 {\r
1622 divisor_neg = 1;\r
1623 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
1624\r
1625 }\r
1626 }\r
1627\r
1628 /* if the upper long is greater than the divisor, we're overflowing. */\r
1629 if(dividend_hi >= divisor)\r
1630 {\r
1631 FLAG_V = VFLAG_SET;\r
1632 return;\r
1633 }\r
1634\r
1635 for(i = 31; i >= 0; i--)\r
1636 {\r
1637 quotient <<= 1;\r
1638 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
1639 if(remainder >= divisor)\r
1640 {\r
1641 remainder -= divisor;\r
1642 quotient++;\r
1643 }\r
1644 }\r
1645 for(i = 31; i >= 0; i--)\r
1646 {\r
1647 quotient <<= 1;\r
1648 overflow = GET_MSB_32(remainder);\r
1649 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
1650 if(remainder >= divisor || overflow)\r
1651 {\r
1652 remainder -= divisor;\r
1653 quotient++;\r
1654 }\r
1655 }\r
1656\r
1657 if(BIT_B(word2)) /* signed */\r
1658 {\r
1659 if(quotient > 0x7fffffff)\r
1660 {\r
1661 FLAG_V = VFLAG_SET;\r
1662 return;\r
1663 }\r
1664 if(dividend_neg)\r
1665 {\r
1666 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
1667 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
1668 }\r
1669 if(divisor_neg)\r
1670 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
1671 }\r
1672\r
1673 REG_D[word2 & 7] = remainder;\r
1674 REG_D[(word2 >> 12) & 7] = quotient;\r
1675\r
1676 FLAG_N = NFLAG_32(quotient);\r
1677 FLAG_Z = quotient;\r
1678 FLAG_V = VFLAG_CLEAR;\r
1679 FLAG_C = CFLAG_CLEAR;\r
1680 return;\r
1681 }\r
1682\r
1683 /* long / long: long quotient, maybe long remainder */\r
1684 if(BIT_B(word2)) /* signed */\r
1685 {\r
1686 /* Special case in divide */\r
1687 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
1688 {\r
1689 FLAG_N = NFLAG_SET;\r
1690 FLAG_Z = ZFLAG_CLEAR;\r
1691 FLAG_V = VFLAG_CLEAR;\r
1692 FLAG_C = CFLAG_CLEAR;\r
1693 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
1694 REG_D[word2 & 7] = 0;\r
1695 return;\r
1696 }\r
1697 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
1698 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
1699 }\r
1700 else\r
1701 {\r
1702 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
1703 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
1704 }\r
1705\r
1706 FLAG_N = NFLAG_32(quotient);\r
1707 FLAG_Z = quotient;\r
1708 FLAG_V = VFLAG_CLEAR;\r
1709 FLAG_C = CFLAG_CLEAR;\r
1710 return;\r
1711 }\r
1712 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1713 return;\r
1714 }\r
1715 m68ki_exception_illegal();\r
1716\r
1717#endif\r
1718}\r
1719\r
1720\r
1721void m68k_op_divl_32_pd(void)\r
1722{\r
1723#if M68K_USE_64_BIT\r
1724\r
1725 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1726 {\r
1727 uint word2 = OPER_I_16();\r
1728 uint64 divisor = OPER_AY_PD_32();\r
1729 uint64 dividend = 0;\r
1730 uint64 quotient = 0;\r
1731 uint64 remainder = 0;\r
1732\r
1733 if(divisor != 0)\r
1734 {\r
1735 if(BIT_A(word2)) /* 64 bit */\r
1736 {\r
1737 dividend = REG_D[word2 & 7];\r
1738 dividend <<= 32;\r
1739 dividend |= REG_D[(word2 >> 12) & 7];\r
1740\r
1741 if(BIT_B(word2)) /* signed */\r
1742 {\r
1743 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
1744 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
1745 if((sint64)quotient != (sint64)((sint32)quotient))\r
1746 {\r
1747 FLAG_V = VFLAG_SET;\r
1748 return;\r
1749 }\r
1750 }\r
1751 else /* unsigned */\r
1752 {\r
1753 quotient = dividend / divisor;\r
1754 if(quotient > 0xffffffff)\r
1755 {\r
1756 FLAG_V = VFLAG_SET;\r
1757 return;\r
1758 }\r
1759 remainder = dividend % divisor;\r
1760 }\r
1761 }\r
1762 else /* 32 bit */\r
1763 {\r
1764 dividend = REG_D[(word2 >> 12) & 7];\r
1765 if(BIT_B(word2)) /* signed */\r
1766 {\r
1767 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
1768 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
1769 }\r
1770 else /* unsigned */\r
1771 {\r
1772 quotient = dividend / divisor;\r
1773 remainder = dividend % divisor;\r
1774 }\r
1775 }\r
1776\r
1777 REG_D[word2 & 7] = remainder;\r
1778 REG_D[(word2 >> 12) & 7] = quotient;\r
1779\r
1780 FLAG_N = NFLAG_32(quotient);\r
1781 FLAG_Z = quotient;\r
1782 FLAG_V = VFLAG_CLEAR;\r
1783 FLAG_C = CFLAG_CLEAR;\r
1784 return;\r
1785 }\r
1786 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1787 return;\r
1788 }\r
1789 m68ki_exception_illegal();\r
1790\r
1791#else\r
1792\r
1793 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1794 {\r
1795 uint word2 = OPER_I_16();\r
1796 uint divisor = OPER_AY_PD_32();\r
1797 uint dividend_hi = REG_D[word2 & 7];\r
1798 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
1799 uint quotient = 0;\r
1800 uint remainder = 0;\r
1801 uint dividend_neg = 0;\r
1802 uint divisor_neg = 0;\r
1803 sint i;\r
1804 uint overflow;\r
1805\r
1806 if(divisor != 0)\r
1807 {\r
1808 /* quad / long : long quotient, long remainder */\r
1809 if(BIT_A(word2))\r
1810 {\r
1811 if(BIT_B(word2)) /* signed */\r
1812 {\r
1813 /* special case in signed divide */\r
1814 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
1815 {\r
1816 REG_D[word2 & 7] = 0;\r
1817 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
1818\r
1819 FLAG_N = NFLAG_SET;\r
1820 FLAG_Z = ZFLAG_CLEAR;\r
1821 FLAG_V = VFLAG_CLEAR;\r
1822 FLAG_C = CFLAG_CLEAR;\r
1823 return;\r
1824 }\r
1825 if(GET_MSB_32(dividend_hi))\r
1826 {\r
1827 dividend_neg = 1;\r
1828 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
1829 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
1830 }\r
1831 if(GET_MSB_32(divisor))\r
1832 {\r
1833 divisor_neg = 1;\r
1834 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
1835\r
1836 }\r
1837 }\r
1838\r
1839 /* if the upper long is greater than the divisor, we're overflowing. */\r
1840 if(dividend_hi >= divisor)\r
1841 {\r
1842 FLAG_V = VFLAG_SET;\r
1843 return;\r
1844 }\r
1845\r
1846 for(i = 31; i >= 0; i--)\r
1847 {\r
1848 quotient <<= 1;\r
1849 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
1850 if(remainder >= divisor)\r
1851 {\r
1852 remainder -= divisor;\r
1853 quotient++;\r
1854 }\r
1855 }\r
1856 for(i = 31; i >= 0; i--)\r
1857 {\r
1858 quotient <<= 1;\r
1859 overflow = GET_MSB_32(remainder);\r
1860 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
1861 if(remainder >= divisor || overflow)\r
1862 {\r
1863 remainder -= divisor;\r
1864 quotient++;\r
1865 }\r
1866 }\r
1867\r
1868 if(BIT_B(word2)) /* signed */\r
1869 {\r
1870 if(quotient > 0x7fffffff)\r
1871 {\r
1872 FLAG_V = VFLAG_SET;\r
1873 return;\r
1874 }\r
1875 if(dividend_neg)\r
1876 {\r
1877 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
1878 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
1879 }\r
1880 if(divisor_neg)\r
1881 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
1882 }\r
1883\r
1884 REG_D[word2 & 7] = remainder;\r
1885 REG_D[(word2 >> 12) & 7] = quotient;\r
1886\r
1887 FLAG_N = NFLAG_32(quotient);\r
1888 FLAG_Z = quotient;\r
1889 FLAG_V = VFLAG_CLEAR;\r
1890 FLAG_C = CFLAG_CLEAR;\r
1891 return;\r
1892 }\r
1893\r
1894 /* long / long: long quotient, maybe long remainder */\r
1895 if(BIT_B(word2)) /* signed */\r
1896 {\r
1897 /* Special case in divide */\r
1898 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
1899 {\r
1900 FLAG_N = NFLAG_SET;\r
1901 FLAG_Z = ZFLAG_CLEAR;\r
1902 FLAG_V = VFLAG_CLEAR;\r
1903 FLAG_C = CFLAG_CLEAR;\r
1904 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
1905 REG_D[word2 & 7] = 0;\r
1906 return;\r
1907 }\r
1908 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
1909 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
1910 }\r
1911 else\r
1912 {\r
1913 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
1914 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
1915 }\r
1916\r
1917 FLAG_N = NFLAG_32(quotient);\r
1918 FLAG_Z = quotient;\r
1919 FLAG_V = VFLAG_CLEAR;\r
1920 FLAG_C = CFLAG_CLEAR;\r
1921 return;\r
1922 }\r
1923 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1924 return;\r
1925 }\r
1926 m68ki_exception_illegal();\r
1927\r
1928#endif\r
1929}\r
1930\r
1931\r
1932void m68k_op_divl_32_di(void)\r
1933{\r
1934#if M68K_USE_64_BIT\r
1935\r
1936 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
1937 {\r
1938 uint word2 = OPER_I_16();\r
1939 uint64 divisor = OPER_AY_DI_32();\r
1940 uint64 dividend = 0;\r
1941 uint64 quotient = 0;\r
1942 uint64 remainder = 0;\r
1943\r
1944 if(divisor != 0)\r
1945 {\r
1946 if(BIT_A(word2)) /* 64 bit */\r
1947 {\r
1948 dividend = REG_D[word2 & 7];\r
1949 dividend <<= 32;\r
1950 dividend |= REG_D[(word2 >> 12) & 7];\r
1951\r
1952 if(BIT_B(word2)) /* signed */\r
1953 {\r
1954 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
1955 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
1956 if((sint64)quotient != (sint64)((sint32)quotient))\r
1957 {\r
1958 FLAG_V = VFLAG_SET;\r
1959 return;\r
1960 }\r
1961 }\r
1962 else /* unsigned */\r
1963 {\r
1964 quotient = dividend / divisor;\r
1965 if(quotient > 0xffffffff)\r
1966 {\r
1967 FLAG_V = VFLAG_SET;\r
1968 return;\r
1969 }\r
1970 remainder = dividend % divisor;\r
1971 }\r
1972 }\r
1973 else /* 32 bit */\r
1974 {\r
1975 dividend = REG_D[(word2 >> 12) & 7];\r
1976 if(BIT_B(word2)) /* signed */\r
1977 {\r
1978 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
1979 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
1980 }\r
1981 else /* unsigned */\r
1982 {\r
1983 quotient = dividend / divisor;\r
1984 remainder = dividend % divisor;\r
1985 }\r
1986 }\r
1987\r
1988 REG_D[word2 & 7] = remainder;\r
1989 REG_D[(word2 >> 12) & 7] = quotient;\r
1990\r
1991 FLAG_N = NFLAG_32(quotient);\r
1992 FLAG_Z = quotient;\r
1993 FLAG_V = VFLAG_CLEAR;\r
1994 FLAG_C = CFLAG_CLEAR;\r
1995 return;\r
1996 }\r
1997 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
1998 return;\r
1999 }\r
2000 m68ki_exception_illegal();\r
2001\r
2002#else\r
2003\r
2004 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2005 {\r
2006 uint word2 = OPER_I_16();\r
2007 uint divisor = OPER_AY_DI_32();\r
2008 uint dividend_hi = REG_D[word2 & 7];\r
2009 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
2010 uint quotient = 0;\r
2011 uint remainder = 0;\r
2012 uint dividend_neg = 0;\r
2013 uint divisor_neg = 0;\r
2014 sint i;\r
2015 uint overflow;\r
2016\r
2017 if(divisor != 0)\r
2018 {\r
2019 /* quad / long : long quotient, long remainder */\r
2020 if(BIT_A(word2))\r
2021 {\r
2022 if(BIT_B(word2)) /* signed */\r
2023 {\r
2024 /* special case in signed divide */\r
2025 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2026 {\r
2027 REG_D[word2 & 7] = 0;\r
2028 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2029\r
2030 FLAG_N = NFLAG_SET;\r
2031 FLAG_Z = ZFLAG_CLEAR;\r
2032 FLAG_V = VFLAG_CLEAR;\r
2033 FLAG_C = CFLAG_CLEAR;\r
2034 return;\r
2035 }\r
2036 if(GET_MSB_32(dividend_hi))\r
2037 {\r
2038 dividend_neg = 1;\r
2039 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
2040 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
2041 }\r
2042 if(GET_MSB_32(divisor))\r
2043 {\r
2044 divisor_neg = 1;\r
2045 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
2046\r
2047 }\r
2048 }\r
2049\r
2050 /* if the upper long is greater than the divisor, we're overflowing. */\r
2051 if(dividend_hi >= divisor)\r
2052 {\r
2053 FLAG_V = VFLAG_SET;\r
2054 return;\r
2055 }\r
2056\r
2057 for(i = 31; i >= 0; i--)\r
2058 {\r
2059 quotient <<= 1;\r
2060 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
2061 if(remainder >= divisor)\r
2062 {\r
2063 remainder -= divisor;\r
2064 quotient++;\r
2065 }\r
2066 }\r
2067 for(i = 31; i >= 0; i--)\r
2068 {\r
2069 quotient <<= 1;\r
2070 overflow = GET_MSB_32(remainder);\r
2071 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
2072 if(remainder >= divisor || overflow)\r
2073 {\r
2074 remainder -= divisor;\r
2075 quotient++;\r
2076 }\r
2077 }\r
2078\r
2079 if(BIT_B(word2)) /* signed */\r
2080 {\r
2081 if(quotient > 0x7fffffff)\r
2082 {\r
2083 FLAG_V = VFLAG_SET;\r
2084 return;\r
2085 }\r
2086 if(dividend_neg)\r
2087 {\r
2088 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
2089 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2090 }\r
2091 if(divisor_neg)\r
2092 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2093 }\r
2094\r
2095 REG_D[word2 & 7] = remainder;\r
2096 REG_D[(word2 >> 12) & 7] = quotient;\r
2097\r
2098 FLAG_N = NFLAG_32(quotient);\r
2099 FLAG_Z = quotient;\r
2100 FLAG_V = VFLAG_CLEAR;\r
2101 FLAG_C = CFLAG_CLEAR;\r
2102 return;\r
2103 }\r
2104\r
2105 /* long / long: long quotient, maybe long remainder */\r
2106 if(BIT_B(word2)) /* signed */\r
2107 {\r
2108 /* Special case in divide */\r
2109 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2110 {\r
2111 FLAG_N = NFLAG_SET;\r
2112 FLAG_Z = ZFLAG_CLEAR;\r
2113 FLAG_V = VFLAG_CLEAR;\r
2114 FLAG_C = CFLAG_CLEAR;\r
2115 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2116 REG_D[word2 & 7] = 0;\r
2117 return;\r
2118 }\r
2119 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
2120 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
2121 }\r
2122 else\r
2123 {\r
2124 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
2125 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
2126 }\r
2127\r
2128 FLAG_N = NFLAG_32(quotient);\r
2129 FLAG_Z = quotient;\r
2130 FLAG_V = VFLAG_CLEAR;\r
2131 FLAG_C = CFLAG_CLEAR;\r
2132 return;\r
2133 }\r
2134 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2135 return;\r
2136 }\r
2137 m68ki_exception_illegal();\r
2138\r
2139#endif\r
2140}\r
2141\r
2142\r
2143void m68k_op_divl_32_ix(void)\r
2144{\r
2145#if M68K_USE_64_BIT\r
2146\r
2147 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2148 {\r
2149 uint word2 = OPER_I_16();\r
2150 uint64 divisor = OPER_AY_IX_32();\r
2151 uint64 dividend = 0;\r
2152 uint64 quotient = 0;\r
2153 uint64 remainder = 0;\r
2154\r
2155 if(divisor != 0)\r
2156 {\r
2157 if(BIT_A(word2)) /* 64 bit */\r
2158 {\r
2159 dividend = REG_D[word2 & 7];\r
2160 dividend <<= 32;\r
2161 dividend |= REG_D[(word2 >> 12) & 7];\r
2162\r
2163 if(BIT_B(word2)) /* signed */\r
2164 {\r
2165 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
2166 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
2167 if((sint64)quotient != (sint64)((sint32)quotient))\r
2168 {\r
2169 FLAG_V = VFLAG_SET;\r
2170 return;\r
2171 }\r
2172 }\r
2173 else /* unsigned */\r
2174 {\r
2175 quotient = dividend / divisor;\r
2176 if(quotient > 0xffffffff)\r
2177 {\r
2178 FLAG_V = VFLAG_SET;\r
2179 return;\r
2180 }\r
2181 remainder = dividend % divisor;\r
2182 }\r
2183 }\r
2184 else /* 32 bit */\r
2185 {\r
2186 dividend = REG_D[(word2 >> 12) & 7];\r
2187 if(BIT_B(word2)) /* signed */\r
2188 {\r
2189 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
2190 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
2191 }\r
2192 else /* unsigned */\r
2193 {\r
2194 quotient = dividend / divisor;\r
2195 remainder = dividend % divisor;\r
2196 }\r
2197 }\r
2198\r
2199 REG_D[word2 & 7] = remainder;\r
2200 REG_D[(word2 >> 12) & 7] = quotient;\r
2201\r
2202 FLAG_N = NFLAG_32(quotient);\r
2203 FLAG_Z = quotient;\r
2204 FLAG_V = VFLAG_CLEAR;\r
2205 FLAG_C = CFLAG_CLEAR;\r
2206 return;\r
2207 }\r
2208 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2209 return;\r
2210 }\r
2211 m68ki_exception_illegal();\r
2212\r
2213#else\r
2214\r
2215 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2216 {\r
2217 uint word2 = OPER_I_16();\r
2218 uint divisor = OPER_AY_IX_32();\r
2219 uint dividend_hi = REG_D[word2 & 7];\r
2220 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
2221 uint quotient = 0;\r
2222 uint remainder = 0;\r
2223 uint dividend_neg = 0;\r
2224 uint divisor_neg = 0;\r
2225 sint i;\r
2226 uint overflow;\r
2227\r
2228 if(divisor != 0)\r
2229 {\r
2230 /* quad / long : long quotient, long remainder */\r
2231 if(BIT_A(word2))\r
2232 {\r
2233 if(BIT_B(word2)) /* signed */\r
2234 {\r
2235 /* special case in signed divide */\r
2236 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2237 {\r
2238 REG_D[word2 & 7] = 0;\r
2239 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2240\r
2241 FLAG_N = NFLAG_SET;\r
2242 FLAG_Z = ZFLAG_CLEAR;\r
2243 FLAG_V = VFLAG_CLEAR;\r
2244 FLAG_C = CFLAG_CLEAR;\r
2245 return;\r
2246 }\r
2247 if(GET_MSB_32(dividend_hi))\r
2248 {\r
2249 dividend_neg = 1;\r
2250 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
2251 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
2252 }\r
2253 if(GET_MSB_32(divisor))\r
2254 {\r
2255 divisor_neg = 1;\r
2256 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
2257\r
2258 }\r
2259 }\r
2260\r
2261 /* if the upper long is greater than the divisor, we're overflowing. */\r
2262 if(dividend_hi >= divisor)\r
2263 {\r
2264 FLAG_V = VFLAG_SET;\r
2265 return;\r
2266 }\r
2267\r
2268 for(i = 31; i >= 0; i--)\r
2269 {\r
2270 quotient <<= 1;\r
2271 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
2272 if(remainder >= divisor)\r
2273 {\r
2274 remainder -= divisor;\r
2275 quotient++;\r
2276 }\r
2277 }\r
2278 for(i = 31; i >= 0; i--)\r
2279 {\r
2280 quotient <<= 1;\r
2281 overflow = GET_MSB_32(remainder);\r
2282 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
2283 if(remainder >= divisor || overflow)\r
2284 {\r
2285 remainder -= divisor;\r
2286 quotient++;\r
2287 }\r
2288 }\r
2289\r
2290 if(BIT_B(word2)) /* signed */\r
2291 {\r
2292 if(quotient > 0x7fffffff)\r
2293 {\r
2294 FLAG_V = VFLAG_SET;\r
2295 return;\r
2296 }\r
2297 if(dividend_neg)\r
2298 {\r
2299 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
2300 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2301 }\r
2302 if(divisor_neg)\r
2303 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2304 }\r
2305\r
2306 REG_D[word2 & 7] = remainder;\r
2307 REG_D[(word2 >> 12) & 7] = quotient;\r
2308\r
2309 FLAG_N = NFLAG_32(quotient);\r
2310 FLAG_Z = quotient;\r
2311 FLAG_V = VFLAG_CLEAR;\r
2312 FLAG_C = CFLAG_CLEAR;\r
2313 return;\r
2314 }\r
2315\r
2316 /* long / long: long quotient, maybe long remainder */\r
2317 if(BIT_B(word2)) /* signed */\r
2318 {\r
2319 /* Special case in divide */\r
2320 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2321 {\r
2322 FLAG_N = NFLAG_SET;\r
2323 FLAG_Z = ZFLAG_CLEAR;\r
2324 FLAG_V = VFLAG_CLEAR;\r
2325 FLAG_C = CFLAG_CLEAR;\r
2326 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2327 REG_D[word2 & 7] = 0;\r
2328 return;\r
2329 }\r
2330 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
2331 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
2332 }\r
2333 else\r
2334 {\r
2335 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
2336 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
2337 }\r
2338\r
2339 FLAG_N = NFLAG_32(quotient);\r
2340 FLAG_Z = quotient;\r
2341 FLAG_V = VFLAG_CLEAR;\r
2342 FLAG_C = CFLAG_CLEAR;\r
2343 return;\r
2344 }\r
2345 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2346 return;\r
2347 }\r
2348 m68ki_exception_illegal();\r
2349\r
2350#endif\r
2351}\r
2352\r
2353\r
2354void m68k_op_divl_32_aw(void)\r
2355{\r
2356#if M68K_USE_64_BIT\r
2357\r
2358 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2359 {\r
2360 uint word2 = OPER_I_16();\r
2361 uint64 divisor = OPER_AW_32();\r
2362 uint64 dividend = 0;\r
2363 uint64 quotient = 0;\r
2364 uint64 remainder = 0;\r
2365\r
2366 if(divisor != 0)\r
2367 {\r
2368 if(BIT_A(word2)) /* 64 bit */\r
2369 {\r
2370 dividend = REG_D[word2 & 7];\r
2371 dividend <<= 32;\r
2372 dividend |= REG_D[(word2 >> 12) & 7];\r
2373\r
2374 if(BIT_B(word2)) /* signed */\r
2375 {\r
2376 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
2377 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
2378 if((sint64)quotient != (sint64)((sint32)quotient))\r
2379 {\r
2380 FLAG_V = VFLAG_SET;\r
2381 return;\r
2382 }\r
2383 }\r
2384 else /* unsigned */\r
2385 {\r
2386 quotient = dividend / divisor;\r
2387 if(quotient > 0xffffffff)\r
2388 {\r
2389 FLAG_V = VFLAG_SET;\r
2390 return;\r
2391 }\r
2392 remainder = dividend % divisor;\r
2393 }\r
2394 }\r
2395 else /* 32 bit */\r
2396 {\r
2397 dividend = REG_D[(word2 >> 12) & 7];\r
2398 if(BIT_B(word2)) /* signed */\r
2399 {\r
2400 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
2401 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
2402 }\r
2403 else /* unsigned */\r
2404 {\r
2405 quotient = dividend / divisor;\r
2406 remainder = dividend % divisor;\r
2407 }\r
2408 }\r
2409\r
2410 REG_D[word2 & 7] = remainder;\r
2411 REG_D[(word2 >> 12) & 7] = quotient;\r
2412\r
2413 FLAG_N = NFLAG_32(quotient);\r
2414 FLAG_Z = quotient;\r
2415 FLAG_V = VFLAG_CLEAR;\r
2416 FLAG_C = CFLAG_CLEAR;\r
2417 return;\r
2418 }\r
2419 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2420 return;\r
2421 }\r
2422 m68ki_exception_illegal();\r
2423\r
2424#else\r
2425\r
2426 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2427 {\r
2428 uint word2 = OPER_I_16();\r
2429 uint divisor = OPER_AW_32();\r
2430 uint dividend_hi = REG_D[word2 & 7];\r
2431 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
2432 uint quotient = 0;\r
2433 uint remainder = 0;\r
2434 uint dividend_neg = 0;\r
2435 uint divisor_neg = 0;\r
2436 sint i;\r
2437 uint overflow;\r
2438\r
2439 if(divisor != 0)\r
2440 {\r
2441 /* quad / long : long quotient, long remainder */\r
2442 if(BIT_A(word2))\r
2443 {\r
2444 if(BIT_B(word2)) /* signed */\r
2445 {\r
2446 /* special case in signed divide */\r
2447 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2448 {\r
2449 REG_D[word2 & 7] = 0;\r
2450 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2451\r
2452 FLAG_N = NFLAG_SET;\r
2453 FLAG_Z = ZFLAG_CLEAR;\r
2454 FLAG_V = VFLAG_CLEAR;\r
2455 FLAG_C = CFLAG_CLEAR;\r
2456 return;\r
2457 }\r
2458 if(GET_MSB_32(dividend_hi))\r
2459 {\r
2460 dividend_neg = 1;\r
2461 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
2462 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
2463 }\r
2464 if(GET_MSB_32(divisor))\r
2465 {\r
2466 divisor_neg = 1;\r
2467 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
2468\r
2469 }\r
2470 }\r
2471\r
2472 /* if the upper long is greater than the divisor, we're overflowing. */\r
2473 if(dividend_hi >= divisor)\r
2474 {\r
2475 FLAG_V = VFLAG_SET;\r
2476 return;\r
2477 }\r
2478\r
2479 for(i = 31; i >= 0; i--)\r
2480 {\r
2481 quotient <<= 1;\r
2482 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
2483 if(remainder >= divisor)\r
2484 {\r
2485 remainder -= divisor;\r
2486 quotient++;\r
2487 }\r
2488 }\r
2489 for(i = 31; i >= 0; i--)\r
2490 {\r
2491 quotient <<= 1;\r
2492 overflow = GET_MSB_32(remainder);\r
2493 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
2494 if(remainder >= divisor || overflow)\r
2495 {\r
2496 remainder -= divisor;\r
2497 quotient++;\r
2498 }\r
2499 }\r
2500\r
2501 if(BIT_B(word2)) /* signed */\r
2502 {\r
2503 if(quotient > 0x7fffffff)\r
2504 {\r
2505 FLAG_V = VFLAG_SET;\r
2506 return;\r
2507 }\r
2508 if(dividend_neg)\r
2509 {\r
2510 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
2511 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2512 }\r
2513 if(divisor_neg)\r
2514 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2515 }\r
2516\r
2517 REG_D[word2 & 7] = remainder;\r
2518 REG_D[(word2 >> 12) & 7] = quotient;\r
2519\r
2520 FLAG_N = NFLAG_32(quotient);\r
2521 FLAG_Z = quotient;\r
2522 FLAG_V = VFLAG_CLEAR;\r
2523 FLAG_C = CFLAG_CLEAR;\r
2524 return;\r
2525 }\r
2526\r
2527 /* long / long: long quotient, maybe long remainder */\r
2528 if(BIT_B(word2)) /* signed */\r
2529 {\r
2530 /* Special case in divide */\r
2531 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2532 {\r
2533 FLAG_N = NFLAG_SET;\r
2534 FLAG_Z = ZFLAG_CLEAR;\r
2535 FLAG_V = VFLAG_CLEAR;\r
2536 FLAG_C = CFLAG_CLEAR;\r
2537 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2538 REG_D[word2 & 7] = 0;\r
2539 return;\r
2540 }\r
2541 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
2542 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
2543 }\r
2544 else\r
2545 {\r
2546 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
2547 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
2548 }\r
2549\r
2550 FLAG_N = NFLAG_32(quotient);\r
2551 FLAG_Z = quotient;\r
2552 FLAG_V = VFLAG_CLEAR;\r
2553 FLAG_C = CFLAG_CLEAR;\r
2554 return;\r
2555 }\r
2556 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2557 return;\r
2558 }\r
2559 m68ki_exception_illegal();\r
2560\r
2561#endif\r
2562}\r
2563\r
2564\r
2565void m68k_op_divl_32_al(void)\r
2566{\r
2567#if M68K_USE_64_BIT\r
2568\r
2569 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2570 {\r
2571 uint word2 = OPER_I_16();\r
2572 uint64 divisor = OPER_AL_32();\r
2573 uint64 dividend = 0;\r
2574 uint64 quotient = 0;\r
2575 uint64 remainder = 0;\r
2576\r
2577 if(divisor != 0)\r
2578 {\r
2579 if(BIT_A(word2)) /* 64 bit */\r
2580 {\r
2581 dividend = REG_D[word2 & 7];\r
2582 dividend <<= 32;\r
2583 dividend |= REG_D[(word2 >> 12) & 7];\r
2584\r
2585 if(BIT_B(word2)) /* signed */\r
2586 {\r
2587 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
2588 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
2589 if((sint64)quotient != (sint64)((sint32)quotient))\r
2590 {\r
2591 FLAG_V = VFLAG_SET;\r
2592 return;\r
2593 }\r
2594 }\r
2595 else /* unsigned */\r
2596 {\r
2597 quotient = dividend / divisor;\r
2598 if(quotient > 0xffffffff)\r
2599 {\r
2600 FLAG_V = VFLAG_SET;\r
2601 return;\r
2602 }\r
2603 remainder = dividend % divisor;\r
2604 }\r
2605 }\r
2606 else /* 32 bit */\r
2607 {\r
2608 dividend = REG_D[(word2 >> 12) & 7];\r
2609 if(BIT_B(word2)) /* signed */\r
2610 {\r
2611 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
2612 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
2613 }\r
2614 else /* unsigned */\r
2615 {\r
2616 quotient = dividend / divisor;\r
2617 remainder = dividend % divisor;\r
2618 }\r
2619 }\r
2620\r
2621 REG_D[word2 & 7] = remainder;\r
2622 REG_D[(word2 >> 12) & 7] = quotient;\r
2623\r
2624 FLAG_N = NFLAG_32(quotient);\r
2625 FLAG_Z = quotient;\r
2626 FLAG_V = VFLAG_CLEAR;\r
2627 FLAG_C = CFLAG_CLEAR;\r
2628 return;\r
2629 }\r
2630 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2631 return;\r
2632 }\r
2633 m68ki_exception_illegal();\r
2634\r
2635#else\r
2636\r
2637 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2638 {\r
2639 uint word2 = OPER_I_16();\r
2640 uint divisor = OPER_AL_32();\r
2641 uint dividend_hi = REG_D[word2 & 7];\r
2642 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
2643 uint quotient = 0;\r
2644 uint remainder = 0;\r
2645 uint dividend_neg = 0;\r
2646 uint divisor_neg = 0;\r
2647 sint i;\r
2648 uint overflow;\r
2649\r
2650 if(divisor != 0)\r
2651 {\r
2652 /* quad / long : long quotient, long remainder */\r
2653 if(BIT_A(word2))\r
2654 {\r
2655 if(BIT_B(word2)) /* signed */\r
2656 {\r
2657 /* special case in signed divide */\r
2658 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2659 {\r
2660 REG_D[word2 & 7] = 0;\r
2661 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2662\r
2663 FLAG_N = NFLAG_SET;\r
2664 FLAG_Z = ZFLAG_CLEAR;\r
2665 FLAG_V = VFLAG_CLEAR;\r
2666 FLAG_C = CFLAG_CLEAR;\r
2667 return;\r
2668 }\r
2669 if(GET_MSB_32(dividend_hi))\r
2670 {\r
2671 dividend_neg = 1;\r
2672 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
2673 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
2674 }\r
2675 if(GET_MSB_32(divisor))\r
2676 {\r
2677 divisor_neg = 1;\r
2678 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
2679\r
2680 }\r
2681 }\r
2682\r
2683 /* if the upper long is greater than the divisor, we're overflowing. */\r
2684 if(dividend_hi >= divisor)\r
2685 {\r
2686 FLAG_V = VFLAG_SET;\r
2687 return;\r
2688 }\r
2689\r
2690 for(i = 31; i >= 0; i--)\r
2691 {\r
2692 quotient <<= 1;\r
2693 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
2694 if(remainder >= divisor)\r
2695 {\r
2696 remainder -= divisor;\r
2697 quotient++;\r
2698 }\r
2699 }\r
2700 for(i = 31; i >= 0; i--)\r
2701 {\r
2702 quotient <<= 1;\r
2703 overflow = GET_MSB_32(remainder);\r
2704 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
2705 if(remainder >= divisor || overflow)\r
2706 {\r
2707 remainder -= divisor;\r
2708 quotient++;\r
2709 }\r
2710 }\r
2711\r
2712 if(BIT_B(word2)) /* signed */\r
2713 {\r
2714 if(quotient > 0x7fffffff)\r
2715 {\r
2716 FLAG_V = VFLAG_SET;\r
2717 return;\r
2718 }\r
2719 if(dividend_neg)\r
2720 {\r
2721 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
2722 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2723 }\r
2724 if(divisor_neg)\r
2725 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2726 }\r
2727\r
2728 REG_D[word2 & 7] = remainder;\r
2729 REG_D[(word2 >> 12) & 7] = quotient;\r
2730\r
2731 FLAG_N = NFLAG_32(quotient);\r
2732 FLAG_Z = quotient;\r
2733 FLAG_V = VFLAG_CLEAR;\r
2734 FLAG_C = CFLAG_CLEAR;\r
2735 return;\r
2736 }\r
2737\r
2738 /* long / long: long quotient, maybe long remainder */\r
2739 if(BIT_B(word2)) /* signed */\r
2740 {\r
2741 /* Special case in divide */\r
2742 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2743 {\r
2744 FLAG_N = NFLAG_SET;\r
2745 FLAG_Z = ZFLAG_CLEAR;\r
2746 FLAG_V = VFLAG_CLEAR;\r
2747 FLAG_C = CFLAG_CLEAR;\r
2748 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2749 REG_D[word2 & 7] = 0;\r
2750 return;\r
2751 }\r
2752 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
2753 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
2754 }\r
2755 else\r
2756 {\r
2757 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
2758 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
2759 }\r
2760\r
2761 FLAG_N = NFLAG_32(quotient);\r
2762 FLAG_Z = quotient;\r
2763 FLAG_V = VFLAG_CLEAR;\r
2764 FLAG_C = CFLAG_CLEAR;\r
2765 return;\r
2766 }\r
2767 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2768 return;\r
2769 }\r
2770 m68ki_exception_illegal();\r
2771\r
2772#endif\r
2773}\r
2774\r
2775\r
2776void m68k_op_divl_32_pcdi(void)\r
2777{\r
2778#if M68K_USE_64_BIT\r
2779\r
2780 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2781 {\r
2782 uint word2 = OPER_I_16();\r
2783 uint64 divisor = OPER_PCDI_32();\r
2784 uint64 dividend = 0;\r
2785 uint64 quotient = 0;\r
2786 uint64 remainder = 0;\r
2787\r
2788 if(divisor != 0)\r
2789 {\r
2790 if(BIT_A(word2)) /* 64 bit */\r
2791 {\r
2792 dividend = REG_D[word2 & 7];\r
2793 dividend <<= 32;\r
2794 dividend |= REG_D[(word2 >> 12) & 7];\r
2795\r
2796 if(BIT_B(word2)) /* signed */\r
2797 {\r
2798 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
2799 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
2800 if((sint64)quotient != (sint64)((sint32)quotient))\r
2801 {\r
2802 FLAG_V = VFLAG_SET;\r
2803 return;\r
2804 }\r
2805 }\r
2806 else /* unsigned */\r
2807 {\r
2808 quotient = dividend / divisor;\r
2809 if(quotient > 0xffffffff)\r
2810 {\r
2811 FLAG_V = VFLAG_SET;\r
2812 return;\r
2813 }\r
2814 remainder = dividend % divisor;\r
2815 }\r
2816 }\r
2817 else /* 32 bit */\r
2818 {\r
2819 dividend = REG_D[(word2 >> 12) & 7];\r
2820 if(BIT_B(word2)) /* signed */\r
2821 {\r
2822 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
2823 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
2824 }\r
2825 else /* unsigned */\r
2826 {\r
2827 quotient = dividend / divisor;\r
2828 remainder = dividend % divisor;\r
2829 }\r
2830 }\r
2831\r
2832 REG_D[word2 & 7] = remainder;\r
2833 REG_D[(word2 >> 12) & 7] = quotient;\r
2834\r
2835 FLAG_N = NFLAG_32(quotient);\r
2836 FLAG_Z = quotient;\r
2837 FLAG_V = VFLAG_CLEAR;\r
2838 FLAG_C = CFLAG_CLEAR;\r
2839 return;\r
2840 }\r
2841 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2842 return;\r
2843 }\r
2844 m68ki_exception_illegal();\r
2845\r
2846#else\r
2847\r
2848 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2849 {\r
2850 uint word2 = OPER_I_16();\r
2851 uint divisor = OPER_PCDI_32();\r
2852 uint dividend_hi = REG_D[word2 & 7];\r
2853 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
2854 uint quotient = 0;\r
2855 uint remainder = 0;\r
2856 uint dividend_neg = 0;\r
2857 uint divisor_neg = 0;\r
2858 sint i;\r
2859 uint overflow;\r
2860\r
2861 if(divisor != 0)\r
2862 {\r
2863 /* quad / long : long quotient, long remainder */\r
2864 if(BIT_A(word2))\r
2865 {\r
2866 if(BIT_B(word2)) /* signed */\r
2867 {\r
2868 /* special case in signed divide */\r
2869 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2870 {\r
2871 REG_D[word2 & 7] = 0;\r
2872 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2873\r
2874 FLAG_N = NFLAG_SET;\r
2875 FLAG_Z = ZFLAG_CLEAR;\r
2876 FLAG_V = VFLAG_CLEAR;\r
2877 FLAG_C = CFLAG_CLEAR;\r
2878 return;\r
2879 }\r
2880 if(GET_MSB_32(dividend_hi))\r
2881 {\r
2882 dividend_neg = 1;\r
2883 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
2884 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
2885 }\r
2886 if(GET_MSB_32(divisor))\r
2887 {\r
2888 divisor_neg = 1;\r
2889 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
2890\r
2891 }\r
2892 }\r
2893\r
2894 /* if the upper long is greater than the divisor, we're overflowing. */\r
2895 if(dividend_hi >= divisor)\r
2896 {\r
2897 FLAG_V = VFLAG_SET;\r
2898 return;\r
2899 }\r
2900\r
2901 for(i = 31; i >= 0; i--)\r
2902 {\r
2903 quotient <<= 1;\r
2904 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
2905 if(remainder >= divisor)\r
2906 {\r
2907 remainder -= divisor;\r
2908 quotient++;\r
2909 }\r
2910 }\r
2911 for(i = 31; i >= 0; i--)\r
2912 {\r
2913 quotient <<= 1;\r
2914 overflow = GET_MSB_32(remainder);\r
2915 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
2916 if(remainder >= divisor || overflow)\r
2917 {\r
2918 remainder -= divisor;\r
2919 quotient++;\r
2920 }\r
2921 }\r
2922\r
2923 if(BIT_B(word2)) /* signed */\r
2924 {\r
2925 if(quotient > 0x7fffffff)\r
2926 {\r
2927 FLAG_V = VFLAG_SET;\r
2928 return;\r
2929 }\r
2930 if(dividend_neg)\r
2931 {\r
2932 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
2933 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2934 }\r
2935 if(divisor_neg)\r
2936 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
2937 }\r
2938\r
2939 REG_D[word2 & 7] = remainder;\r
2940 REG_D[(word2 >> 12) & 7] = quotient;\r
2941\r
2942 FLAG_N = NFLAG_32(quotient);\r
2943 FLAG_Z = quotient;\r
2944 FLAG_V = VFLAG_CLEAR;\r
2945 FLAG_C = CFLAG_CLEAR;\r
2946 return;\r
2947 }\r
2948\r
2949 /* long / long: long quotient, maybe long remainder */\r
2950 if(BIT_B(word2)) /* signed */\r
2951 {\r
2952 /* Special case in divide */\r
2953 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
2954 {\r
2955 FLAG_N = NFLAG_SET;\r
2956 FLAG_Z = ZFLAG_CLEAR;\r
2957 FLAG_V = VFLAG_CLEAR;\r
2958 FLAG_C = CFLAG_CLEAR;\r
2959 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
2960 REG_D[word2 & 7] = 0;\r
2961 return;\r
2962 }\r
2963 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
2964 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
2965 }\r
2966 else\r
2967 {\r
2968 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
2969 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
2970 }\r
2971\r
2972 FLAG_N = NFLAG_32(quotient);\r
2973 FLAG_Z = quotient;\r
2974 FLAG_V = VFLAG_CLEAR;\r
2975 FLAG_C = CFLAG_CLEAR;\r
2976 return;\r
2977 }\r
2978 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
2979 return;\r
2980 }\r
2981 m68ki_exception_illegal();\r
2982\r
2983#endif\r
2984}\r
2985\r
2986\r
2987void m68k_op_divl_32_pcix(void)\r
2988{\r
2989#if M68K_USE_64_BIT\r
2990\r
2991 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
2992 {\r
2993 uint word2 = OPER_I_16();\r
2994 uint64 divisor = OPER_PCIX_32();\r
2995 uint64 dividend = 0;\r
2996 uint64 quotient = 0;\r
2997 uint64 remainder = 0;\r
2998\r
2999 if(divisor != 0)\r
3000 {\r
3001 if(BIT_A(word2)) /* 64 bit */\r
3002 {\r
3003 dividend = REG_D[word2 & 7];\r
3004 dividend <<= 32;\r
3005 dividend |= REG_D[(word2 >> 12) & 7];\r
3006\r
3007 if(BIT_B(word2)) /* signed */\r
3008 {\r
3009 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
3010 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
3011 if((sint64)quotient != (sint64)((sint32)quotient))\r
3012 {\r
3013 FLAG_V = VFLAG_SET;\r
3014 return;\r
3015 }\r
3016 }\r
3017 else /* unsigned */\r
3018 {\r
3019 quotient = dividend / divisor;\r
3020 if(quotient > 0xffffffff)\r
3021 {\r
3022 FLAG_V = VFLAG_SET;\r
3023 return;\r
3024 }\r
3025 remainder = dividend % divisor;\r
3026 }\r
3027 }\r
3028 else /* 32 bit */\r
3029 {\r
3030 dividend = REG_D[(word2 >> 12) & 7];\r
3031 if(BIT_B(word2)) /* signed */\r
3032 {\r
3033 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
3034 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
3035 }\r
3036 else /* unsigned */\r
3037 {\r
3038 quotient = dividend / divisor;\r
3039 remainder = dividend % divisor;\r
3040 }\r
3041 }\r
3042\r
3043 REG_D[word2 & 7] = remainder;\r
3044 REG_D[(word2 >> 12) & 7] = quotient;\r
3045\r
3046 FLAG_N = NFLAG_32(quotient);\r
3047 FLAG_Z = quotient;\r
3048 FLAG_V = VFLAG_CLEAR;\r
3049 FLAG_C = CFLAG_CLEAR;\r
3050 return;\r
3051 }\r
3052 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
3053 return;\r
3054 }\r
3055 m68ki_exception_illegal();\r
3056\r
3057#else\r
3058\r
3059 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
3060 {\r
3061 uint word2 = OPER_I_16();\r
3062 uint divisor = OPER_PCIX_32();\r
3063 uint dividend_hi = REG_D[word2 & 7];\r
3064 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
3065 uint quotient = 0;\r
3066 uint remainder = 0;\r
3067 uint dividend_neg = 0;\r
3068 uint divisor_neg = 0;\r
3069 sint i;\r
3070 uint overflow;\r
3071\r
3072 if(divisor != 0)\r
3073 {\r
3074 /* quad / long : long quotient, long remainder */\r
3075 if(BIT_A(word2))\r
3076 {\r
3077 if(BIT_B(word2)) /* signed */\r
3078 {\r
3079 /* special case in signed divide */\r
3080 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
3081 {\r
3082 REG_D[word2 & 7] = 0;\r
3083 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
3084\r
3085 FLAG_N = NFLAG_SET;\r
3086 FLAG_Z = ZFLAG_CLEAR;\r
3087 FLAG_V = VFLAG_CLEAR;\r
3088 FLAG_C = CFLAG_CLEAR;\r
3089 return;\r
3090 }\r
3091 if(GET_MSB_32(dividend_hi))\r
3092 {\r
3093 dividend_neg = 1;\r
3094 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
3095 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
3096 }\r
3097 if(GET_MSB_32(divisor))\r
3098 {\r
3099 divisor_neg = 1;\r
3100 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
3101\r
3102 }\r
3103 }\r
3104\r
3105 /* if the upper long is greater than the divisor, we're overflowing. */\r
3106 if(dividend_hi >= divisor)\r
3107 {\r
3108 FLAG_V = VFLAG_SET;\r
3109 return;\r
3110 }\r
3111\r
3112 for(i = 31; i >= 0; i--)\r
3113 {\r
3114 quotient <<= 1;\r
3115 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
3116 if(remainder >= divisor)\r
3117 {\r
3118 remainder -= divisor;\r
3119 quotient++;\r
3120 }\r
3121 }\r
3122 for(i = 31; i >= 0; i--)\r
3123 {\r
3124 quotient <<= 1;\r
3125 overflow = GET_MSB_32(remainder);\r
3126 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
3127 if(remainder >= divisor || overflow)\r
3128 {\r
3129 remainder -= divisor;\r
3130 quotient++;\r
3131 }\r
3132 }\r
3133\r
3134 if(BIT_B(word2)) /* signed */\r
3135 {\r
3136 if(quotient > 0x7fffffff)\r
3137 {\r
3138 FLAG_V = VFLAG_SET;\r
3139 return;\r
3140 }\r
3141 if(dividend_neg)\r
3142 {\r
3143 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
3144 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
3145 }\r
3146 if(divisor_neg)\r
3147 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
3148 }\r
3149\r
3150 REG_D[word2 & 7] = remainder;\r
3151 REG_D[(word2 >> 12) & 7] = quotient;\r
3152\r
3153 FLAG_N = NFLAG_32(quotient);\r
3154 FLAG_Z = quotient;\r
3155 FLAG_V = VFLAG_CLEAR;\r
3156 FLAG_C = CFLAG_CLEAR;\r
3157 return;\r
3158 }\r
3159\r
3160 /* long / long: long quotient, maybe long remainder */\r
3161 if(BIT_B(word2)) /* signed */\r
3162 {\r
3163 /* Special case in divide */\r
3164 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
3165 {\r
3166 FLAG_N = NFLAG_SET;\r
3167 FLAG_Z = ZFLAG_CLEAR;\r
3168 FLAG_V = VFLAG_CLEAR;\r
3169 FLAG_C = CFLAG_CLEAR;\r
3170 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
3171 REG_D[word2 & 7] = 0;\r
3172 return;\r
3173 }\r
3174 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
3175 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
3176 }\r
3177 else\r
3178 {\r
3179 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
3180 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
3181 }\r
3182\r
3183 FLAG_N = NFLAG_32(quotient);\r
3184 FLAG_Z = quotient;\r
3185 FLAG_V = VFLAG_CLEAR;\r
3186 FLAG_C = CFLAG_CLEAR;\r
3187 return;\r
3188 }\r
3189 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
3190 return;\r
3191 }\r
3192 m68ki_exception_illegal();\r
3193\r
3194#endif\r
3195}\r
3196\r
3197\r
3198void m68k_op_divl_32_i(void)\r
3199{\r
3200#if M68K_USE_64_BIT\r
3201\r
3202 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
3203 {\r
3204 uint word2 = OPER_I_16();\r
3205 uint64 divisor = OPER_I_32();\r
3206 uint64 dividend = 0;\r
3207 uint64 quotient = 0;\r
3208 uint64 remainder = 0;\r
3209\r
3210 if(divisor != 0)\r
3211 {\r
3212 if(BIT_A(word2)) /* 64 bit */\r
3213 {\r
3214 dividend = REG_D[word2 & 7];\r
3215 dividend <<= 32;\r
3216 dividend |= REG_D[(word2 >> 12) & 7];\r
3217\r
3218 if(BIT_B(word2)) /* signed */\r
3219 {\r
3220 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));\r
3221 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));\r
3222 if((sint64)quotient != (sint64)((sint32)quotient))\r
3223 {\r
3224 FLAG_V = VFLAG_SET;\r
3225 return;\r
3226 }\r
3227 }\r
3228 else /* unsigned */\r
3229 {\r
3230 quotient = dividend / divisor;\r
3231 if(quotient > 0xffffffff)\r
3232 {\r
3233 FLAG_V = VFLAG_SET;\r
3234 return;\r
3235 }\r
3236 remainder = dividend % divisor;\r
3237 }\r
3238 }\r
3239 else /* 32 bit */\r
3240 {\r
3241 dividend = REG_D[(word2 >> 12) & 7];\r
3242 if(BIT_B(word2)) /* signed */\r
3243 {\r
3244 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));\r
3245 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));\r
3246 }\r
3247 else /* unsigned */\r
3248 {\r
3249 quotient = dividend / divisor;\r
3250 remainder = dividend % divisor;\r
3251 }\r
3252 }\r
3253\r
3254 REG_D[word2 & 7] = remainder;\r
3255 REG_D[(word2 >> 12) & 7] = quotient;\r
3256\r
3257 FLAG_N = NFLAG_32(quotient);\r
3258 FLAG_Z = quotient;\r
3259 FLAG_V = VFLAG_CLEAR;\r
3260 FLAG_C = CFLAG_CLEAR;\r
3261 return;\r
3262 }\r
3263 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
3264 return;\r
3265 }\r
3266 m68ki_exception_illegal();\r
3267\r
3268#else\r
3269\r
3270 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
3271 {\r
3272 uint word2 = OPER_I_16();\r
3273 uint divisor = OPER_I_32();\r
3274 uint dividend_hi = REG_D[word2 & 7];\r
3275 uint dividend_lo = REG_D[(word2 >> 12) & 7];\r
3276 uint quotient = 0;\r
3277 uint remainder = 0;\r
3278 uint dividend_neg = 0;\r
3279 uint divisor_neg = 0;\r
3280 sint i;\r
3281 uint overflow;\r
3282\r
3283 if(divisor != 0)\r
3284 {\r
3285 /* quad / long : long quotient, long remainder */\r
3286 if(BIT_A(word2))\r
3287 {\r
3288 if(BIT_B(word2)) /* signed */\r
3289 {\r
3290 /* special case in signed divide */\r
3291 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
3292 {\r
3293 REG_D[word2 & 7] = 0;\r
3294 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
3295\r
3296 FLAG_N = NFLAG_SET;\r
3297 FLAG_Z = ZFLAG_CLEAR;\r
3298 FLAG_V = VFLAG_CLEAR;\r
3299 FLAG_C = CFLAG_CLEAR;\r
3300 return;\r
3301 }\r
3302 if(GET_MSB_32(dividend_hi))\r
3303 {\r
3304 dividend_neg = 1;\r
3305 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));\r
3306 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);\r
3307 }\r
3308 if(GET_MSB_32(divisor))\r
3309 {\r
3310 divisor_neg = 1;\r
3311 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);\r
3312\r
3313 }\r
3314 }\r
3315\r
3316 /* if the upper long is greater than the divisor, we're overflowing. */\r
3317 if(dividend_hi >= divisor)\r
3318 {\r
3319 FLAG_V = VFLAG_SET;\r
3320 return;\r
3321 }\r
3322\r
3323 for(i = 31; i >= 0; i--)\r
3324 {\r
3325 quotient <<= 1;\r
3326 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);\r
3327 if(remainder >= divisor)\r
3328 {\r
3329 remainder -= divisor;\r
3330 quotient++;\r
3331 }\r
3332 }\r
3333 for(i = 31; i >= 0; i--)\r
3334 {\r
3335 quotient <<= 1;\r
3336 overflow = GET_MSB_32(remainder);\r
3337 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);\r
3338 if(remainder >= divisor || overflow)\r
3339 {\r
3340 remainder -= divisor;\r
3341 quotient++;\r
3342 }\r
3343 }\r
3344\r
3345 if(BIT_B(word2)) /* signed */\r
3346 {\r
3347 if(quotient > 0x7fffffff)\r
3348 {\r
3349 FLAG_V = VFLAG_SET;\r
3350 return;\r
3351 }\r
3352 if(dividend_neg)\r
3353 {\r
3354 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);\r
3355 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
3356 }\r
3357 if(divisor_neg)\r
3358 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);\r
3359 }\r
3360\r
3361 REG_D[word2 & 7] = remainder;\r
3362 REG_D[(word2 >> 12) & 7] = quotient;\r
3363\r
3364 FLAG_N = NFLAG_32(quotient);\r
3365 FLAG_Z = quotient;\r
3366 FLAG_V = VFLAG_CLEAR;\r
3367 FLAG_C = CFLAG_CLEAR;\r
3368 return;\r
3369 }\r
3370\r
3371 /* long / long: long quotient, maybe long remainder */\r
3372 if(BIT_B(word2)) /* signed */\r
3373 {\r
3374 /* Special case in divide */\r
3375 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)\r
3376 {\r
3377 FLAG_N = NFLAG_SET;\r
3378 FLAG_Z = ZFLAG_CLEAR;\r
3379 FLAG_V = VFLAG_CLEAR;\r
3380 FLAG_C = CFLAG_CLEAR;\r
3381 REG_D[(word2 >> 12) & 7] = 0x80000000;\r
3382 REG_D[word2 & 7] = 0;\r
3383 return;\r
3384 }\r
3385 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);\r
3386 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);\r
3387 }\r
3388 else\r
3389 {\r
3390 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);\r
3391 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);\r
3392 }\r
3393\r
3394 FLAG_N = NFLAG_32(quotient);\r
3395 FLAG_Z = quotient;\r
3396 FLAG_V = VFLAG_CLEAR;\r
3397 FLAG_C = CFLAG_CLEAR;\r
3398 return;\r
3399 }\r
3400 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);\r
3401 return;\r
3402 }\r
3403 m68ki_exception_illegal();\r
3404\r
3405#endif\r
3406}\r
3407\r
3408\r
3409void m68k_op_eor_8_d(void)\r
3410{\r
3411 uint res = MASK_OUT_ABOVE_8(DY ^= MASK_OUT_ABOVE_8(DX));\r
3412\r
3413 FLAG_N = NFLAG_8(res);\r
3414 FLAG_Z = res;\r
3415 FLAG_C = CFLAG_CLEAR;\r
3416 FLAG_V = VFLAG_CLEAR;\r
3417}\r
3418\r
3419\r
3420void m68k_op_eor_8_ai(void)\r
3421{\r
3422 uint ea = EA_AY_AI_8();\r
3423 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3424\r
3425 m68ki_write_8(ea, res);\r
3426\r
3427 FLAG_N = NFLAG_8(res);\r
3428 FLAG_Z = res;\r
3429 FLAG_C = CFLAG_CLEAR;\r
3430 FLAG_V = VFLAG_CLEAR;\r
3431}\r
3432\r
3433\r
3434void m68k_op_eor_8_pi(void)\r
3435{\r
3436 uint ea = EA_AY_PI_8();\r
3437 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3438\r
3439 m68ki_write_8(ea, res);\r
3440\r
3441 FLAG_N = NFLAG_8(res);\r
3442 FLAG_Z = res;\r
3443 FLAG_C = CFLAG_CLEAR;\r
3444 FLAG_V = VFLAG_CLEAR;\r
3445}\r
3446\r
3447\r
3448void m68k_op_eor_8_pi7(void)\r
3449{\r
3450 uint ea = EA_A7_PI_8();\r
3451 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3452\r
3453 m68ki_write_8(ea, res);\r
3454\r
3455 FLAG_N = NFLAG_8(res);\r
3456 FLAG_Z = res;\r
3457 FLAG_C = CFLAG_CLEAR;\r
3458 FLAG_V = VFLAG_CLEAR;\r
3459}\r
3460\r
3461\r
3462void m68k_op_eor_8_pd(void)\r
3463{\r
3464 uint ea = EA_AY_PD_8();\r
3465 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3466\r
3467 m68ki_write_8(ea, res);\r
3468\r
3469 FLAG_N = NFLAG_8(res);\r
3470 FLAG_Z = res;\r
3471 FLAG_C = CFLAG_CLEAR;\r
3472 FLAG_V = VFLAG_CLEAR;\r
3473}\r
3474\r
3475\r
3476void m68k_op_eor_8_pd7(void)\r
3477{\r
3478 uint ea = EA_A7_PD_8();\r
3479 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3480\r
3481 m68ki_write_8(ea, res);\r
3482\r
3483 FLAG_N = NFLAG_8(res);\r
3484 FLAG_Z = res;\r
3485 FLAG_C = CFLAG_CLEAR;\r
3486 FLAG_V = VFLAG_CLEAR;\r
3487}\r
3488\r
3489\r
3490void m68k_op_eor_8_di(void)\r
3491{\r
3492 uint ea = EA_AY_DI_8();\r
3493 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3494\r
3495 m68ki_write_8(ea, res);\r
3496\r
3497 FLAG_N = NFLAG_8(res);\r
3498 FLAG_Z = res;\r
3499 FLAG_C = CFLAG_CLEAR;\r
3500 FLAG_V = VFLAG_CLEAR;\r
3501}\r
3502\r
3503\r
3504void m68k_op_eor_8_ix(void)\r
3505{\r
3506 uint ea = EA_AY_IX_8();\r
3507 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3508\r
3509 m68ki_write_8(ea, res);\r
3510\r
3511 FLAG_N = NFLAG_8(res);\r
3512 FLAG_Z = res;\r
3513 FLAG_C = CFLAG_CLEAR;\r
3514 FLAG_V = VFLAG_CLEAR;\r
3515}\r
3516\r
3517\r
3518void m68k_op_eor_8_aw(void)\r
3519{\r
3520 uint ea = EA_AW_8();\r
3521 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3522\r
3523 m68ki_write_8(ea, res);\r
3524\r
3525 FLAG_N = NFLAG_8(res);\r
3526 FLAG_Z = res;\r
3527 FLAG_C = CFLAG_CLEAR;\r
3528 FLAG_V = VFLAG_CLEAR;\r
3529}\r
3530\r
3531\r
3532void m68k_op_eor_8_al(void)\r
3533{\r
3534 uint ea = EA_AL_8();\r
3535 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));\r
3536\r
3537 m68ki_write_8(ea, res);\r
3538\r
3539 FLAG_N = NFLAG_8(res);\r
3540 FLAG_Z = res;\r
3541 FLAG_C = CFLAG_CLEAR;\r
3542 FLAG_V = VFLAG_CLEAR;\r
3543}\r
3544\r
3545\r
3546void m68k_op_eor_16_d(void)\r
3547{\r
3548 uint res = MASK_OUT_ABOVE_16(DY ^= MASK_OUT_ABOVE_16(DX));\r
3549\r
3550 FLAG_N = NFLAG_16(res);\r
3551 FLAG_Z = res;\r
3552 FLAG_C = CFLAG_CLEAR;\r
3553 FLAG_V = VFLAG_CLEAR;\r
3554}\r
3555\r
3556\r
3557void m68k_op_eor_16_ai(void)\r
3558{\r
3559 uint ea = EA_AY_AI_16();\r
3560 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));\r
3561\r
3562 m68ki_write_16(ea, res);\r
3563\r
3564 FLAG_N = NFLAG_16(res);\r
3565 FLAG_Z = res;\r
3566 FLAG_C = CFLAG_CLEAR;\r
3567 FLAG_V = VFLAG_CLEAR;\r
3568}\r
3569\r
3570\r
3571void m68k_op_eor_16_pi(void)\r
3572{\r
3573 uint ea = EA_AY_PI_16();\r
3574 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));\r
3575\r
3576 m68ki_write_16(ea, res);\r
3577\r
3578 FLAG_N = NFLAG_16(res);\r
3579 FLAG_Z = res;\r
3580 FLAG_C = CFLAG_CLEAR;\r
3581 FLAG_V = VFLAG_CLEAR;\r
3582}\r
3583\r
3584\r
3585void m68k_op_eor_16_pd(void)\r
3586{\r
3587 uint ea = EA_AY_PD_16();\r
3588 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));\r
3589\r
3590 m68ki_write_16(ea, res);\r
3591\r
3592 FLAG_N = NFLAG_16(res);\r
3593 FLAG_Z = res;\r
3594 FLAG_C = CFLAG_CLEAR;\r
3595 FLAG_V = VFLAG_CLEAR;\r
3596}\r
3597\r
3598\r
3599void m68k_op_eor_16_di(void)\r
3600{\r
3601 uint ea = EA_AY_DI_16();\r
3602 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));\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_C = CFLAG_CLEAR;\r
3609 FLAG_V = VFLAG_CLEAR;\r
3610}\r
3611\r
3612\r
3613void m68k_op_eor_16_ix(void)\r
3614{\r
3615 uint ea = EA_AY_IX_16();\r
3616 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));\r
3617\r
3618 m68ki_write_16(ea, res);\r
3619\r
3620 FLAG_N = NFLAG_16(res);\r
3621 FLAG_Z = res;\r
3622 FLAG_C = CFLAG_CLEAR;\r
3623 FLAG_V = VFLAG_CLEAR;\r
3624}\r
3625\r
3626\r
3627void m68k_op_eor_16_aw(void)\r
3628{\r
3629 uint ea = EA_AW_16();\r
3630 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));\r
3631\r
3632 m68ki_write_16(ea, res);\r
3633\r
3634 FLAG_N = NFLAG_16(res);\r
3635 FLAG_Z = res;\r
3636 FLAG_C = CFLAG_CLEAR;\r
3637 FLAG_V = VFLAG_CLEAR;\r
3638}\r
3639\r
3640\r
3641void m68k_op_eor_16_al(void)\r
3642{\r
3643 uint ea = EA_AL_16();\r
3644 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));\r
3645\r
3646 m68ki_write_16(ea, res);\r
3647\r
3648 FLAG_N = NFLAG_16(res);\r
3649 FLAG_Z = res;\r
3650 FLAG_C = CFLAG_CLEAR;\r
3651 FLAG_V = VFLAG_CLEAR;\r
3652}\r
3653\r
3654\r
3655void m68k_op_eor_32_d(void)\r
3656{\r
3657 uint res = DY ^= DX;\r
3658\r
3659 FLAG_N = NFLAG_32(res);\r
3660 FLAG_Z = res;\r
3661 FLAG_C = CFLAG_CLEAR;\r
3662 FLAG_V = VFLAG_CLEAR;\r
3663}\r
3664\r
3665\r
3666void m68k_op_eor_32_ai(void)\r
3667{\r
3668 uint ea = EA_AY_AI_32();\r
3669 uint res = DX ^ m68ki_read_32(ea);\r
3670\r
3671 m68ki_write_32(ea, res);\r
3672\r
3673 FLAG_N = NFLAG_32(res);\r
3674 FLAG_Z = res;\r
3675 FLAG_C = CFLAG_CLEAR;\r
3676 FLAG_V = VFLAG_CLEAR;\r
3677}\r
3678\r
3679\r
3680void m68k_op_eor_32_pi(void)\r
3681{\r
3682 uint ea = EA_AY_PI_32();\r
3683 uint res = DX ^ m68ki_read_32(ea);\r
3684\r
3685 m68ki_write_32(ea, res);\r
3686\r
3687 FLAG_N = NFLAG_32(res);\r
3688 FLAG_Z = res;\r
3689 FLAG_C = CFLAG_CLEAR;\r
3690 FLAG_V = VFLAG_CLEAR;\r
3691}\r
3692\r
3693\r
3694void m68k_op_eor_32_pd(void)\r
3695{\r
3696 uint ea = EA_AY_PD_32();\r
3697 uint res = DX ^ m68ki_read_32(ea);\r
3698\r
3699 m68ki_write_32(ea, res);\r
3700\r
3701 FLAG_N = NFLAG_32(res);\r
3702 FLAG_Z = res;\r
3703 FLAG_C = CFLAG_CLEAR;\r
3704 FLAG_V = VFLAG_CLEAR;\r
3705}\r
3706\r
3707\r
3708void m68k_op_eor_32_di(void)\r
3709{\r
3710 uint ea = EA_AY_DI_32();\r
3711 uint res = DX ^ m68ki_read_32(ea);\r
3712\r
3713 m68ki_write_32(ea, res);\r
3714\r
3715 FLAG_N = NFLAG_32(res);\r
3716 FLAG_Z = res;\r
3717 FLAG_C = CFLAG_CLEAR;\r
3718 FLAG_V = VFLAG_CLEAR;\r
3719}\r
3720\r
3721\r
3722void m68k_op_eor_32_ix(void)\r
3723{\r
3724 uint ea = EA_AY_IX_32();\r
3725 uint res = DX ^ m68ki_read_32(ea);\r
3726\r
3727 m68ki_write_32(ea, res);\r
3728\r
3729 FLAG_N = NFLAG_32(res);\r
3730 FLAG_Z = res;\r
3731 FLAG_C = CFLAG_CLEAR;\r
3732 FLAG_V = VFLAG_CLEAR;\r
3733}\r
3734\r
3735\r
3736void m68k_op_eor_32_aw(void)\r
3737{\r
3738 uint ea = EA_AW_32();\r
3739 uint res = DX ^ m68ki_read_32(ea);\r
3740\r
3741 m68ki_write_32(ea, res);\r
3742\r
3743 FLAG_N = NFLAG_32(res);\r
3744 FLAG_Z = res;\r
3745 FLAG_C = CFLAG_CLEAR;\r
3746 FLAG_V = VFLAG_CLEAR;\r
3747}\r
3748\r
3749\r
3750void m68k_op_eor_32_al(void)\r
3751{\r
3752 uint ea = EA_AL_32();\r
3753 uint res = DX ^ m68ki_read_32(ea);\r
3754\r
3755 m68ki_write_32(ea, res);\r
3756\r
3757 FLAG_N = NFLAG_32(res);\r
3758 FLAG_Z = res;\r
3759 FLAG_C = CFLAG_CLEAR;\r
3760 FLAG_V = VFLAG_CLEAR;\r
3761}\r
3762\r
3763\r
3764void m68k_op_eori_8_d(void)\r
3765{\r
3766 uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8());\r
3767\r
3768 FLAG_N = NFLAG_8(res);\r
3769 FLAG_Z = res;\r
3770 FLAG_C = CFLAG_CLEAR;\r
3771 FLAG_V = VFLAG_CLEAR;\r
3772}\r
3773\r
3774\r
3775void m68k_op_eori_8_ai(void)\r
3776{\r
3777 uint src = OPER_I_8();\r
3778 uint ea = EA_AY_AI_8();\r
3779 uint res = src ^ m68ki_read_8(ea);\r
3780\r
3781 m68ki_write_8(ea, res);\r
3782\r
3783 FLAG_N = NFLAG_8(res);\r
3784 FLAG_Z = res;\r
3785 FLAG_C = CFLAG_CLEAR;\r
3786 FLAG_V = VFLAG_CLEAR;\r
3787}\r
3788\r
3789\r
3790void m68k_op_eori_8_pi(void)\r
3791{\r
3792 uint src = OPER_I_8();\r
3793 uint ea = EA_AY_PI_8();\r
3794 uint res = src ^ m68ki_read_8(ea);\r
3795\r
3796 m68ki_write_8(ea, res);\r
3797\r
3798 FLAG_N = NFLAG_8(res);\r
3799 FLAG_Z = res;\r
3800 FLAG_C = CFLAG_CLEAR;\r
3801 FLAG_V = VFLAG_CLEAR;\r
3802}\r
3803\r
3804\r
3805void m68k_op_eori_8_pi7(void)\r
3806{\r
3807 uint src = OPER_I_8();\r
3808 uint ea = EA_A7_PI_8();\r
3809 uint res = src ^ m68ki_read_8(ea);\r
3810\r
3811 m68ki_write_8(ea, res);\r
3812\r
3813 FLAG_N = NFLAG_8(res);\r
3814 FLAG_Z = res;\r
3815 FLAG_C = CFLAG_CLEAR;\r
3816 FLAG_V = VFLAG_CLEAR;\r
3817}\r
3818\r
3819\r
3820void m68k_op_eori_8_pd(void)\r
3821{\r
3822 uint src = OPER_I_8();\r
3823 uint ea = EA_AY_PD_8();\r
3824 uint res = src ^ m68ki_read_8(ea);\r
3825\r
3826 m68ki_write_8(ea, res);\r
3827\r
3828 FLAG_N = NFLAG_8(res);\r
3829 FLAG_Z = res;\r
3830 FLAG_C = CFLAG_CLEAR;\r
3831 FLAG_V = VFLAG_CLEAR;\r
3832}\r
3833\r
3834\r
3835void m68k_op_eori_8_pd7(void)\r
3836{\r
3837 uint src = OPER_I_8();\r
3838 uint ea = EA_A7_PD_8();\r
3839 uint res = src ^ m68ki_read_8(ea);\r
3840\r
3841 m68ki_write_8(ea, res);\r
3842\r
3843 FLAG_N = NFLAG_8(res);\r
3844 FLAG_Z = res;\r
3845 FLAG_C = CFLAG_CLEAR;\r
3846 FLAG_V = VFLAG_CLEAR;\r
3847}\r
3848\r
3849\r
3850void m68k_op_eori_8_di(void)\r
3851{\r
3852 uint src = OPER_I_8();\r
3853 uint ea = EA_AY_DI_8();\r
3854 uint res = src ^ m68ki_read_8(ea);\r
3855\r
3856 m68ki_write_8(ea, res);\r
3857\r
3858 FLAG_N = NFLAG_8(res);\r
3859 FLAG_Z = res;\r
3860 FLAG_C = CFLAG_CLEAR;\r
3861 FLAG_V = VFLAG_CLEAR;\r
3862}\r
3863\r
3864\r
3865void m68k_op_eori_8_ix(void)\r
3866{\r
3867 uint src = OPER_I_8();\r
3868 uint ea = EA_AY_IX_8();\r
3869 uint res = src ^ m68ki_read_8(ea);\r
3870\r
3871 m68ki_write_8(ea, res);\r
3872\r
3873 FLAG_N = NFLAG_8(res);\r
3874 FLAG_Z = res;\r
3875 FLAG_C = CFLAG_CLEAR;\r
3876 FLAG_V = VFLAG_CLEAR;\r
3877}\r
3878\r
3879\r
3880void m68k_op_eori_8_aw(void)\r
3881{\r
3882 uint src = OPER_I_8();\r
3883 uint ea = EA_AW_8();\r
3884 uint res = src ^ m68ki_read_8(ea);\r
3885\r
3886 m68ki_write_8(ea, res);\r
3887\r
3888 FLAG_N = NFLAG_8(res);\r
3889 FLAG_Z = res;\r
3890 FLAG_C = CFLAG_CLEAR;\r
3891 FLAG_V = VFLAG_CLEAR;\r
3892}\r
3893\r
3894\r
3895void m68k_op_eori_8_al(void)\r
3896{\r
3897 uint src = OPER_I_8();\r
3898 uint ea = EA_AL_8();\r
3899 uint res = src ^ m68ki_read_8(ea);\r
3900\r
3901 m68ki_write_8(ea, res);\r
3902\r
3903 FLAG_N = NFLAG_8(res);\r
3904 FLAG_Z = res;\r
3905 FLAG_C = CFLAG_CLEAR;\r
3906 FLAG_V = VFLAG_CLEAR;\r
3907}\r
3908\r
3909\r
3910void m68k_op_eori_16_d(void)\r
3911{\r
3912 uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16());\r
3913\r
3914 FLAG_N = NFLAG_16(res);\r
3915 FLAG_Z = res;\r
3916 FLAG_C = CFLAG_CLEAR;\r
3917 FLAG_V = VFLAG_CLEAR;\r
3918}\r
3919\r
3920\r
3921void m68k_op_eori_16_ai(void)\r
3922{\r
3923 uint src = OPER_I_16();\r
3924 uint ea = EA_AY_AI_16();\r
3925 uint res = src ^ m68ki_read_16(ea);\r
3926\r
3927 m68ki_write_16(ea, res);\r
3928\r
3929 FLAG_N = NFLAG_16(res);\r
3930 FLAG_Z = res;\r
3931 FLAG_C = CFLAG_CLEAR;\r
3932 FLAG_V = VFLAG_CLEAR;\r
3933}\r
3934\r
3935\r
3936void m68k_op_eori_16_pi(void)\r
3937{\r
3938 uint src = OPER_I_16();\r
3939 uint ea = EA_AY_PI_16();\r
3940 uint res = src ^ m68ki_read_16(ea);\r
3941\r
3942 m68ki_write_16(ea, res);\r
3943\r
3944 FLAG_N = NFLAG_16(res);\r
3945 FLAG_Z = res;\r
3946 FLAG_C = CFLAG_CLEAR;\r
3947 FLAG_V = VFLAG_CLEAR;\r
3948}\r
3949\r
3950\r
3951void m68k_op_eori_16_pd(void)\r
3952{\r
3953 uint src = OPER_I_16();\r
3954 uint ea = EA_AY_PD_16();\r
3955 uint res = src ^ m68ki_read_16(ea);\r
3956\r
3957 m68ki_write_16(ea, res);\r
3958\r
3959 FLAG_N = NFLAG_16(res);\r
3960 FLAG_Z = res;\r
3961 FLAG_C = CFLAG_CLEAR;\r
3962 FLAG_V = VFLAG_CLEAR;\r
3963}\r
3964\r
3965\r
3966void m68k_op_eori_16_di(void)\r
3967{\r
3968 uint src = OPER_I_16();\r
3969 uint ea = EA_AY_DI_16();\r
3970 uint res = src ^ m68ki_read_16(ea);\r
3971\r
3972 m68ki_write_16(ea, res);\r
3973\r
3974 FLAG_N = NFLAG_16(res);\r
3975 FLAG_Z = res;\r
3976 FLAG_C = CFLAG_CLEAR;\r
3977 FLAG_V = VFLAG_CLEAR;\r
3978}\r
3979\r
3980\r
3981void m68k_op_eori_16_ix(void)\r
3982{\r
3983 uint src = OPER_I_16();\r
3984 uint ea = EA_AY_IX_16();\r
3985 uint res = src ^ m68ki_read_16(ea);\r
3986\r
3987 m68ki_write_16(ea, res);\r
3988\r
3989 FLAG_N = NFLAG_16(res);\r
3990 FLAG_Z = res;\r
3991 FLAG_C = CFLAG_CLEAR;\r
3992 FLAG_V = VFLAG_CLEAR;\r
3993}\r
3994\r
3995\r
3996void m68k_op_eori_16_aw(void)\r
3997{\r
3998 uint src = OPER_I_16();\r
3999 uint ea = EA_AW_16();\r
4000 uint res = src ^ m68ki_read_16(ea);\r
4001\r
4002 m68ki_write_16(ea, res);\r
4003\r
4004 FLAG_N = NFLAG_16(res);\r
4005 FLAG_Z = res;\r
4006 FLAG_C = CFLAG_CLEAR;\r
4007 FLAG_V = VFLAG_CLEAR;\r
4008}\r
4009\r
4010\r
4011void m68k_op_eori_16_al(void)\r
4012{\r
4013 uint src = OPER_I_16();\r
4014 uint ea = EA_AL_16();\r
4015 uint res = src ^ m68ki_read_16(ea);\r
4016\r
4017 m68ki_write_16(ea, res);\r
4018\r
4019 FLAG_N = NFLAG_16(res);\r
4020 FLAG_Z = res;\r
4021 FLAG_C = CFLAG_CLEAR;\r
4022 FLAG_V = VFLAG_CLEAR;\r
4023}\r
4024\r
4025\r
4026void m68k_op_eori_32_d(void)\r
4027{\r
4028 uint res = DY ^= OPER_I_32();\r
4029\r
4030 FLAG_N = NFLAG_32(res);\r
4031 FLAG_Z = res;\r
4032 FLAG_C = CFLAG_CLEAR;\r
4033 FLAG_V = VFLAG_CLEAR;\r
4034}\r
4035\r
4036\r
4037void m68k_op_eori_32_ai(void)\r
4038{\r
4039 uint src = OPER_I_32();\r
4040 uint ea = EA_AY_AI_32();\r
4041 uint res = src ^ m68ki_read_32(ea);\r
4042\r
4043 m68ki_write_32(ea, res);\r
4044\r
4045 FLAG_N = NFLAG_32(res);\r
4046 FLAG_Z = res;\r
4047 FLAG_C = CFLAG_CLEAR;\r
4048 FLAG_V = VFLAG_CLEAR;\r
4049}\r
4050\r
4051\r
4052void m68k_op_eori_32_pi(void)\r
4053{\r
4054 uint src = OPER_I_32();\r
4055 uint ea = EA_AY_PI_32();\r
4056 uint res = src ^ m68ki_read_32(ea);\r
4057\r
4058 m68ki_write_32(ea, res);\r
4059\r
4060 FLAG_N = NFLAG_32(res);\r
4061 FLAG_Z = res;\r
4062 FLAG_C = CFLAG_CLEAR;\r
4063 FLAG_V = VFLAG_CLEAR;\r
4064}\r
4065\r
4066\r
4067void m68k_op_eori_32_pd(void)\r
4068{\r
4069 uint src = OPER_I_32();\r
4070 uint ea = EA_AY_PD_32();\r
4071 uint res = src ^ m68ki_read_32(ea);\r
4072\r
4073 m68ki_write_32(ea, res);\r
4074\r
4075 FLAG_N = NFLAG_32(res);\r
4076 FLAG_Z = res;\r
4077 FLAG_C = CFLAG_CLEAR;\r
4078 FLAG_V = VFLAG_CLEAR;\r
4079}\r
4080\r
4081\r
4082void m68k_op_eori_32_di(void)\r
4083{\r
4084 uint src = OPER_I_32();\r
4085 uint ea = EA_AY_DI_32();\r
4086 uint res = src ^ m68ki_read_32(ea);\r
4087\r
4088 m68ki_write_32(ea, res);\r
4089\r
4090 FLAG_N = NFLAG_32(res);\r
4091 FLAG_Z = res;\r
4092 FLAG_C = CFLAG_CLEAR;\r
4093 FLAG_V = VFLAG_CLEAR;\r
4094}\r
4095\r
4096\r
4097void m68k_op_eori_32_ix(void)\r
4098{\r
4099 uint src = OPER_I_32();\r
4100 uint ea = EA_AY_IX_32();\r
4101 uint res = src ^ m68ki_read_32(ea);\r
4102\r
4103 m68ki_write_32(ea, res);\r
4104\r
4105 FLAG_N = NFLAG_32(res);\r
4106 FLAG_Z = res;\r
4107 FLAG_C = CFLAG_CLEAR;\r
4108 FLAG_V = VFLAG_CLEAR;\r
4109}\r
4110\r
4111\r
4112void m68k_op_eori_32_aw(void)\r
4113{\r
4114 uint src = OPER_I_32();\r
4115 uint ea = EA_AW_32();\r
4116 uint res = src ^ m68ki_read_32(ea);\r
4117\r
4118 m68ki_write_32(ea, res);\r
4119\r
4120 FLAG_N = NFLAG_32(res);\r
4121 FLAG_Z = res;\r
4122 FLAG_C = CFLAG_CLEAR;\r
4123 FLAG_V = VFLAG_CLEAR;\r
4124}\r
4125\r
4126\r
4127void m68k_op_eori_32_al(void)\r
4128{\r
4129 uint src = OPER_I_32();\r
4130 uint ea = EA_AL_32();\r
4131 uint res = src ^ m68ki_read_32(ea);\r
4132\r
4133 m68ki_write_32(ea, res);\r
4134\r
4135 FLAG_N = NFLAG_32(res);\r
4136 FLAG_Z = res;\r
4137 FLAG_C = CFLAG_CLEAR;\r
4138 FLAG_V = VFLAG_CLEAR;\r
4139}\r
4140\r
4141\r
4142void m68k_op_eori_16_toc(void)\r
4143{\r
4144 m68ki_set_ccr(m68ki_get_ccr() ^ OPER_I_16());\r
4145}\r
4146\r
4147\r
4148void m68k_op_eori_16_tos(void)\r
4149{\r
4150 if(FLAG_S)\r
4151 {\r
4152 uint src = OPER_I_16();\r
4153 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4154 m68ki_set_sr(m68ki_get_sr() ^ src);\r
4155 return;\r
4156 }\r
4157 m68ki_exception_privilege_violation();\r
4158}\r
4159\r
4160\r
4161void m68k_op_exg_32_dd(void)\r
4162{\r
4163 uint* reg_a = &DX;\r
4164 uint* reg_b = &DY;\r
4165 uint tmp = *reg_a;\r
4166 *reg_a = *reg_b;\r
4167 *reg_b = tmp;\r
4168}\r
4169\r
4170\r
4171void m68k_op_exg_32_aa(void)\r
4172{\r
4173 uint* reg_a = &AX;\r
4174 uint* reg_b = &AY;\r
4175 uint tmp = *reg_a;\r
4176 *reg_a = *reg_b;\r
4177 *reg_b = tmp;\r
4178}\r
4179\r
4180\r
4181void m68k_op_exg_32_da(void)\r
4182{\r
4183 uint* reg_a = &DX;\r
4184 uint* reg_b = &AY;\r
4185 uint tmp = *reg_a;\r
4186 *reg_a = *reg_b;\r
4187 *reg_b = tmp;\r
4188}\r
4189\r
4190\r
4191void m68k_op_ext_16(void)\r
4192{\r
4193 uint* r_dst = &DY;\r
4194\r
4195 *r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0);\r
4196\r
4197 FLAG_N = NFLAG_16(*r_dst);\r
4198 FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);\r
4199 FLAG_V = VFLAG_CLEAR;\r
4200 FLAG_C = CFLAG_CLEAR;\r
4201}\r
4202\r
4203\r
4204void m68k_op_ext_32(void)\r
4205{\r
4206 uint* r_dst = &DY;\r
4207\r
4208 *r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0);\r
4209\r
4210 FLAG_N = NFLAG_32(*r_dst);\r
4211 FLAG_Z = *r_dst;\r
4212 FLAG_V = VFLAG_CLEAR;\r
4213 FLAG_C = CFLAG_CLEAR;\r
4214}\r
4215\r
4216\r
4217void m68k_op_extb_32(void)\r
4218{\r
4219 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
4220 {\r
4221 uint* r_dst = &DY;\r
4222\r
4223 *r_dst = MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xffffff00 : 0);\r
4224\r
4225 FLAG_N = NFLAG_32(*r_dst);\r
4226 FLAG_Z = *r_dst;\r
4227 FLAG_V = VFLAG_CLEAR;\r
4228 FLAG_C = CFLAG_CLEAR;\r
4229 return;\r
4230 }\r
4231 m68ki_exception_illegal();\r
4232}\r
4233\r
4234\r
4235void m68k_op_illegal(void)\r
4236{\r
4237 m68ki_exception_illegal();\r
4238}\r
4239\r
4240\r
4241void m68k_op_jmp_32_ai(void)\r
4242{\r
4243 m68ki_jump(EA_AY_AI_32());\r
4244 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4245 if(REG_PC == REG_PPC)\r
4246 USE_ALL_CYCLES();\r
4247}\r
4248\r
4249\r
4250void m68k_op_jmp_32_di(void)\r
4251{\r
4252 m68ki_jump(EA_AY_DI_32());\r
4253 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4254 if(REG_PC == REG_PPC)\r
4255 USE_ALL_CYCLES();\r
4256}\r
4257\r
4258\r
4259void m68k_op_jmp_32_ix(void)\r
4260{\r
4261 m68ki_jump(EA_AY_IX_32());\r
4262 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4263 if(REG_PC == REG_PPC)\r
4264 USE_ALL_CYCLES();\r
4265}\r
4266\r
4267\r
4268void m68k_op_jmp_32_aw(void)\r
4269{\r
4270 m68ki_jump(EA_AW_32());\r
4271 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4272 if(REG_PC == REG_PPC)\r
4273 USE_ALL_CYCLES();\r
4274}\r
4275\r
4276\r
4277void m68k_op_jmp_32_al(void)\r
4278{\r
4279 m68ki_jump(EA_AL_32());\r
4280 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4281 if(REG_PC == REG_PPC)\r
4282 USE_ALL_CYCLES();\r
4283}\r
4284\r
4285\r
4286void m68k_op_jmp_32_pcdi(void)\r
4287{\r
4288 m68ki_jump(EA_PCDI_32());\r
4289 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4290 if(REG_PC == REG_PPC)\r
4291 USE_ALL_CYCLES();\r
4292}\r
4293\r
4294\r
4295void m68k_op_jmp_32_pcix(void)\r
4296{\r
4297 m68ki_jump(EA_PCIX_32());\r
4298 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4299 if(REG_PC == REG_PPC)\r
4300 USE_ALL_CYCLES();\r
4301}\r
4302\r
4303\r
4304void m68k_op_jsr_32_ai(void)\r
4305{\r
4306 uint ea = EA_AY_AI_32();\r
4307 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4308 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it\r
4309 m68ki_jump(ea);\r
4310}\r
4311\r
4312\r
4313void m68k_op_jsr_32_di(void)\r
4314{\r
4315 uint ea = EA_AY_DI_32();\r
4316 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4317 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it\r
4318 m68ki_jump(ea);\r
4319}\r
4320\r
4321\r
4322void m68k_op_jsr_32_ix(void)\r
4323{\r
4324 uint ea = EA_AY_IX_32();\r
4325 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4326 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it\r
4327 m68ki_jump(ea);\r
4328}\r
4329\r
4330\r
4331void m68k_op_jsr_32_aw(void)\r
4332{\r
4333 uint ea = EA_AW_32();\r
4334 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4335 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it\r
4336 m68ki_jump(ea);\r
4337}\r
4338\r
4339\r
4340void m68k_op_jsr_32_al(void)\r
4341{\r
4342 uint ea = EA_AL_32();\r
4343 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4344 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it\r
4345 m68ki_jump(ea);\r
4346}\r
4347\r
4348\r
4349void m68k_op_jsr_32_pcdi(void)\r
4350{\r
4351 uint ea = EA_PCDI_32();\r
4352 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4353 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it\r
4354 m68ki_jump(ea);\r
4355}\r
4356\r
4357\r
4358void m68k_op_jsr_32_pcix(void)\r
4359{\r
4360 uint ea = EA_PCIX_32();\r
4361 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
4362 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it\r
4363 m68ki_jump(ea);\r
4364}\r
4365\r
4366\r
4367void m68k_op_lea_32_ai(void)\r
4368{\r
4369 AX = EA_AY_AI_32();\r
4370}\r
4371\r
4372\r
4373void m68k_op_lea_32_di(void)\r
4374{\r
4375 AX = EA_AY_DI_32();\r
4376}\r
4377\r
4378\r
4379void m68k_op_lea_32_ix(void)\r
4380{\r
4381 AX = EA_AY_IX_32();\r
4382}\r
4383\r
4384\r
4385void m68k_op_lea_32_aw(void)\r
4386{\r
4387 AX = EA_AW_32();\r
4388}\r
4389\r
4390\r
4391void m68k_op_lea_32_al(void)\r
4392{\r
4393 AX = EA_AL_32();\r
4394}\r
4395\r
4396\r
4397void m68k_op_lea_32_pcdi(void)\r
4398{\r
4399 AX = EA_PCDI_32();\r
4400}\r
4401\r
4402\r
4403void m68k_op_lea_32_pcix(void)\r
4404{\r
4405 AX = EA_PCIX_32();\r
4406}\r
4407\r
4408\r
4409void m68k_op_link_16_a7(void)\r
4410{\r
4411 REG_A[7] -= 4;\r
4412 m68ki_write_32(REG_A[7], REG_A[7]);\r
4413 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));\r
4414}\r
4415\r
4416\r
4417void m68k_op_link_16(void)\r
4418{\r
4419 uint* r_dst = &AY;\r
4420\r
4421 m68ki_push_32(*r_dst);\r
4422 *r_dst = REG_A[7];\r
4423 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));\r
4424}\r
4425\r
4426\r
4427void m68k_op_link_32_a7(void)\r
4428{\r
4429 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
4430 {\r
4431 REG_A[7] -= 4;\r
4432 m68ki_write_32(REG_A[7], REG_A[7]);\r
4433 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32());\r
4434 return;\r
4435 }\r
4436 m68ki_exception_illegal();\r
4437}\r
4438\r
4439\r
4440void m68k_op_link_32(void)\r
4441{\r
4442 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
4443 {\r
4444 uint* r_dst = &AY;\r
4445\r
4446 m68ki_push_32(*r_dst);\r
4447 *r_dst = REG_A[7];\r
4448 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32());\r
4449 return;\r
4450 }\r
4451 m68ki_exception_illegal();\r
4452}\r
4453\r
4454\r
4455void m68k_op_lsr_8_s(void)\r
4456{\r
4457 uint* r_dst = &DY;\r
4458 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;\r
4459 uint src = MASK_OUT_ABOVE_8(*r_dst);\r
4460 uint res = src >> shift;\r
4461\r
4462 if(shift != 0)\r
4463 USE_CYCLES(shift<<CYC_SHIFT);\r
4464\r
4465 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
4466\r
4467 FLAG_N = NFLAG_CLEAR;\r
4468 FLAG_Z = res;\r
4469 FLAG_X = FLAG_C = src << (9-shift);\r
4470 FLAG_V = VFLAG_CLEAR;\r
4471}\r
4472\r
4473\r
4474void m68k_op_lsr_16_s(void)\r
4475{\r
4476 uint* r_dst = &DY;\r
4477 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;\r
4478 uint src = MASK_OUT_ABOVE_16(*r_dst);\r
4479 uint res = src >> shift;\r
4480\r
4481 if(shift != 0)\r
4482 USE_CYCLES(shift<<CYC_SHIFT);\r
4483\r
4484 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
4485\r
4486 FLAG_N = NFLAG_CLEAR;\r
4487 FLAG_Z = res;\r
4488 FLAG_X = FLAG_C = src << (9-shift);\r
4489 FLAG_V = VFLAG_CLEAR;\r
4490}\r
4491\r
4492\r
4493void m68k_op_lsr_32_s(void)\r
4494{\r
4495 uint* r_dst = &DY;\r
4496 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;\r
4497 uint src = *r_dst;\r
4498 uint res = src >> shift;\r
4499\r
4500 if(shift != 0)\r
4501 USE_CYCLES(shift<<CYC_SHIFT);\r
4502\r
4503 *r_dst = res;\r
4504\r
4505 FLAG_N = NFLAG_CLEAR;\r
4506 FLAG_Z = res;\r
4507 FLAG_X = FLAG_C = src << (9-shift);\r
4508 FLAG_V = VFLAG_CLEAR;\r
4509}\r
4510\r
4511\r
4512void m68k_op_lsr_8_r(void)\r
4513{\r
4514 uint* r_dst = &DY;\r
4515 uint shift = DX & 0x3f;\r
4516 uint src = MASK_OUT_ABOVE_8(*r_dst);\r
4517 uint res = src >> shift;\r
4518\r
4519 if(shift != 0)\r
4520 {\r
4521 USE_CYCLES(shift<<CYC_SHIFT);\r
4522\r
4523 if(shift <= 8)\r
4524 {\r
4525 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
4526 FLAG_X = FLAG_C = src << (9-shift);\r
4527 FLAG_N = NFLAG_CLEAR;\r
4528 FLAG_Z = res;\r
4529 FLAG_V = VFLAG_CLEAR;\r
4530 return;\r
4531 }\r
4532\r
4533 *r_dst &= 0xffffff00;\r
4534 FLAG_X = XFLAG_CLEAR;\r
4535 FLAG_C = CFLAG_CLEAR;\r
4536 FLAG_N = NFLAG_CLEAR;\r
4537 FLAG_Z = ZFLAG_SET;\r
4538 FLAG_V = VFLAG_CLEAR;\r
4539 return;\r
4540 }\r
4541\r
4542 FLAG_C = CFLAG_CLEAR;\r
4543 FLAG_N = NFLAG_8(src);\r
4544 FLAG_Z = src;\r
4545 FLAG_V = VFLAG_CLEAR;\r
4546}\r
4547\r
4548\r
4549void m68k_op_lsr_16_r(void)\r
4550{\r
4551 uint* r_dst = &DY;\r
4552 uint shift = DX & 0x3f;\r
4553 uint src = MASK_OUT_ABOVE_16(*r_dst);\r
4554 uint res = src >> shift;\r
4555\r
4556 if(shift != 0)\r
4557 {\r
4558 USE_CYCLES(shift<<CYC_SHIFT);\r
4559\r
4560 if(shift <= 16)\r
4561 {\r
4562 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
4563 FLAG_C = FLAG_X = (src >> (shift - 1))<<8;\r
4564 FLAG_N = NFLAG_CLEAR;\r
4565 FLAG_Z = res;\r
4566 FLAG_V = VFLAG_CLEAR;\r
4567 return;\r
4568 }\r
4569\r
4570 *r_dst &= 0xffff0000;\r
4571 FLAG_X = XFLAG_CLEAR;\r
4572 FLAG_C = CFLAG_CLEAR;\r
4573 FLAG_N = NFLAG_CLEAR;\r
4574 FLAG_Z = ZFLAG_SET;\r
4575 FLAG_V = VFLAG_CLEAR;\r
4576 return;\r
4577 }\r
4578\r
4579 FLAG_C = CFLAG_CLEAR;\r
4580 FLAG_N = NFLAG_16(src);\r
4581 FLAG_Z = src;\r
4582 FLAG_V = VFLAG_CLEAR;\r
4583}\r
4584\r
4585\r
4586void m68k_op_lsr_32_r(void)\r
4587{\r
4588 uint* r_dst = &DY;\r
4589 uint shift = DX & 0x3f;\r
4590 uint src = *r_dst;\r
4591 uint res = src >> shift;\r
4592\r
4593 if(shift != 0)\r
4594 {\r
4595 USE_CYCLES(shift<<CYC_SHIFT);\r
4596\r
4597 if(shift < 32)\r
4598 {\r
4599 *r_dst = res;\r
4600 FLAG_C = FLAG_X = (src >> (shift - 1))<<8;\r
4601 FLAG_N = NFLAG_CLEAR;\r
4602 FLAG_Z = res;\r
4603 FLAG_V = VFLAG_CLEAR;\r
4604 return;\r
4605 }\r
4606\r
4607 *r_dst = 0;\r
4608 FLAG_X = FLAG_C = (shift == 32 ? GET_MSB_32(src)>>23 : 0);\r
4609 FLAG_N = NFLAG_CLEAR;\r
4610 FLAG_Z = ZFLAG_SET;\r
4611 FLAG_V = VFLAG_CLEAR;\r
4612 return;\r
4613 }\r
4614\r
4615 FLAG_C = CFLAG_CLEAR;\r
4616 FLAG_N = NFLAG_32(src);\r
4617 FLAG_Z = src;\r
4618 FLAG_V = VFLAG_CLEAR;\r
4619}\r
4620\r
4621\r
4622void m68k_op_lsr_16_ai(void)\r
4623{\r
4624 uint ea = EA_AY_AI_16();\r
4625 uint src = m68ki_read_16(ea);\r
4626 uint res = src >> 1;\r
4627\r
4628 m68ki_write_16(ea, res);\r
4629\r
4630 FLAG_N = NFLAG_CLEAR;\r
4631 FLAG_Z = res;\r
4632 FLAG_C = FLAG_X = src << 8;\r
4633 FLAG_V = VFLAG_CLEAR;\r
4634}\r
4635\r
4636\r
4637void m68k_op_lsr_16_pi(void)\r
4638{\r
4639 uint ea = EA_AY_PI_16();\r
4640 uint src = m68ki_read_16(ea);\r
4641 uint res = src >> 1;\r
4642\r
4643 m68ki_write_16(ea, res);\r
4644\r
4645 FLAG_N = NFLAG_CLEAR;\r
4646 FLAG_Z = res;\r
4647 FLAG_C = FLAG_X = src << 8;\r
4648 FLAG_V = VFLAG_CLEAR;\r
4649}\r
4650\r
4651\r
4652void m68k_op_lsr_16_pd(void)\r
4653{\r
4654 uint ea = EA_AY_PD_16();\r
4655 uint src = m68ki_read_16(ea);\r
4656 uint res = src >> 1;\r
4657\r
4658 m68ki_write_16(ea, res);\r
4659\r
4660 FLAG_N = NFLAG_CLEAR;\r
4661 FLAG_Z = res;\r
4662 FLAG_C = FLAG_X = src << 8;\r
4663 FLAG_V = VFLAG_CLEAR;\r
4664}\r
4665\r
4666\r
4667void m68k_op_lsr_16_di(void)\r
4668{\r
4669 uint ea = EA_AY_DI_16();\r
4670 uint src = m68ki_read_16(ea);\r
4671 uint res = src >> 1;\r
4672\r
4673 m68ki_write_16(ea, res);\r
4674\r
4675 FLAG_N = NFLAG_CLEAR;\r
4676 FLAG_Z = res;\r
4677 FLAG_C = FLAG_X = src << 8;\r
4678 FLAG_V = VFLAG_CLEAR;\r
4679}\r
4680\r
4681\r
4682void m68k_op_lsr_16_ix(void)\r
4683{\r
4684 uint ea = EA_AY_IX_16();\r
4685 uint src = m68ki_read_16(ea);\r
4686 uint res = src >> 1;\r
4687\r
4688 m68ki_write_16(ea, res);\r
4689\r
4690 FLAG_N = NFLAG_CLEAR;\r
4691 FLAG_Z = res;\r
4692 FLAG_C = FLAG_X = src << 8;\r
4693 FLAG_V = VFLAG_CLEAR;\r
4694}\r
4695\r
4696\r
4697void m68k_op_lsr_16_aw(void)\r
4698{\r
4699 uint ea = EA_AW_16();\r
4700 uint src = m68ki_read_16(ea);\r
4701 uint res = src >> 1;\r
4702\r
4703 m68ki_write_16(ea, res);\r
4704\r
4705 FLAG_N = NFLAG_CLEAR;\r
4706 FLAG_Z = res;\r
4707 FLAG_C = FLAG_X = src << 8;\r
4708 FLAG_V = VFLAG_CLEAR;\r
4709}\r
4710\r
4711\r
4712void m68k_op_lsr_16_al(void)\r
4713{\r
4714 uint ea = EA_AL_16();\r
4715 uint src = m68ki_read_16(ea);\r
4716 uint res = src >> 1;\r
4717\r
4718 m68ki_write_16(ea, res);\r
4719\r
4720 FLAG_N = NFLAG_CLEAR;\r
4721 FLAG_Z = res;\r
4722 FLAG_C = FLAG_X = src << 8;\r
4723 FLAG_V = VFLAG_CLEAR;\r
4724}\r
4725\r
4726\r
4727void m68k_op_lsl_8_s(void)\r
4728{\r
4729 uint* r_dst = &DY;\r
4730 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;\r
4731 uint src = MASK_OUT_ABOVE_8(*r_dst);\r
4732 uint res = MASK_OUT_ABOVE_8(src << shift);\r
4733\r
4734 if(shift != 0)\r
4735 USE_CYCLES(shift<<CYC_SHIFT);\r
4736\r
4737 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
4738\r
4739 FLAG_N = NFLAG_8(res);\r
4740 FLAG_Z = res;\r
4741 FLAG_X = FLAG_C = src << shift;\r
4742 FLAG_V = VFLAG_CLEAR;\r
4743}\r
4744\r
4745\r
4746void m68k_op_lsl_16_s(void)\r
4747{\r
4748 uint* r_dst = &DY;\r
4749 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;\r
4750 uint src = MASK_OUT_ABOVE_16(*r_dst);\r
4751 uint res = MASK_OUT_ABOVE_16(src << shift);\r
4752\r
4753 if(shift != 0)\r
4754 USE_CYCLES(shift<<CYC_SHIFT);\r
4755\r
4756 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
4757\r
4758 FLAG_N = NFLAG_16(res);\r
4759 FLAG_Z = res;\r
4760 FLAG_X = FLAG_C = src >> (8-shift);\r
4761 FLAG_V = VFLAG_CLEAR;\r
4762}\r
4763\r
4764\r
4765void m68k_op_lsl_32_s(void)\r
4766{\r
4767 uint* r_dst = &DY;\r
4768 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;\r
4769 uint src = *r_dst;\r
4770 uint res = MASK_OUT_ABOVE_32(src << shift);\r
4771\r
4772 if(shift != 0)\r
4773 USE_CYCLES(shift<<CYC_SHIFT);\r
4774\r
4775 *r_dst = res;\r
4776\r
4777 FLAG_N = NFLAG_32(res);\r
4778 FLAG_Z = res;\r
4779 FLAG_X = FLAG_C = src >> (24-shift);\r
4780 FLAG_V = VFLAG_CLEAR;\r
4781}\r
4782\r
4783\r
4784void m68k_op_lsl_8_r(void)\r
4785{\r
4786 uint* r_dst = &DY;\r
4787 uint shift = DX & 0x3f;\r
4788 uint src = MASK_OUT_ABOVE_8(*r_dst);\r
4789 uint res = MASK_OUT_ABOVE_8(src << shift);\r
4790\r
4791 if(shift != 0)\r
4792 {\r
4793 USE_CYCLES(shift<<CYC_SHIFT);\r
4794\r
4795 if(shift <= 8)\r
4796 {\r
4797 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
4798 FLAG_X = FLAG_C = src << shift;\r
4799 FLAG_N = NFLAG_8(res);\r
4800 FLAG_Z = res;\r
4801 FLAG_V = VFLAG_CLEAR;\r
4802 return;\r
4803 }\r
4804\r
4805 *r_dst &= 0xffffff00;\r
4806 FLAG_X = XFLAG_CLEAR;\r
4807 FLAG_C = CFLAG_CLEAR;\r
4808 FLAG_N = NFLAG_CLEAR;\r
4809 FLAG_Z = ZFLAG_SET;\r
4810 FLAG_V = VFLAG_CLEAR;\r
4811 return;\r
4812 }\r
4813\r
4814 FLAG_C = CFLAG_CLEAR;\r
4815 FLAG_N = NFLAG_8(src);\r
4816 FLAG_Z = src;\r
4817 FLAG_V = VFLAG_CLEAR;\r
4818}\r
4819\r
4820\r
4821void m68k_op_lsl_16_r(void)\r
4822{\r
4823 uint* r_dst = &DY;\r
4824 uint shift = DX & 0x3f;\r
4825 uint src = MASK_OUT_ABOVE_16(*r_dst);\r
4826 uint res = MASK_OUT_ABOVE_16(src << shift);\r
4827\r
4828 if(shift != 0)\r
4829 {\r
4830 USE_CYCLES(shift<<CYC_SHIFT);\r
4831\r
4832 if(shift <= 16)\r
4833 {\r
4834 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
4835 FLAG_X = FLAG_C = (src << shift) >> 8;\r
4836 FLAG_N = NFLAG_16(res);\r
4837 FLAG_Z = res;\r
4838 FLAG_V = VFLAG_CLEAR;\r
4839 return;\r
4840 }\r
4841\r
4842 *r_dst &= 0xffff0000;\r
4843 FLAG_X = XFLAG_CLEAR;\r
4844 FLAG_C = CFLAG_CLEAR;\r
4845 FLAG_N = NFLAG_CLEAR;\r
4846 FLAG_Z = ZFLAG_SET;\r
4847 FLAG_V = VFLAG_CLEAR;\r
4848 return;\r
4849 }\r
4850\r
4851 FLAG_C = CFLAG_CLEAR;\r
4852 FLAG_N = NFLAG_16(src);\r
4853 FLAG_Z = src;\r
4854 FLAG_V = VFLAG_CLEAR;\r
4855}\r
4856\r
4857\r
4858void m68k_op_lsl_32_r(void)\r
4859{\r
4860 uint* r_dst = &DY;\r
4861 uint shift = DX & 0x3f;\r
4862 uint src = *r_dst;\r
4863 uint res = MASK_OUT_ABOVE_32(src << shift);\r
4864\r
4865 if(shift != 0)\r
4866 {\r
4867 USE_CYCLES(shift<<CYC_SHIFT);\r
4868\r
4869 if(shift < 32)\r
4870 {\r
4871 *r_dst = res;\r
4872 FLAG_X = FLAG_C = (src >> (32 - shift)) << 8;\r
4873 FLAG_N = NFLAG_32(res);\r
4874 FLAG_Z = res;\r
4875 FLAG_V = VFLAG_CLEAR;\r
4876 return;\r
4877 }\r
4878\r
4879 *r_dst = 0;\r
4880 FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8;\r
4881 FLAG_N = NFLAG_CLEAR;\r
4882 FLAG_Z = ZFLAG_SET;\r
4883 FLAG_V = VFLAG_CLEAR;\r
4884 return;\r
4885 }\r
4886\r
4887 FLAG_C = CFLAG_CLEAR;\r
4888 FLAG_N = NFLAG_32(src);\r
4889 FLAG_Z = src;\r
4890 FLAG_V = VFLAG_CLEAR;\r
4891}\r
4892\r
4893\r
4894void m68k_op_lsl_16_ai(void)\r
4895{\r
4896 uint ea = EA_AY_AI_16();\r
4897 uint src = m68ki_read_16(ea);\r
4898 uint res = MASK_OUT_ABOVE_16(src << 1);\r
4899\r
4900 m68ki_write_16(ea, res);\r
4901\r
4902 FLAG_N = NFLAG_16(res);\r
4903 FLAG_Z = res;\r
4904 FLAG_X = FLAG_C = src >> 7;\r
4905 FLAG_V = VFLAG_CLEAR;\r
4906}\r
4907\r
4908\r
4909void m68k_op_lsl_16_pi(void)\r
4910{\r
4911 uint ea = EA_AY_PI_16();\r
4912 uint src = m68ki_read_16(ea);\r
4913 uint res = MASK_OUT_ABOVE_16(src << 1);\r
4914\r
4915 m68ki_write_16(ea, res);\r
4916\r
4917 FLAG_N = NFLAG_16(res);\r
4918 FLAG_Z = res;\r
4919 FLAG_X = FLAG_C = src >> 7;\r
4920 FLAG_V = VFLAG_CLEAR;\r
4921}\r
4922\r
4923\r
4924void m68k_op_lsl_16_pd(void)\r
4925{\r
4926 uint ea = EA_AY_PD_16();\r
4927 uint src = m68ki_read_16(ea);\r
4928 uint res = MASK_OUT_ABOVE_16(src << 1);\r
4929\r
4930 m68ki_write_16(ea, res);\r
4931\r
4932 FLAG_N = NFLAG_16(res);\r
4933 FLAG_Z = res;\r
4934 FLAG_X = FLAG_C = src >> 7;\r
4935 FLAG_V = VFLAG_CLEAR;\r
4936}\r
4937\r
4938\r
4939void m68k_op_lsl_16_di(void)\r
4940{\r
4941 uint ea = EA_AY_DI_16();\r
4942 uint src = m68ki_read_16(ea);\r
4943 uint res = MASK_OUT_ABOVE_16(src << 1);\r
4944\r
4945 m68ki_write_16(ea, res);\r
4946\r
4947 FLAG_N = NFLAG_16(res);\r
4948 FLAG_Z = res;\r
4949 FLAG_X = FLAG_C = src >> 7;\r
4950 FLAG_V = VFLAG_CLEAR;\r
4951}\r
4952\r
4953\r
4954void m68k_op_lsl_16_ix(void)\r
4955{\r
4956 uint ea = EA_AY_IX_16();\r
4957 uint src = m68ki_read_16(ea);\r
4958 uint res = MASK_OUT_ABOVE_16(src << 1);\r
4959\r
4960 m68ki_write_16(ea, res);\r
4961\r
4962 FLAG_N = NFLAG_16(res);\r
4963 FLAG_Z = res;\r
4964 FLAG_X = FLAG_C = src >> 7;\r
4965 FLAG_V = VFLAG_CLEAR;\r
4966}\r
4967\r
4968\r
4969void m68k_op_lsl_16_aw(void)\r
4970{\r
4971 uint ea = EA_AW_16();\r
4972 uint src = m68ki_read_16(ea);\r
4973 uint res = MASK_OUT_ABOVE_16(src << 1);\r
4974\r
4975 m68ki_write_16(ea, res);\r
4976\r
4977 FLAG_N = NFLAG_16(res);\r
4978 FLAG_Z = res;\r
4979 FLAG_X = FLAG_C = src >> 7;\r
4980 FLAG_V = VFLAG_CLEAR;\r
4981}\r
4982\r
4983\r
4984void m68k_op_lsl_16_al(void)\r
4985{\r
4986 uint ea = EA_AL_16();\r
4987 uint src = m68ki_read_16(ea);\r
4988 uint res = MASK_OUT_ABOVE_16(src << 1);\r
4989\r
4990 m68ki_write_16(ea, res);\r
4991\r
4992 FLAG_N = NFLAG_16(res);\r
4993 FLAG_Z = res;\r
4994 FLAG_X = FLAG_C = src >> 7;\r
4995 FLAG_V = VFLAG_CLEAR;\r
4996}\r
4997\r
4998\r
4999void m68k_op_move_8_d_d(void)\r
5000{\r
5001 uint res = MASK_OUT_ABOVE_8(DY);\r
5002 uint* r_dst = &DX;\r
5003\r
5004 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5005\r
5006 FLAG_N = NFLAG_8(res);\r
5007 FLAG_Z = res;\r
5008 FLAG_V = VFLAG_CLEAR;\r
5009 FLAG_C = CFLAG_CLEAR;\r
5010}\r
5011\r
5012\r
5013void m68k_op_move_8_d_ai(void)\r
5014{\r
5015 uint res = OPER_AY_AI_8();\r
5016 uint* r_dst = &DX;\r
5017\r
5018 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5019\r
5020 FLAG_N = NFLAG_8(res);\r
5021 FLAG_Z = res;\r
5022 FLAG_V = VFLAG_CLEAR;\r
5023 FLAG_C = CFLAG_CLEAR;\r
5024}\r
5025\r
5026\r
5027void m68k_op_move_8_d_pi(void)\r
5028{\r
5029 uint res = OPER_AY_PI_8();\r
5030 uint* r_dst = &DX;\r
5031\r
5032 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5033\r
5034 FLAG_N = NFLAG_8(res);\r
5035 FLAG_Z = res;\r
5036 FLAG_V = VFLAG_CLEAR;\r
5037 FLAG_C = CFLAG_CLEAR;\r
5038}\r
5039\r
5040\r
5041void m68k_op_move_8_d_pi7(void)\r
5042{\r
5043 uint res = OPER_A7_PI_8();\r
5044 uint* r_dst = &DX;\r
5045\r
5046 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5047\r
5048 FLAG_N = NFLAG_8(res);\r
5049 FLAG_Z = res;\r
5050 FLAG_V = VFLAG_CLEAR;\r
5051 FLAG_C = CFLAG_CLEAR;\r
5052}\r
5053\r
5054\r
5055void m68k_op_move_8_d_pd(void)\r
5056{\r
5057 uint res = OPER_AY_PD_8();\r
5058 uint* r_dst = &DX;\r
5059\r
5060 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5061\r
5062 FLAG_N = NFLAG_8(res);\r
5063 FLAG_Z = res;\r
5064 FLAG_V = VFLAG_CLEAR;\r
5065 FLAG_C = CFLAG_CLEAR;\r
5066}\r
5067\r
5068\r
5069void m68k_op_move_8_d_pd7(void)\r
5070{\r
5071 uint res = OPER_A7_PD_8();\r
5072 uint* r_dst = &DX;\r
5073\r
5074 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5075\r
5076 FLAG_N = NFLAG_8(res);\r
5077 FLAG_Z = res;\r
5078 FLAG_V = VFLAG_CLEAR;\r
5079 FLAG_C = CFLAG_CLEAR;\r
5080}\r
5081\r
5082\r
5083void m68k_op_move_8_d_di(void)\r
5084{\r
5085 uint res = OPER_AY_DI_8();\r
5086 uint* r_dst = &DX;\r
5087\r
5088 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5089\r
5090 FLAG_N = NFLAG_8(res);\r
5091 FLAG_Z = res;\r
5092 FLAG_V = VFLAG_CLEAR;\r
5093 FLAG_C = CFLAG_CLEAR;\r
5094}\r
5095\r
5096\r
5097void m68k_op_move_8_d_ix(void)\r
5098{\r
5099 uint res = OPER_AY_IX_8();\r
5100 uint* r_dst = &DX;\r
5101\r
5102 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5103\r
5104 FLAG_N = NFLAG_8(res);\r
5105 FLAG_Z = res;\r
5106 FLAG_V = VFLAG_CLEAR;\r
5107 FLAG_C = CFLAG_CLEAR;\r
5108}\r
5109\r
5110\r
5111void m68k_op_move_8_d_aw(void)\r
5112{\r
5113 uint res = OPER_AW_8();\r
5114 uint* r_dst = &DX;\r
5115\r
5116 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5117\r
5118 FLAG_N = NFLAG_8(res);\r
5119 FLAG_Z = res;\r
5120 FLAG_V = VFLAG_CLEAR;\r
5121 FLAG_C = CFLAG_CLEAR;\r
5122}\r
5123\r
5124\r
5125void m68k_op_move_8_d_al(void)\r
5126{\r
5127 uint res = OPER_AL_8();\r
5128 uint* r_dst = &DX;\r
5129\r
5130 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5131\r
5132 FLAG_N = NFLAG_8(res);\r
5133 FLAG_Z = res;\r
5134 FLAG_V = VFLAG_CLEAR;\r
5135 FLAG_C = CFLAG_CLEAR;\r
5136}\r
5137\r
5138\r
5139void m68k_op_move_8_d_pcdi(void)\r
5140{\r
5141 uint res = OPER_PCDI_8();\r
5142 uint* r_dst = &DX;\r
5143\r
5144 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5145\r
5146 FLAG_N = NFLAG_8(res);\r
5147 FLAG_Z = res;\r
5148 FLAG_V = VFLAG_CLEAR;\r
5149 FLAG_C = CFLAG_CLEAR;\r
5150}\r
5151\r
5152\r
5153void m68k_op_move_8_d_pcix(void)\r
5154{\r
5155 uint res = OPER_PCIX_8();\r
5156 uint* r_dst = &DX;\r
5157\r
5158 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5159\r
5160 FLAG_N = NFLAG_8(res);\r
5161 FLAG_Z = res;\r
5162 FLAG_V = VFLAG_CLEAR;\r
5163 FLAG_C = CFLAG_CLEAR;\r
5164}\r
5165\r
5166\r
5167void m68k_op_move_8_d_i(void)\r
5168{\r
5169 uint res = OPER_I_8();\r
5170 uint* r_dst = &DX;\r
5171\r
5172 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;\r
5173\r
5174 FLAG_N = NFLAG_8(res);\r
5175 FLAG_Z = res;\r
5176 FLAG_V = VFLAG_CLEAR;\r
5177 FLAG_C = CFLAG_CLEAR;\r
5178}\r
5179\r
5180\r
5181void m68k_op_move_8_ai_d(void)\r
5182{\r
5183 uint res = MASK_OUT_ABOVE_8(DY);\r
5184 uint ea = EA_AX_AI_8();\r
5185\r
5186 m68ki_write_8(ea, res);\r
5187\r
5188 FLAG_N = NFLAG_8(res);\r
5189 FLAG_Z = res;\r
5190 FLAG_V = VFLAG_CLEAR;\r
5191 FLAG_C = CFLAG_CLEAR;\r
5192}\r
5193\r
5194\r
5195void m68k_op_move_8_ai_ai(void)\r
5196{\r
5197 uint res = OPER_AY_AI_8();\r
5198 uint ea = EA_AX_AI_8();\r
5199\r
5200 m68ki_write_8(ea, res);\r
5201\r
5202 FLAG_N = NFLAG_8(res);\r
5203 FLAG_Z = res;\r
5204 FLAG_V = VFLAG_CLEAR;\r
5205 FLAG_C = CFLAG_CLEAR;\r
5206}\r
5207\r
5208\r
5209void m68k_op_move_8_ai_pi(void)\r
5210{\r
5211 uint res = OPER_AY_PI_8();\r
5212 uint ea = EA_AX_AI_8();\r
5213\r
5214 m68ki_write_8(ea, res);\r
5215\r
5216 FLAG_N = NFLAG_8(res);\r
5217 FLAG_Z = res;\r
5218 FLAG_V = VFLAG_CLEAR;\r
5219 FLAG_C = CFLAG_CLEAR;\r
5220}\r
5221\r
5222\r
5223void m68k_op_move_8_ai_pi7(void)\r
5224{\r
5225 uint res = OPER_A7_PI_8();\r
5226 uint ea = EA_AX_AI_8();\r
5227\r
5228 m68ki_write_8(ea, res);\r
5229\r
5230 FLAG_N = NFLAG_8(res);\r
5231 FLAG_Z = res;\r
5232 FLAG_V = VFLAG_CLEAR;\r
5233 FLAG_C = CFLAG_CLEAR;\r
5234}\r
5235\r
5236\r
5237void m68k_op_move_8_ai_pd(void)\r
5238{\r
5239 uint res = OPER_AY_PD_8();\r
5240 uint ea = EA_AX_AI_8();\r
5241\r
5242 m68ki_write_8(ea, res);\r
5243\r
5244 FLAG_N = NFLAG_8(res);\r
5245 FLAG_Z = res;\r
5246 FLAG_V = VFLAG_CLEAR;\r
5247 FLAG_C = CFLAG_CLEAR;\r
5248}\r
5249\r
5250\r
5251void m68k_op_move_8_ai_pd7(void)\r
5252{\r
5253 uint res = OPER_A7_PD_8();\r
5254 uint ea = EA_AX_AI_8();\r
5255\r
5256 m68ki_write_8(ea, res);\r
5257\r
5258 FLAG_N = NFLAG_8(res);\r
5259 FLAG_Z = res;\r
5260 FLAG_V = VFLAG_CLEAR;\r
5261 FLAG_C = CFLAG_CLEAR;\r
5262}\r
5263\r
5264\r
5265void m68k_op_move_8_ai_di(void)\r
5266{\r
5267 uint res = OPER_AY_DI_8();\r
5268 uint ea = EA_AX_AI_8();\r
5269\r
5270 m68ki_write_8(ea, res);\r
5271\r
5272 FLAG_N = NFLAG_8(res);\r
5273 FLAG_Z = res;\r
5274 FLAG_V = VFLAG_CLEAR;\r
5275 FLAG_C = CFLAG_CLEAR;\r
5276}\r
5277\r
5278\r
5279void m68k_op_move_8_ai_ix(void)\r
5280{\r
5281 uint res = OPER_AY_IX_8();\r
5282 uint ea = EA_AX_AI_8();\r
5283\r
5284 m68ki_write_8(ea, res);\r
5285\r
5286 FLAG_N = NFLAG_8(res);\r
5287 FLAG_Z = res;\r
5288 FLAG_V = VFLAG_CLEAR;\r
5289 FLAG_C = CFLAG_CLEAR;\r
5290}\r
5291\r
5292\r
5293void m68k_op_move_8_ai_aw(void)\r
5294{\r
5295 uint res = OPER_AW_8();\r
5296 uint ea = EA_AX_AI_8();\r
5297\r
5298 m68ki_write_8(ea, res);\r
5299\r
5300 FLAG_N = NFLAG_8(res);\r
5301 FLAG_Z = res;\r
5302 FLAG_V = VFLAG_CLEAR;\r
5303 FLAG_C = CFLAG_CLEAR;\r
5304}\r
5305\r
5306\r
5307void m68k_op_move_8_ai_al(void)\r
5308{\r
5309 uint res = OPER_AL_8();\r
5310 uint ea = EA_AX_AI_8();\r
5311\r
5312 m68ki_write_8(ea, res);\r
5313\r
5314 FLAG_N = NFLAG_8(res);\r
5315 FLAG_Z = res;\r
5316 FLAG_V = VFLAG_CLEAR;\r
5317 FLAG_C = CFLAG_CLEAR;\r
5318}\r
5319\r
5320\r
5321void m68k_op_move_8_ai_pcdi(void)\r
5322{\r
5323 uint res = OPER_PCDI_8();\r
5324 uint ea = EA_AX_AI_8();\r
5325\r
5326 m68ki_write_8(ea, res);\r
5327\r
5328 FLAG_N = NFLAG_8(res);\r
5329 FLAG_Z = res;\r
5330 FLAG_V = VFLAG_CLEAR;\r
5331 FLAG_C = CFLAG_CLEAR;\r
5332}\r
5333\r
5334\r
5335void m68k_op_move_8_ai_pcix(void)\r
5336{\r
5337 uint res = OPER_PCIX_8();\r
5338 uint ea = EA_AX_AI_8();\r
5339\r
5340 m68ki_write_8(ea, res);\r
5341\r
5342 FLAG_N = NFLAG_8(res);\r
5343 FLAG_Z = res;\r
5344 FLAG_V = VFLAG_CLEAR;\r
5345 FLAG_C = CFLAG_CLEAR;\r
5346}\r
5347\r
5348\r
5349void m68k_op_move_8_ai_i(void)\r
5350{\r
5351 uint res = OPER_I_8();\r
5352 uint ea = EA_AX_AI_8();\r
5353\r
5354 m68ki_write_8(ea, res);\r
5355\r
5356 FLAG_N = NFLAG_8(res);\r
5357 FLAG_Z = res;\r
5358 FLAG_V = VFLAG_CLEAR;\r
5359 FLAG_C = CFLAG_CLEAR;\r
5360}\r
5361\r
5362\r
5363void m68k_op_move_8_pi7_d(void)\r
5364{\r
5365 uint res = MASK_OUT_ABOVE_8(DY);\r
5366 uint ea = EA_A7_PI_8();\r
5367\r
5368 m68ki_write_8(ea, res);\r
5369\r
5370 FLAG_N = NFLAG_8(res);\r
5371 FLAG_Z = res;\r
5372 FLAG_V = VFLAG_CLEAR;\r
5373 FLAG_C = CFLAG_CLEAR;\r
5374}\r
5375\r
5376\r
5377void m68k_op_move_8_pi_d(void)\r
5378{\r
5379 uint res = MASK_OUT_ABOVE_8(DY);\r
5380 uint ea = EA_AX_PI_8();\r
5381\r
5382 m68ki_write_8(ea, res);\r
5383\r
5384 FLAG_N = NFLAG_8(res);\r
5385 FLAG_Z = res;\r
5386 FLAG_V = VFLAG_CLEAR;\r
5387 FLAG_C = CFLAG_CLEAR;\r
5388}\r
5389\r
5390\r
5391void m68k_op_move_8_pi7_ai(void)\r
5392{\r
5393 uint res = OPER_AY_AI_8();\r
5394 uint ea = EA_A7_PI_8();\r
5395\r
5396 m68ki_write_8(ea, res);\r
5397\r
5398 FLAG_N = NFLAG_8(res);\r
5399 FLAG_Z = res;\r
5400 FLAG_V = VFLAG_CLEAR;\r
5401 FLAG_C = CFLAG_CLEAR;\r
5402}\r
5403\r
5404\r
5405void m68k_op_move_8_pi7_pi(void)\r
5406{\r
5407 uint res = OPER_AY_PI_8();\r
5408 uint ea = EA_A7_PI_8();\r
5409\r
5410 m68ki_write_8(ea, res);\r
5411\r
5412 FLAG_N = NFLAG_8(res);\r
5413 FLAG_Z = res;\r
5414 FLAG_V = VFLAG_CLEAR;\r
5415 FLAG_C = CFLAG_CLEAR;\r
5416}\r
5417\r
5418\r
5419void m68k_op_move_8_pi7_pi7(void)\r
5420{\r
5421 uint res = OPER_A7_PI_8();\r
5422 uint ea = EA_A7_PI_8();\r
5423\r
5424 m68ki_write_8(ea, res);\r
5425\r
5426 FLAG_N = NFLAG_8(res);\r
5427 FLAG_Z = res;\r
5428 FLAG_V = VFLAG_CLEAR;\r
5429 FLAG_C = CFLAG_CLEAR;\r
5430}\r
5431\r
5432\r
5433void m68k_op_move_8_pi7_pd(void)\r
5434{\r
5435 uint res = OPER_AY_PD_8();\r
5436 uint ea = EA_A7_PI_8();\r
5437\r
5438 m68ki_write_8(ea, res);\r
5439\r
5440 FLAG_N = NFLAG_8(res);\r
5441 FLAG_Z = res;\r
5442 FLAG_V = VFLAG_CLEAR;\r
5443 FLAG_C = CFLAG_CLEAR;\r
5444}\r
5445\r
5446\r
5447void m68k_op_move_8_pi7_pd7(void)\r
5448{\r
5449 uint res = OPER_A7_PD_8();\r
5450 uint ea = EA_A7_PI_8();\r
5451\r
5452 m68ki_write_8(ea, res);\r
5453\r
5454 FLAG_N = NFLAG_8(res);\r
5455 FLAG_Z = res;\r
5456 FLAG_V = VFLAG_CLEAR;\r
5457 FLAG_C = CFLAG_CLEAR;\r
5458}\r
5459\r
5460\r
5461void m68k_op_move_8_pi7_di(void)\r
5462{\r
5463 uint res = OPER_AY_DI_8();\r
5464 uint ea = EA_A7_PI_8();\r
5465\r
5466 m68ki_write_8(ea, res);\r
5467\r
5468 FLAG_N = NFLAG_8(res);\r
5469 FLAG_Z = res;\r
5470 FLAG_V = VFLAG_CLEAR;\r
5471 FLAG_C = CFLAG_CLEAR;\r
5472}\r
5473\r
5474\r
5475void m68k_op_move_8_pi7_ix(void)\r
5476{\r
5477 uint res = OPER_AY_IX_8();\r
5478 uint ea = EA_A7_PI_8();\r
5479\r
5480 m68ki_write_8(ea, res);\r
5481\r
5482 FLAG_N = NFLAG_8(res);\r
5483 FLAG_Z = res;\r
5484 FLAG_V = VFLAG_CLEAR;\r
5485 FLAG_C = CFLAG_CLEAR;\r
5486}\r
5487\r
5488\r
5489void m68k_op_move_8_pi7_aw(void)\r
5490{\r
5491 uint res = OPER_AW_8();\r
5492 uint ea = EA_A7_PI_8();\r
5493\r
5494 m68ki_write_8(ea, res);\r
5495\r
5496 FLAG_N = NFLAG_8(res);\r
5497 FLAG_Z = res;\r
5498 FLAG_V = VFLAG_CLEAR;\r
5499 FLAG_C = CFLAG_CLEAR;\r
5500}\r
5501\r
5502\r
5503void m68k_op_move_8_pi7_al(void)\r
5504{\r
5505 uint res = OPER_AL_8();\r
5506 uint ea = EA_A7_PI_8();\r
5507\r
5508 m68ki_write_8(ea, res);\r
5509\r
5510 FLAG_N = NFLAG_8(res);\r
5511 FLAG_Z = res;\r
5512 FLAG_V = VFLAG_CLEAR;\r
5513 FLAG_C = CFLAG_CLEAR;\r
5514}\r
5515\r
5516\r
5517void m68k_op_move_8_pi7_pcdi(void)\r
5518{\r
5519 uint res = OPER_PCDI_8();\r
5520 uint ea = EA_A7_PI_8();\r
5521\r
5522 m68ki_write_8(ea, res);\r
5523\r
5524 FLAG_N = NFLAG_8(res);\r
5525 FLAG_Z = res;\r
5526 FLAG_V = VFLAG_CLEAR;\r
5527 FLAG_C = CFLAG_CLEAR;\r
5528}\r
5529\r
5530\r
5531void m68k_op_move_8_pi7_pcix(void)\r
5532{\r
5533 uint res = OPER_PCIX_8();\r
5534 uint ea = EA_A7_PI_8();\r
5535\r
5536 m68ki_write_8(ea, res);\r
5537\r
5538 FLAG_N = NFLAG_8(res);\r
5539 FLAG_Z = res;\r
5540 FLAG_V = VFLAG_CLEAR;\r
5541 FLAG_C = CFLAG_CLEAR;\r
5542}\r
5543\r
5544\r
5545void m68k_op_move_8_pi7_i(void)\r
5546{\r
5547 uint res = OPER_I_8();\r
5548 uint ea = EA_A7_PI_8();\r
5549\r
5550 m68ki_write_8(ea, res);\r
5551\r
5552 FLAG_N = NFLAG_8(res);\r
5553 FLAG_Z = res;\r
5554 FLAG_V = VFLAG_CLEAR;\r
5555 FLAG_C = CFLAG_CLEAR;\r
5556}\r
5557\r
5558\r
5559void m68k_op_move_8_pi_ai(void)\r
5560{\r
5561 uint res = OPER_AY_AI_8();\r
5562 uint ea = EA_AX_PI_8();\r
5563\r
5564 m68ki_write_8(ea, res);\r
5565\r
5566 FLAG_N = NFLAG_8(res);\r
5567 FLAG_Z = res;\r
5568 FLAG_V = VFLAG_CLEAR;\r
5569 FLAG_C = CFLAG_CLEAR;\r
5570}\r
5571\r
5572\r
5573void m68k_op_move_8_pi_pi(void)\r
5574{\r
5575 uint res = OPER_AY_PI_8();\r
5576 uint ea = EA_AX_PI_8();\r
5577\r
5578 m68ki_write_8(ea, res);\r
5579\r
5580 FLAG_N = NFLAG_8(res);\r
5581 FLAG_Z = res;\r
5582 FLAG_V = VFLAG_CLEAR;\r
5583 FLAG_C = CFLAG_CLEAR;\r
5584}\r
5585\r
5586\r
5587void m68k_op_move_8_pi_pi7(void)\r
5588{\r
5589 uint res = OPER_A7_PI_8();\r
5590 uint ea = EA_AX_PI_8();\r
5591\r
5592 m68ki_write_8(ea, res);\r
5593\r
5594 FLAG_N = NFLAG_8(res);\r
5595 FLAG_Z = res;\r
5596 FLAG_V = VFLAG_CLEAR;\r
5597 FLAG_C = CFLAG_CLEAR;\r
5598}\r
5599\r
5600\r
5601void m68k_op_move_8_pi_pd(void)\r
5602{\r
5603 uint res = OPER_AY_PD_8();\r
5604 uint ea = EA_AX_PI_8();\r
5605\r
5606 m68ki_write_8(ea, res);\r
5607\r
5608 FLAG_N = NFLAG_8(res);\r
5609 FLAG_Z = res;\r
5610 FLAG_V = VFLAG_CLEAR;\r
5611 FLAG_C = CFLAG_CLEAR;\r
5612}\r
5613\r
5614\r
5615void m68k_op_move_8_pi_pd7(void)\r
5616{\r
5617 uint res = OPER_A7_PD_8();\r
5618 uint ea = EA_AX_PI_8();\r
5619\r
5620 m68ki_write_8(ea, res);\r
5621\r
5622 FLAG_N = NFLAG_8(res);\r
5623 FLAG_Z = res;\r
5624 FLAG_V = VFLAG_CLEAR;\r
5625 FLAG_C = CFLAG_CLEAR;\r
5626}\r
5627\r
5628\r
5629void m68k_op_move_8_pi_di(void)\r
5630{\r
5631 uint res = OPER_AY_DI_8();\r
5632 uint ea = EA_AX_PI_8();\r
5633\r
5634 m68ki_write_8(ea, res);\r
5635\r
5636 FLAG_N = NFLAG_8(res);\r
5637 FLAG_Z = res;\r
5638 FLAG_V = VFLAG_CLEAR;\r
5639 FLAG_C = CFLAG_CLEAR;\r
5640}\r
5641\r
5642\r
5643void m68k_op_move_8_pi_ix(void)\r
5644{\r
5645 uint res = OPER_AY_IX_8();\r
5646 uint ea = EA_AX_PI_8();\r
5647\r
5648 m68ki_write_8(ea, res);\r
5649\r
5650 FLAG_N = NFLAG_8(res);\r
5651 FLAG_Z = res;\r
5652 FLAG_V = VFLAG_CLEAR;\r
5653 FLAG_C = CFLAG_CLEAR;\r
5654}\r
5655\r
5656\r
5657void m68k_op_move_8_pi_aw(void)\r
5658{\r
5659 uint res = OPER_AW_8();\r
5660 uint ea = EA_AX_PI_8();\r
5661\r
5662 m68ki_write_8(ea, res);\r
5663\r
5664 FLAG_N = NFLAG_8(res);\r
5665 FLAG_Z = res;\r
5666 FLAG_V = VFLAG_CLEAR;\r
5667 FLAG_C = CFLAG_CLEAR;\r
5668}\r
5669\r
5670\r
5671void m68k_op_move_8_pi_al(void)\r
5672{\r
5673 uint res = OPER_AL_8();\r
5674 uint ea = EA_AX_PI_8();\r
5675\r
5676 m68ki_write_8(ea, res);\r
5677\r
5678 FLAG_N = NFLAG_8(res);\r
5679 FLAG_Z = res;\r
5680 FLAG_V = VFLAG_CLEAR;\r
5681 FLAG_C = CFLAG_CLEAR;\r
5682}\r
5683\r
5684\r
5685void m68k_op_move_8_pi_pcdi(void)\r
5686{\r
5687 uint res = OPER_PCDI_8();\r
5688 uint ea = EA_AX_PI_8();\r
5689\r
5690 m68ki_write_8(ea, res);\r
5691\r
5692 FLAG_N = NFLAG_8(res);\r
5693 FLAG_Z = res;\r
5694 FLAG_V = VFLAG_CLEAR;\r
5695 FLAG_C = CFLAG_CLEAR;\r
5696}\r
5697\r
5698\r
5699void m68k_op_move_8_pi_pcix(void)\r
5700{\r
5701 uint res = OPER_PCIX_8();\r
5702 uint ea = EA_AX_PI_8();\r
5703\r
5704 m68ki_write_8(ea, res);\r
5705\r
5706 FLAG_N = NFLAG_8(res);\r
5707 FLAG_Z = res;\r
5708 FLAG_V = VFLAG_CLEAR;\r
5709 FLAG_C = CFLAG_CLEAR;\r
5710}\r
5711\r
5712\r
5713void m68k_op_move_8_pi_i(void)\r
5714{\r
5715 uint res = OPER_I_8();\r
5716 uint ea = EA_AX_PI_8();\r
5717\r
5718 m68ki_write_8(ea, res);\r
5719\r
5720 FLAG_N = NFLAG_8(res);\r
5721 FLAG_Z = res;\r
5722 FLAG_V = VFLAG_CLEAR;\r
5723 FLAG_C = CFLAG_CLEAR;\r
5724}\r
5725\r
5726\r
5727void m68k_op_move_8_pd7_d(void)\r
5728{\r
5729 uint res = MASK_OUT_ABOVE_8(DY);\r
5730 uint ea = EA_A7_PD_8();\r
5731\r
5732 m68ki_write_8(ea, res);\r
5733\r
5734 FLAG_N = NFLAG_8(res);\r
5735 FLAG_Z = res;\r
5736 FLAG_V = VFLAG_CLEAR;\r
5737 FLAG_C = CFLAG_CLEAR;\r
5738}\r
5739\r
5740\r
5741void m68k_op_move_8_pd_d(void)\r
5742{\r
5743 uint res = MASK_OUT_ABOVE_8(DY);\r
5744 uint ea = EA_AX_PD_8();\r
5745\r
5746 m68ki_write_8(ea, res);\r
5747\r
5748 FLAG_N = NFLAG_8(res);\r
5749 FLAG_Z = res;\r
5750 FLAG_V = VFLAG_CLEAR;\r
5751 FLAG_C = CFLAG_CLEAR;\r
5752}\r
5753\r
5754\r
5755void m68k_op_move_8_pd7_ai(void)\r
5756{\r
5757 uint res = OPER_AY_AI_8();\r
5758 uint ea = EA_A7_PD_8();\r
5759\r
5760 m68ki_write_8(ea, res);\r
5761\r
5762 FLAG_N = NFLAG_8(res);\r
5763 FLAG_Z = res;\r
5764 FLAG_V = VFLAG_CLEAR;\r
5765 FLAG_C = CFLAG_CLEAR;\r
5766}\r
5767\r
5768\r
5769void m68k_op_move_8_pd7_pi(void)\r
5770{\r
5771 uint res = OPER_AY_PI_8();\r
5772 uint ea = EA_A7_PD_8();\r
5773\r
5774 m68ki_write_8(ea, res);\r
5775\r
5776 FLAG_N = NFLAG_8(res);\r
5777 FLAG_Z = res;\r
5778 FLAG_V = VFLAG_CLEAR;\r
5779 FLAG_C = CFLAG_CLEAR;\r
5780}\r
5781\r
5782\r
5783void m68k_op_move_8_pd7_pi7(void)\r
5784{\r
5785 uint res = OPER_A7_PI_8();\r
5786 uint ea = EA_A7_PD_8();\r
5787\r
5788 m68ki_write_8(ea, res);\r
5789\r
5790 FLAG_N = NFLAG_8(res);\r
5791 FLAG_Z = res;\r
5792 FLAG_V = VFLAG_CLEAR;\r
5793 FLAG_C = CFLAG_CLEAR;\r
5794}\r
5795\r
5796\r
5797void m68k_op_move_8_pd7_pd(void)\r
5798{\r
5799 uint res = OPER_AY_PD_8();\r
5800 uint ea = EA_A7_PD_8();\r
5801\r
5802 m68ki_write_8(ea, res);\r
5803\r
5804 FLAG_N = NFLAG_8(res);\r
5805 FLAG_Z = res;\r
5806 FLAG_V = VFLAG_CLEAR;\r
5807 FLAG_C = CFLAG_CLEAR;\r
5808}\r
5809\r
5810\r
5811void m68k_op_move_8_pd7_pd7(void)\r
5812{\r
5813 uint res = OPER_A7_PD_8();\r
5814 uint ea = EA_A7_PD_8();\r
5815\r
5816 m68ki_write_8(ea, res);\r
5817\r
5818 FLAG_N = NFLAG_8(res);\r
5819 FLAG_Z = res;\r
5820 FLAG_V = VFLAG_CLEAR;\r
5821 FLAG_C = CFLAG_CLEAR;\r
5822}\r
5823\r
5824\r
5825void m68k_op_move_8_pd7_di(void)\r
5826{\r
5827 uint res = OPER_AY_DI_8();\r
5828 uint ea = EA_A7_PD_8();\r
5829\r
5830 m68ki_write_8(ea, res);\r
5831\r
5832 FLAG_N = NFLAG_8(res);\r
5833 FLAG_Z = res;\r
5834 FLAG_V = VFLAG_CLEAR;\r
5835 FLAG_C = CFLAG_CLEAR;\r
5836}\r
5837\r
5838\r
5839void m68k_op_move_8_pd7_ix(void)\r
5840{\r
5841 uint res = OPER_AY_IX_8();\r
5842 uint ea = EA_A7_PD_8();\r
5843\r
5844 m68ki_write_8(ea, res);\r
5845\r
5846 FLAG_N = NFLAG_8(res);\r
5847 FLAG_Z = res;\r
5848 FLAG_V = VFLAG_CLEAR;\r
5849 FLAG_C = CFLAG_CLEAR;\r
5850}\r
5851\r
5852\r
5853void m68k_op_move_8_pd7_aw(void)\r
5854{\r
5855 uint res = OPER_AW_8();\r
5856 uint ea = EA_A7_PD_8();\r
5857\r
5858 m68ki_write_8(ea, res);\r
5859\r
5860 FLAG_N = NFLAG_8(res);\r
5861 FLAG_Z = res;\r
5862 FLAG_V = VFLAG_CLEAR;\r
5863 FLAG_C = CFLAG_CLEAR;\r
5864}\r
5865\r
5866\r
5867void m68k_op_move_8_pd7_al(void)\r
5868{\r
5869 uint res = OPER_AL_8();\r
5870 uint ea = EA_A7_PD_8();\r
5871\r
5872 m68ki_write_8(ea, res);\r
5873\r
5874 FLAG_N = NFLAG_8(res);\r
5875 FLAG_Z = res;\r
5876 FLAG_V = VFLAG_CLEAR;\r
5877 FLAG_C = CFLAG_CLEAR;\r
5878}\r
5879\r
5880\r
5881void m68k_op_move_8_pd7_pcdi(void)\r
5882{\r
5883 uint res = OPER_PCDI_8();\r
5884 uint ea = EA_A7_PD_8();\r
5885\r
5886 m68ki_write_8(ea, res);\r
5887\r
5888 FLAG_N = NFLAG_8(res);\r
5889 FLAG_Z = res;\r
5890 FLAG_V = VFLAG_CLEAR;\r
5891 FLAG_C = CFLAG_CLEAR;\r
5892}\r
5893\r
5894\r
5895void m68k_op_move_8_pd7_pcix(void)\r
5896{\r
5897 uint res = OPER_PCIX_8();\r
5898 uint ea = EA_A7_PD_8();\r
5899\r
5900 m68ki_write_8(ea, res);\r
5901\r
5902 FLAG_N = NFLAG_8(res);\r
5903 FLAG_Z = res;\r
5904 FLAG_V = VFLAG_CLEAR;\r
5905 FLAG_C = CFLAG_CLEAR;\r
5906}\r
5907\r
5908\r
5909void m68k_op_move_8_pd7_i(void)\r
5910{\r
5911 uint res = OPER_I_8();\r
5912 uint ea = EA_A7_PD_8();\r
5913\r
5914 m68ki_write_8(ea, res);\r
5915\r
5916 FLAG_N = NFLAG_8(res);\r
5917 FLAG_Z = res;\r
5918 FLAG_V = VFLAG_CLEAR;\r
5919 FLAG_C = CFLAG_CLEAR;\r
5920}\r
5921\r
5922\r
5923void m68k_op_move_8_pd_ai(void)\r
5924{\r
5925 uint res = OPER_AY_AI_8();\r
5926 uint ea = EA_AX_PD_8();\r
5927\r
5928 m68ki_write_8(ea, res);\r
5929\r
5930 FLAG_N = NFLAG_8(res);\r
5931 FLAG_Z = res;\r
5932 FLAG_V = VFLAG_CLEAR;\r
5933 FLAG_C = CFLAG_CLEAR;\r
5934}\r
5935\r
5936\r
5937void m68k_op_move_8_pd_pi(void)\r
5938{\r
5939 uint res = OPER_AY_PI_8();\r
5940 uint ea = EA_AX_PD_8();\r
5941\r
5942 m68ki_write_8(ea, res);\r
5943\r
5944 FLAG_N = NFLAG_8(res);\r
5945 FLAG_Z = res;\r
5946 FLAG_V = VFLAG_CLEAR;\r
5947 FLAG_C = CFLAG_CLEAR;\r
5948}\r
5949\r
5950\r
5951void m68k_op_move_8_pd_pi7(void)\r
5952{\r
5953 uint res = OPER_A7_PI_8();\r
5954 uint ea = EA_AX_PD_8();\r
5955\r
5956 m68ki_write_8(ea, res);\r
5957\r
5958 FLAG_N = NFLAG_8(res);\r
5959 FLAG_Z = res;\r
5960 FLAG_V = VFLAG_CLEAR;\r
5961 FLAG_C = CFLAG_CLEAR;\r
5962}\r
5963\r
5964\r
5965void m68k_op_move_8_pd_pd(void)\r
5966{\r
5967 uint res = OPER_AY_PD_8();\r
5968 uint ea = EA_AX_PD_8();\r
5969\r
5970 m68ki_write_8(ea, res);\r
5971\r
5972 FLAG_N = NFLAG_8(res);\r
5973 FLAG_Z = res;\r
5974 FLAG_V = VFLAG_CLEAR;\r
5975 FLAG_C = CFLAG_CLEAR;\r
5976}\r
5977\r
5978\r
5979void m68k_op_move_8_pd_pd7(void)\r
5980{\r
5981 uint res = OPER_A7_PD_8();\r
5982 uint ea = EA_AX_PD_8();\r
5983\r
5984 m68ki_write_8(ea, res);\r
5985\r
5986 FLAG_N = NFLAG_8(res);\r
5987 FLAG_Z = res;\r
5988 FLAG_V = VFLAG_CLEAR;\r
5989 FLAG_C = CFLAG_CLEAR;\r
5990}\r
5991\r
5992\r
5993void m68k_op_move_8_pd_di(void)\r
5994{\r
5995 uint res = OPER_AY_DI_8();\r
5996 uint ea = EA_AX_PD_8();\r
5997\r
5998 m68ki_write_8(ea, res);\r
5999\r
6000 FLAG_N = NFLAG_8(res);\r
6001 FLAG_Z = res;\r
6002 FLAG_V = VFLAG_CLEAR;\r
6003 FLAG_C = CFLAG_CLEAR;\r
6004}\r
6005\r
6006\r
6007void m68k_op_move_8_pd_ix(void)\r
6008{\r
6009 uint res = OPER_AY_IX_8();\r
6010 uint ea = EA_AX_PD_8();\r
6011\r
6012 m68ki_write_8(ea, res);\r
6013\r
6014 FLAG_N = NFLAG_8(res);\r
6015 FLAG_Z = res;\r
6016 FLAG_V = VFLAG_CLEAR;\r
6017 FLAG_C = CFLAG_CLEAR;\r
6018}\r
6019\r
6020\r
6021void m68k_op_move_8_pd_aw(void)\r
6022{\r
6023 uint res = OPER_AW_8();\r
6024 uint ea = EA_AX_PD_8();\r
6025\r
6026 m68ki_write_8(ea, res);\r
6027\r
6028 FLAG_N = NFLAG_8(res);\r
6029 FLAG_Z = res;\r
6030 FLAG_V = VFLAG_CLEAR;\r
6031 FLAG_C = CFLAG_CLEAR;\r
6032}\r
6033\r
6034\r
6035void m68k_op_move_8_pd_al(void)\r
6036{\r
6037 uint res = OPER_AL_8();\r
6038 uint ea = EA_AX_PD_8();\r
6039\r
6040 m68ki_write_8(ea, res);\r
6041\r
6042 FLAG_N = NFLAG_8(res);\r
6043 FLAG_Z = res;\r
6044 FLAG_V = VFLAG_CLEAR;\r
6045 FLAG_C = CFLAG_CLEAR;\r
6046}\r
6047\r
6048\r
6049void m68k_op_move_8_pd_pcdi(void)\r
6050{\r
6051 uint res = OPER_PCDI_8();\r
6052 uint ea = EA_AX_PD_8();\r
6053\r
6054 m68ki_write_8(ea, res);\r
6055\r
6056 FLAG_N = NFLAG_8(res);\r
6057 FLAG_Z = res;\r
6058 FLAG_V = VFLAG_CLEAR;\r
6059 FLAG_C = CFLAG_CLEAR;\r
6060}\r
6061\r
6062\r
6063void m68k_op_move_8_pd_pcix(void)\r
6064{\r
6065 uint res = OPER_PCIX_8();\r
6066 uint ea = EA_AX_PD_8();\r
6067\r
6068 m68ki_write_8(ea, res);\r
6069\r
6070 FLAG_N = NFLAG_8(res);\r
6071 FLAG_Z = res;\r
6072 FLAG_V = VFLAG_CLEAR;\r
6073 FLAG_C = CFLAG_CLEAR;\r
6074}\r
6075\r
6076\r
6077void m68k_op_move_8_pd_i(void)\r
6078{\r
6079 uint res = OPER_I_8();\r
6080 uint ea = EA_AX_PD_8();\r
6081\r
6082 m68ki_write_8(ea, res);\r
6083\r
6084 FLAG_N = NFLAG_8(res);\r
6085 FLAG_Z = res;\r
6086 FLAG_V = VFLAG_CLEAR;\r
6087 FLAG_C = CFLAG_CLEAR;\r
6088}\r
6089\r
6090\r
6091void m68k_op_move_8_di_d(void)\r
6092{\r
6093 uint res = MASK_OUT_ABOVE_8(DY);\r
6094 uint ea = EA_AX_DI_8();\r
6095\r
6096 m68ki_write_8(ea, res);\r
6097\r
6098 FLAG_N = NFLAG_8(res);\r
6099 FLAG_Z = res;\r
6100 FLAG_V = VFLAG_CLEAR;\r
6101 FLAG_C = CFLAG_CLEAR;\r
6102}\r
6103\r
6104\r
6105void m68k_op_move_8_di_ai(void)\r
6106{\r
6107 uint res = OPER_AY_AI_8();\r
6108 uint ea = EA_AX_DI_8();\r
6109\r
6110 m68ki_write_8(ea, res);\r
6111\r
6112 FLAG_N = NFLAG_8(res);\r
6113 FLAG_Z = res;\r
6114 FLAG_V = VFLAG_CLEAR;\r
6115 FLAG_C = CFLAG_CLEAR;\r
6116}\r
6117\r
6118\r
6119void m68k_op_move_8_di_pi(void)\r
6120{\r
6121 uint res = OPER_AY_PI_8();\r
6122 uint ea = EA_AX_DI_8();\r
6123\r
6124 m68ki_write_8(ea, res);\r
6125\r
6126 FLAG_N = NFLAG_8(res);\r
6127 FLAG_Z = res;\r
6128 FLAG_V = VFLAG_CLEAR;\r
6129 FLAG_C = CFLAG_CLEAR;\r
6130}\r
6131\r
6132\r
6133void m68k_op_move_8_di_pi7(void)\r
6134{\r
6135 uint res = OPER_A7_PI_8();\r
6136 uint ea = EA_AX_DI_8();\r
6137\r
6138 m68ki_write_8(ea, res);\r
6139\r
6140 FLAG_N = NFLAG_8(res);\r
6141 FLAG_Z = res;\r
6142 FLAG_V = VFLAG_CLEAR;\r
6143 FLAG_C = CFLAG_CLEAR;\r
6144}\r
6145\r
6146\r
6147void m68k_op_move_8_di_pd(void)\r
6148{\r
6149 uint res = OPER_AY_PD_8();\r
6150 uint ea = EA_AX_DI_8();\r
6151\r
6152 m68ki_write_8(ea, res);\r
6153\r
6154 FLAG_N = NFLAG_8(res);\r
6155 FLAG_Z = res;\r
6156 FLAG_V = VFLAG_CLEAR;\r
6157 FLAG_C = CFLAG_CLEAR;\r
6158}\r
6159\r
6160\r
6161void m68k_op_move_8_di_pd7(void)\r
6162{\r
6163 uint res = OPER_A7_PD_8();\r
6164 uint ea = EA_AX_DI_8();\r
6165\r
6166 m68ki_write_8(ea, res);\r
6167\r
6168 FLAG_N = NFLAG_8(res);\r
6169 FLAG_Z = res;\r
6170 FLAG_V = VFLAG_CLEAR;\r
6171 FLAG_C = CFLAG_CLEAR;\r
6172}\r
6173\r
6174\r
6175void m68k_op_move_8_di_di(void)\r
6176{\r
6177 uint res = OPER_AY_DI_8();\r
6178 uint ea = EA_AX_DI_8();\r
6179\r
6180 m68ki_write_8(ea, res);\r
6181\r
6182 FLAG_N = NFLAG_8(res);\r
6183 FLAG_Z = res;\r
6184 FLAG_V = VFLAG_CLEAR;\r
6185 FLAG_C = CFLAG_CLEAR;\r
6186}\r
6187\r
6188\r
6189void m68k_op_move_8_di_ix(void)\r
6190{\r
6191 uint res = OPER_AY_IX_8();\r
6192 uint ea = EA_AX_DI_8();\r
6193\r
6194 m68ki_write_8(ea, res);\r
6195\r
6196 FLAG_N = NFLAG_8(res);\r
6197 FLAG_Z = res;\r
6198 FLAG_V = VFLAG_CLEAR;\r
6199 FLAG_C = CFLAG_CLEAR;\r
6200}\r
6201\r
6202\r
6203void m68k_op_move_8_di_aw(void)\r
6204{\r
6205 uint res = OPER_AW_8();\r
6206 uint ea = EA_AX_DI_8();\r
6207\r
6208 m68ki_write_8(ea, res);\r
6209\r
6210 FLAG_N = NFLAG_8(res);\r
6211 FLAG_Z = res;\r
6212 FLAG_V = VFLAG_CLEAR;\r
6213 FLAG_C = CFLAG_CLEAR;\r
6214}\r
6215\r
6216\r
6217void m68k_op_move_8_di_al(void)\r
6218{\r
6219 uint res = OPER_AL_8();\r
6220 uint ea = EA_AX_DI_8();\r
6221\r
6222 m68ki_write_8(ea, res);\r
6223\r
6224 FLAG_N = NFLAG_8(res);\r
6225 FLAG_Z = res;\r
6226 FLAG_V = VFLAG_CLEAR;\r
6227 FLAG_C = CFLAG_CLEAR;\r
6228}\r
6229\r
6230\r
6231void m68k_op_move_8_di_pcdi(void)\r
6232{\r
6233 uint res = OPER_PCDI_8();\r
6234 uint ea = EA_AX_DI_8();\r
6235\r
6236 m68ki_write_8(ea, res);\r
6237\r
6238 FLAG_N = NFLAG_8(res);\r
6239 FLAG_Z = res;\r
6240 FLAG_V = VFLAG_CLEAR;\r
6241 FLAG_C = CFLAG_CLEAR;\r
6242}\r
6243\r
6244\r
6245void m68k_op_move_8_di_pcix(void)\r
6246{\r
6247 uint res = OPER_PCIX_8();\r
6248 uint ea = EA_AX_DI_8();\r
6249\r
6250 m68ki_write_8(ea, res);\r
6251\r
6252 FLAG_N = NFLAG_8(res);\r
6253 FLAG_Z = res;\r
6254 FLAG_V = VFLAG_CLEAR;\r
6255 FLAG_C = CFLAG_CLEAR;\r
6256}\r
6257\r
6258\r
6259void m68k_op_move_8_di_i(void)\r
6260{\r
6261 uint res = OPER_I_8();\r
6262 uint ea = EA_AX_DI_8();\r
6263\r
6264 m68ki_write_8(ea, res);\r
6265\r
6266 FLAG_N = NFLAG_8(res);\r
6267 FLAG_Z = res;\r
6268 FLAG_V = VFLAG_CLEAR;\r
6269 FLAG_C = CFLAG_CLEAR;\r
6270}\r
6271\r
6272\r
6273void m68k_op_move_8_ix_d(void)\r
6274{\r
6275 uint res = MASK_OUT_ABOVE_8(DY);\r
6276 uint ea = EA_AX_IX_8();\r
6277\r
6278 m68ki_write_8(ea, res);\r
6279\r
6280 FLAG_N = NFLAG_8(res);\r
6281 FLAG_Z = res;\r
6282 FLAG_V = VFLAG_CLEAR;\r
6283 FLAG_C = CFLAG_CLEAR;\r
6284}\r
6285\r
6286\r
6287void m68k_op_move_8_ix_ai(void)\r
6288{\r
6289 uint res = OPER_AY_AI_8();\r
6290 uint ea = EA_AX_IX_8();\r
6291\r
6292 m68ki_write_8(ea, res);\r
6293\r
6294 FLAG_N = NFLAG_8(res);\r
6295 FLAG_Z = res;\r
6296 FLAG_V = VFLAG_CLEAR;\r
6297 FLAG_C = CFLAG_CLEAR;\r
6298}\r
6299\r
6300\r
6301void m68k_op_move_8_ix_pi(void)\r
6302{\r
6303 uint res = OPER_AY_PI_8();\r
6304 uint ea = EA_AX_IX_8();\r
6305\r
6306 m68ki_write_8(ea, res);\r
6307\r
6308 FLAG_N = NFLAG_8(res);\r
6309 FLAG_Z = res;\r
6310 FLAG_V = VFLAG_CLEAR;\r
6311 FLAG_C = CFLAG_CLEAR;\r
6312}\r
6313\r
6314\r
6315void m68k_op_move_8_ix_pi7(void)\r
6316{\r
6317 uint res = OPER_A7_PI_8();\r
6318 uint ea = EA_AX_IX_8();\r
6319\r
6320 m68ki_write_8(ea, res);\r
6321\r
6322 FLAG_N = NFLAG_8(res);\r
6323 FLAG_Z = res;\r
6324 FLAG_V = VFLAG_CLEAR;\r
6325 FLAG_C = CFLAG_CLEAR;\r
6326}\r
6327\r
6328\r
6329void m68k_op_move_8_ix_pd(void)\r
6330{\r
6331 uint res = OPER_AY_PD_8();\r
6332 uint ea = EA_AX_IX_8();\r
6333\r
6334 m68ki_write_8(ea, res);\r
6335\r
6336 FLAG_N = NFLAG_8(res);\r
6337 FLAG_Z = res;\r
6338 FLAG_V = VFLAG_CLEAR;\r
6339 FLAG_C = CFLAG_CLEAR;\r
6340}\r
6341\r
6342\r
6343void m68k_op_move_8_ix_pd7(void)\r
6344{\r
6345 uint res = OPER_A7_PD_8();\r
6346 uint ea = EA_AX_IX_8();\r
6347\r
6348 m68ki_write_8(ea, res);\r
6349\r
6350 FLAG_N = NFLAG_8(res);\r
6351 FLAG_Z = res;\r
6352 FLAG_V = VFLAG_CLEAR;\r
6353 FLAG_C = CFLAG_CLEAR;\r
6354}\r
6355\r
6356\r
6357void m68k_op_move_8_ix_di(void)\r
6358{\r
6359 uint res = OPER_AY_DI_8();\r
6360 uint ea = EA_AX_IX_8();\r
6361\r
6362 m68ki_write_8(ea, res);\r
6363\r
6364 FLAG_N = NFLAG_8(res);\r
6365 FLAG_Z = res;\r
6366 FLAG_V = VFLAG_CLEAR;\r
6367 FLAG_C = CFLAG_CLEAR;\r
6368}\r
6369\r
6370\r
6371void m68k_op_move_8_ix_ix(void)\r
6372{\r
6373 uint res = OPER_AY_IX_8();\r
6374 uint ea = EA_AX_IX_8();\r
6375\r
6376 m68ki_write_8(ea, res);\r
6377\r
6378 FLAG_N = NFLAG_8(res);\r
6379 FLAG_Z = res;\r
6380 FLAG_V = VFLAG_CLEAR;\r
6381 FLAG_C = CFLAG_CLEAR;\r
6382}\r
6383\r
6384\r
6385void m68k_op_move_8_ix_aw(void)\r
6386{\r
6387 uint res = OPER_AW_8();\r
6388 uint ea = EA_AX_IX_8();\r
6389\r
6390 m68ki_write_8(ea, res);\r
6391\r
6392 FLAG_N = NFLAG_8(res);\r
6393 FLAG_Z = res;\r
6394 FLAG_V = VFLAG_CLEAR;\r
6395 FLAG_C = CFLAG_CLEAR;\r
6396}\r
6397\r
6398\r
6399void m68k_op_move_8_ix_al(void)\r
6400{\r
6401 uint res = OPER_AL_8();\r
6402 uint ea = EA_AX_IX_8();\r
6403\r
6404 m68ki_write_8(ea, res);\r
6405\r
6406 FLAG_N = NFLAG_8(res);\r
6407 FLAG_Z = res;\r
6408 FLAG_V = VFLAG_CLEAR;\r
6409 FLAG_C = CFLAG_CLEAR;\r
6410}\r
6411\r
6412\r
6413void m68k_op_move_8_ix_pcdi(void)\r
6414{\r
6415 uint res = OPER_PCDI_8();\r
6416 uint ea = EA_AX_IX_8();\r
6417\r
6418 m68ki_write_8(ea, res);\r
6419\r
6420 FLAG_N = NFLAG_8(res);\r
6421 FLAG_Z = res;\r
6422 FLAG_V = VFLAG_CLEAR;\r
6423 FLAG_C = CFLAG_CLEAR;\r
6424}\r
6425\r
6426\r
6427void m68k_op_move_8_ix_pcix(void)\r
6428{\r
6429 uint res = OPER_PCIX_8();\r
6430 uint ea = EA_AX_IX_8();\r
6431\r
6432 m68ki_write_8(ea, res);\r
6433\r
6434 FLAG_N = NFLAG_8(res);\r
6435 FLAG_Z = res;\r
6436 FLAG_V = VFLAG_CLEAR;\r
6437 FLAG_C = CFLAG_CLEAR;\r
6438}\r
6439\r
6440\r
6441void m68k_op_move_8_ix_i(void)\r
6442{\r
6443 uint res = OPER_I_8();\r
6444 uint ea = EA_AX_IX_8();\r
6445\r
6446 m68ki_write_8(ea, res);\r
6447\r
6448 FLAG_N = NFLAG_8(res);\r
6449 FLAG_Z = res;\r
6450 FLAG_V = VFLAG_CLEAR;\r
6451 FLAG_C = CFLAG_CLEAR;\r
6452}\r
6453\r
6454\r
6455void m68k_op_move_8_aw_d(void)\r
6456{\r
6457 uint res = MASK_OUT_ABOVE_8(DY);\r
6458 uint ea = EA_AW_8();\r
6459\r
6460 m68ki_write_8(ea, res);\r
6461\r
6462 FLAG_N = NFLAG_8(res);\r
6463 FLAG_Z = res;\r
6464 FLAG_V = VFLAG_CLEAR;\r
6465 FLAG_C = CFLAG_CLEAR;\r
6466}\r
6467\r
6468\r
6469void m68k_op_move_8_aw_ai(void)\r
6470{\r
6471 uint res = OPER_AY_AI_8();\r
6472 uint ea = EA_AW_8();\r
6473\r
6474 m68ki_write_8(ea, res);\r
6475\r
6476 FLAG_N = NFLAG_8(res);\r
6477 FLAG_Z = res;\r
6478 FLAG_V = VFLAG_CLEAR;\r
6479 FLAG_C = CFLAG_CLEAR;\r
6480}\r
6481\r
6482\r
6483void m68k_op_move_8_aw_pi(void)\r
6484{\r
6485 uint res = OPER_AY_PI_8();\r
6486 uint ea = EA_AW_8();\r
6487\r
6488 m68ki_write_8(ea, res);\r
6489\r
6490 FLAG_N = NFLAG_8(res);\r
6491 FLAG_Z = res;\r
6492 FLAG_V = VFLAG_CLEAR;\r
6493 FLAG_C = CFLAG_CLEAR;\r
6494}\r
6495\r
6496\r
6497void m68k_op_move_8_aw_pi7(void)\r
6498{\r
6499 uint res = OPER_A7_PI_8();\r
6500 uint ea = EA_AW_8();\r
6501\r
6502 m68ki_write_8(ea, res);\r
6503\r
6504 FLAG_N = NFLAG_8(res);\r
6505 FLAG_Z = res;\r
6506 FLAG_V = VFLAG_CLEAR;\r
6507 FLAG_C = CFLAG_CLEAR;\r
6508}\r
6509\r
6510\r
6511void m68k_op_move_8_aw_pd(void)\r
6512{\r
6513 uint res = OPER_AY_PD_8();\r
6514 uint ea = EA_AW_8();\r
6515\r
6516 m68ki_write_8(ea, res);\r
6517\r
6518 FLAG_N = NFLAG_8(res);\r
6519 FLAG_Z = res;\r
6520 FLAG_V = VFLAG_CLEAR;\r
6521 FLAG_C = CFLAG_CLEAR;\r
6522}\r
6523\r
6524\r
6525void m68k_op_move_8_aw_pd7(void)\r
6526{\r
6527 uint res = OPER_A7_PD_8();\r
6528 uint ea = EA_AW_8();\r
6529\r
6530 m68ki_write_8(ea, res);\r
6531\r
6532 FLAG_N = NFLAG_8(res);\r
6533 FLAG_Z = res;\r
6534 FLAG_V = VFLAG_CLEAR;\r
6535 FLAG_C = CFLAG_CLEAR;\r
6536}\r
6537\r
6538\r
6539void m68k_op_move_8_aw_di(void)\r
6540{\r
6541 uint res = OPER_AY_DI_8();\r
6542 uint ea = EA_AW_8();\r
6543\r
6544 m68ki_write_8(ea, res);\r
6545\r
6546 FLAG_N = NFLAG_8(res);\r
6547 FLAG_Z = res;\r
6548 FLAG_V = VFLAG_CLEAR;\r
6549 FLAG_C = CFLAG_CLEAR;\r
6550}\r
6551\r
6552\r
6553void m68k_op_move_8_aw_ix(void)\r
6554{\r
6555 uint res = OPER_AY_IX_8();\r
6556 uint ea = EA_AW_8();\r
6557\r
6558 m68ki_write_8(ea, res);\r
6559\r
6560 FLAG_N = NFLAG_8(res);\r
6561 FLAG_Z = res;\r
6562 FLAG_V = VFLAG_CLEAR;\r
6563 FLAG_C = CFLAG_CLEAR;\r
6564}\r
6565\r
6566\r
6567void m68k_op_move_8_aw_aw(void)\r
6568{\r
6569 uint res = OPER_AW_8();\r
6570 uint ea = EA_AW_8();\r
6571\r
6572 m68ki_write_8(ea, res);\r
6573\r
6574 FLAG_N = NFLAG_8(res);\r
6575 FLAG_Z = res;\r
6576 FLAG_V = VFLAG_CLEAR;\r
6577 FLAG_C = CFLAG_CLEAR;\r
6578}\r
6579\r
6580\r
6581void m68k_op_move_8_aw_al(void)\r
6582{\r
6583 uint res = OPER_AL_8();\r
6584 uint ea = EA_AW_8();\r
6585\r
6586 m68ki_write_8(ea, res);\r
6587\r
6588 FLAG_N = NFLAG_8(res);\r
6589 FLAG_Z = res;\r
6590 FLAG_V = VFLAG_CLEAR;\r
6591 FLAG_C = CFLAG_CLEAR;\r
6592}\r
6593\r
6594\r
6595void m68k_op_move_8_aw_pcdi(void)\r
6596{\r
6597 uint res = OPER_PCDI_8();\r
6598 uint ea = EA_AW_8();\r
6599\r
6600 m68ki_write_8(ea, res);\r
6601\r
6602 FLAG_N = NFLAG_8(res);\r
6603 FLAG_Z = res;\r
6604 FLAG_V = VFLAG_CLEAR;\r
6605 FLAG_C = CFLAG_CLEAR;\r
6606}\r
6607\r
6608\r
6609void m68k_op_move_8_aw_pcix(void)\r
6610{\r
6611 uint res = OPER_PCIX_8();\r
6612 uint ea = EA_AW_8();\r
6613\r
6614 m68ki_write_8(ea, res);\r
6615\r
6616 FLAG_N = NFLAG_8(res);\r
6617 FLAG_Z = res;\r
6618 FLAG_V = VFLAG_CLEAR;\r
6619 FLAG_C = CFLAG_CLEAR;\r
6620}\r
6621\r
6622\r
6623void m68k_op_move_8_aw_i(void)\r
6624{\r
6625 uint res = OPER_I_8();\r
6626 uint ea = EA_AW_8();\r
6627\r
6628 m68ki_write_8(ea, res);\r
6629\r
6630 FLAG_N = NFLAG_8(res);\r
6631 FLAG_Z = res;\r
6632 FLAG_V = VFLAG_CLEAR;\r
6633 FLAG_C = CFLAG_CLEAR;\r
6634}\r
6635\r
6636\r
6637void m68k_op_move_8_al_d(void)\r
6638{\r
6639 uint res = MASK_OUT_ABOVE_8(DY);\r
6640 uint ea = EA_AL_8();\r
6641\r
6642 m68ki_write_8(ea, res);\r
6643\r
6644 FLAG_N = NFLAG_8(res);\r
6645 FLAG_Z = res;\r
6646 FLAG_V = VFLAG_CLEAR;\r
6647 FLAG_C = CFLAG_CLEAR;\r
6648}\r
6649\r
6650\r
6651void m68k_op_move_8_al_ai(void)\r
6652{\r
6653 uint res = OPER_AY_AI_8();\r
6654 uint ea = EA_AL_8();\r
6655\r
6656 m68ki_write_8(ea, res);\r
6657\r
6658 FLAG_N = NFLAG_8(res);\r
6659 FLAG_Z = res;\r
6660 FLAG_V = VFLAG_CLEAR;\r
6661 FLAG_C = CFLAG_CLEAR;\r
6662}\r
6663\r
6664\r
6665void m68k_op_move_8_al_pi(void)\r
6666{\r
6667 uint res = OPER_AY_PI_8();\r
6668 uint ea = EA_AL_8();\r
6669\r
6670 m68ki_write_8(ea, res);\r
6671\r
6672 FLAG_N = NFLAG_8(res);\r
6673 FLAG_Z = res;\r
6674 FLAG_V = VFLAG_CLEAR;\r
6675 FLAG_C = CFLAG_CLEAR;\r
6676}\r
6677\r
6678\r
6679void m68k_op_move_8_al_pi7(void)\r
6680{\r
6681 uint res = OPER_A7_PI_8();\r
6682 uint ea = EA_AL_8();\r
6683\r
6684 m68ki_write_8(ea, res);\r
6685\r
6686 FLAG_N = NFLAG_8(res);\r
6687 FLAG_Z = res;\r
6688 FLAG_V = VFLAG_CLEAR;\r
6689 FLAG_C = CFLAG_CLEAR;\r
6690}\r
6691\r
6692\r
6693void m68k_op_move_8_al_pd(void)\r
6694{\r
6695 uint res = OPER_AY_PD_8();\r
6696 uint ea = EA_AL_8();\r
6697\r
6698 m68ki_write_8(ea, res);\r
6699\r
6700 FLAG_N = NFLAG_8(res);\r
6701 FLAG_Z = res;\r
6702 FLAG_V = VFLAG_CLEAR;\r
6703 FLAG_C = CFLAG_CLEAR;\r
6704}\r
6705\r
6706\r
6707void m68k_op_move_8_al_pd7(void)\r
6708{\r
6709 uint res = OPER_A7_PD_8();\r
6710 uint ea = EA_AL_8();\r
6711\r
6712 m68ki_write_8(ea, res);\r
6713\r
6714 FLAG_N = NFLAG_8(res);\r
6715 FLAG_Z = res;\r
6716 FLAG_V = VFLAG_CLEAR;\r
6717 FLAG_C = CFLAG_CLEAR;\r
6718}\r
6719\r
6720\r
6721void m68k_op_move_8_al_di(void)\r
6722{\r
6723 uint res = OPER_AY_DI_8();\r
6724 uint ea = EA_AL_8();\r
6725\r
6726 m68ki_write_8(ea, res);\r
6727\r
6728 FLAG_N = NFLAG_8(res);\r
6729 FLAG_Z = res;\r
6730 FLAG_V = VFLAG_CLEAR;\r
6731 FLAG_C = CFLAG_CLEAR;\r
6732}\r
6733\r
6734\r
6735void m68k_op_move_8_al_ix(void)\r
6736{\r
6737 uint res = OPER_AY_IX_8();\r
6738 uint ea = EA_AL_8();\r
6739\r
6740 m68ki_write_8(ea, res);\r
6741\r
6742 FLAG_N = NFLAG_8(res);\r
6743 FLAG_Z = res;\r
6744 FLAG_V = VFLAG_CLEAR;\r
6745 FLAG_C = CFLAG_CLEAR;\r
6746}\r
6747\r
6748\r
6749void m68k_op_move_8_al_aw(void)\r
6750{\r
6751 uint res = OPER_AW_8();\r
6752 uint ea = EA_AL_8();\r
6753\r
6754 m68ki_write_8(ea, res);\r
6755\r
6756 FLAG_N = NFLAG_8(res);\r
6757 FLAG_Z = res;\r
6758 FLAG_V = VFLAG_CLEAR;\r
6759 FLAG_C = CFLAG_CLEAR;\r
6760}\r
6761\r
6762\r
6763void m68k_op_move_8_al_al(void)\r
6764{\r
6765 uint res = OPER_AL_8();\r
6766 uint ea = EA_AL_8();\r
6767\r
6768 m68ki_write_8(ea, res);\r
6769\r
6770 FLAG_N = NFLAG_8(res);\r
6771 FLAG_Z = res;\r
6772 FLAG_V = VFLAG_CLEAR;\r
6773 FLAG_C = CFLAG_CLEAR;\r
6774}\r
6775\r
6776\r
6777void m68k_op_move_8_al_pcdi(void)\r
6778{\r
6779 uint res = OPER_PCDI_8();\r
6780 uint ea = EA_AL_8();\r
6781\r
6782 m68ki_write_8(ea, res);\r
6783\r
6784 FLAG_N = NFLAG_8(res);\r
6785 FLAG_Z = res;\r
6786 FLAG_V = VFLAG_CLEAR;\r
6787 FLAG_C = CFLAG_CLEAR;\r
6788}\r
6789\r
6790\r
6791void m68k_op_move_8_al_pcix(void)\r
6792{\r
6793 uint res = OPER_PCIX_8();\r
6794 uint ea = EA_AL_8();\r
6795\r
6796 m68ki_write_8(ea, res);\r
6797\r
6798 FLAG_N = NFLAG_8(res);\r
6799 FLAG_Z = res;\r
6800 FLAG_V = VFLAG_CLEAR;\r
6801 FLAG_C = CFLAG_CLEAR;\r
6802}\r
6803\r
6804\r
6805void m68k_op_move_8_al_i(void)\r
6806{\r
6807 uint res = OPER_I_8();\r
6808 uint ea = EA_AL_8();\r
6809\r
6810 m68ki_write_8(ea, res);\r
6811\r
6812 FLAG_N = NFLAG_8(res);\r
6813 FLAG_Z = res;\r
6814 FLAG_V = VFLAG_CLEAR;\r
6815 FLAG_C = CFLAG_CLEAR;\r
6816}\r
6817\r
6818\r
6819void m68k_op_move_16_d_d(void)\r
6820{\r
6821 uint res = MASK_OUT_ABOVE_16(DY);\r
6822 uint* r_dst = &DX;\r
6823\r
6824 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6825\r
6826 FLAG_N = NFLAG_16(res);\r
6827 FLAG_Z = res;\r
6828 FLAG_V = VFLAG_CLEAR;\r
6829 FLAG_C = CFLAG_CLEAR;\r
6830}\r
6831\r
6832\r
6833void m68k_op_move_16_d_a(void)\r
6834{\r
6835 uint res = MASK_OUT_ABOVE_16(AY);\r
6836 uint* r_dst = &DX;\r
6837\r
6838 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6839\r
6840 FLAG_N = NFLAG_16(res);\r
6841 FLAG_Z = res;\r
6842 FLAG_V = VFLAG_CLEAR;\r
6843 FLAG_C = CFLAG_CLEAR;\r
6844}\r
6845\r
6846\r
6847void m68k_op_move_16_d_ai(void)\r
6848{\r
6849 uint res = OPER_AY_AI_16();\r
6850 uint* r_dst = &DX;\r
6851\r
6852 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6853\r
6854 FLAG_N = NFLAG_16(res);\r
6855 FLAG_Z = res;\r
6856 FLAG_V = VFLAG_CLEAR;\r
6857 FLAG_C = CFLAG_CLEAR;\r
6858}\r
6859\r
6860\r
6861void m68k_op_move_16_d_pi(void)\r
6862{\r
6863 uint res = OPER_AY_PI_16();\r
6864 uint* r_dst = &DX;\r
6865\r
6866 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6867\r
6868 FLAG_N = NFLAG_16(res);\r
6869 FLAG_Z = res;\r
6870 FLAG_V = VFLAG_CLEAR;\r
6871 FLAG_C = CFLAG_CLEAR;\r
6872}\r
6873\r
6874\r
6875void m68k_op_move_16_d_pd(void)\r
6876{\r
6877 uint res = OPER_AY_PD_16();\r
6878 uint* r_dst = &DX;\r
6879\r
6880 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6881\r
6882 FLAG_N = NFLAG_16(res);\r
6883 FLAG_Z = res;\r
6884 FLAG_V = VFLAG_CLEAR;\r
6885 FLAG_C = CFLAG_CLEAR;\r
6886}\r
6887\r
6888\r
6889void m68k_op_move_16_d_di(void)\r
6890{\r
6891 uint res = OPER_AY_DI_16();\r
6892 uint* r_dst = &DX;\r
6893\r
6894 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6895\r
6896 FLAG_N = NFLAG_16(res);\r
6897 FLAG_Z = res;\r
6898 FLAG_V = VFLAG_CLEAR;\r
6899 FLAG_C = CFLAG_CLEAR;\r
6900}\r
6901\r
6902\r
6903void m68k_op_move_16_d_ix(void)\r
6904{\r
6905 uint res = OPER_AY_IX_16();\r
6906 uint* r_dst = &DX;\r
6907\r
6908 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6909\r
6910 FLAG_N = NFLAG_16(res);\r
6911 FLAG_Z = res;\r
6912 FLAG_V = VFLAG_CLEAR;\r
6913 FLAG_C = CFLAG_CLEAR;\r
6914}\r
6915\r
6916\r
6917void m68k_op_move_16_d_aw(void)\r
6918{\r
6919 uint res = OPER_AW_16();\r
6920 uint* r_dst = &DX;\r
6921\r
6922 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6923\r
6924 FLAG_N = NFLAG_16(res);\r
6925 FLAG_Z = res;\r
6926 FLAG_V = VFLAG_CLEAR;\r
6927 FLAG_C = CFLAG_CLEAR;\r
6928}\r
6929\r
6930\r
6931void m68k_op_move_16_d_al(void)\r
6932{\r
6933 uint res = OPER_AL_16();\r
6934 uint* r_dst = &DX;\r
6935\r
6936 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6937\r
6938 FLAG_N = NFLAG_16(res);\r
6939 FLAG_Z = res;\r
6940 FLAG_V = VFLAG_CLEAR;\r
6941 FLAG_C = CFLAG_CLEAR;\r
6942}\r
6943\r
6944\r
6945void m68k_op_move_16_d_pcdi(void)\r
6946{\r
6947 uint res = OPER_PCDI_16();\r
6948 uint* r_dst = &DX;\r
6949\r
6950 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6951\r
6952 FLAG_N = NFLAG_16(res);\r
6953 FLAG_Z = res;\r
6954 FLAG_V = VFLAG_CLEAR;\r
6955 FLAG_C = CFLAG_CLEAR;\r
6956}\r
6957\r
6958\r
6959void m68k_op_move_16_d_pcix(void)\r
6960{\r
6961 uint res = OPER_PCIX_16();\r
6962 uint* r_dst = &DX;\r
6963\r
6964 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6965\r
6966 FLAG_N = NFLAG_16(res);\r
6967 FLAG_Z = res;\r
6968 FLAG_V = VFLAG_CLEAR;\r
6969 FLAG_C = CFLAG_CLEAR;\r
6970}\r
6971\r
6972\r
6973void m68k_op_move_16_d_i(void)\r
6974{\r
6975 uint res = OPER_I_16();\r
6976 uint* r_dst = &DX;\r
6977\r
6978 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;\r
6979\r
6980 FLAG_N = NFLAG_16(res);\r
6981 FLAG_Z = res;\r
6982 FLAG_V = VFLAG_CLEAR;\r
6983 FLAG_C = CFLAG_CLEAR;\r
6984}\r
6985\r
6986\r
6987void m68k_op_move_16_ai_d(void)\r
6988{\r
6989 uint res = MASK_OUT_ABOVE_16(DY);\r
6990 uint ea = EA_AX_AI_16();\r
6991\r
6992 m68ki_write_16(ea, res);\r
6993\r
6994 FLAG_N = NFLAG_16(res);\r
6995 FLAG_Z = res;\r
6996 FLAG_V = VFLAG_CLEAR;\r
6997 FLAG_C = CFLAG_CLEAR;\r
6998}\r
6999\r
7000\r
7001void m68k_op_move_16_ai_a(void)\r
7002{\r
7003 uint res = MASK_OUT_ABOVE_16(AY);\r
7004 uint ea = EA_AX_AI_16();\r
7005\r
7006 m68ki_write_16(ea, res);\r
7007\r
7008 FLAG_N = NFLAG_16(res);\r
7009 FLAG_Z = res;\r
7010 FLAG_V = VFLAG_CLEAR;\r
7011 FLAG_C = CFLAG_CLEAR;\r
7012}\r
7013\r
7014\r
7015void m68k_op_move_16_ai_ai(void)\r
7016{\r
7017 uint res = OPER_AY_AI_16();\r
7018 uint ea = EA_AX_AI_16();\r
7019\r
7020 m68ki_write_16(ea, res);\r
7021\r
7022 FLAG_N = NFLAG_16(res);\r
7023 FLAG_Z = res;\r
7024 FLAG_V = VFLAG_CLEAR;\r
7025 FLAG_C = CFLAG_CLEAR;\r
7026}\r
7027\r
7028\r
7029void m68k_op_move_16_ai_pi(void)\r
7030{\r
7031 uint res = OPER_AY_PI_16();\r
7032 uint ea = EA_AX_AI_16();\r
7033\r
7034 m68ki_write_16(ea, res);\r
7035\r
7036 FLAG_N = NFLAG_16(res);\r
7037 FLAG_Z = res;\r
7038 FLAG_V = VFLAG_CLEAR;\r
7039 FLAG_C = CFLAG_CLEAR;\r
7040}\r
7041\r
7042\r
7043void m68k_op_move_16_ai_pd(void)\r
7044{\r
7045 uint res = OPER_AY_PD_16();\r
7046 uint ea = EA_AX_AI_16();\r
7047\r
7048 m68ki_write_16(ea, res);\r
7049\r
7050 FLAG_N = NFLAG_16(res);\r
7051 FLAG_Z = res;\r
7052 FLAG_V = VFLAG_CLEAR;\r
7053 FLAG_C = CFLAG_CLEAR;\r
7054}\r
7055\r
7056\r
7057void m68k_op_move_16_ai_di(void)\r
7058{\r
7059 uint res = OPER_AY_DI_16();\r
7060 uint ea = EA_AX_AI_16();\r
7061\r
7062 m68ki_write_16(ea, res);\r
7063\r
7064 FLAG_N = NFLAG_16(res);\r
7065 FLAG_Z = res;\r
7066 FLAG_V = VFLAG_CLEAR;\r
7067 FLAG_C = CFLAG_CLEAR;\r
7068}\r
7069\r
7070\r
7071void m68k_op_move_16_ai_ix(void)\r
7072{\r
7073 uint res = OPER_AY_IX_16();\r
7074 uint ea = EA_AX_AI_16();\r
7075\r
7076 m68ki_write_16(ea, res);\r
7077\r
7078 FLAG_N = NFLAG_16(res);\r
7079 FLAG_Z = res;\r
7080 FLAG_V = VFLAG_CLEAR;\r
7081 FLAG_C = CFLAG_CLEAR;\r
7082}\r
7083\r
7084\r
7085void m68k_op_move_16_ai_aw(void)\r
7086{\r
7087 uint res = OPER_AW_16();\r
7088 uint ea = EA_AX_AI_16();\r
7089\r
7090 m68ki_write_16(ea, res);\r
7091\r
7092 FLAG_N = NFLAG_16(res);\r
7093 FLAG_Z = res;\r
7094 FLAG_V = VFLAG_CLEAR;\r
7095 FLAG_C = CFLAG_CLEAR;\r
7096}\r
7097\r
7098\r
7099void m68k_op_move_16_ai_al(void)\r
7100{\r
7101 uint res = OPER_AL_16();\r
7102 uint ea = EA_AX_AI_16();\r
7103\r
7104 m68ki_write_16(ea, res);\r
7105\r
7106 FLAG_N = NFLAG_16(res);\r
7107 FLAG_Z = res;\r
7108 FLAG_V = VFLAG_CLEAR;\r
7109 FLAG_C = CFLAG_CLEAR;\r
7110}\r
7111\r
7112\r
7113void m68k_op_move_16_ai_pcdi(void)\r
7114{\r
7115 uint res = OPER_PCDI_16();\r
7116 uint ea = EA_AX_AI_16();\r
7117\r
7118 m68ki_write_16(ea, res);\r
7119\r
7120 FLAG_N = NFLAG_16(res);\r
7121 FLAG_Z = res;\r
7122 FLAG_V = VFLAG_CLEAR;\r
7123 FLAG_C = CFLAG_CLEAR;\r
7124}\r
7125\r
7126\r
7127void m68k_op_move_16_ai_pcix(void)\r
7128{\r
7129 uint res = OPER_PCIX_16();\r
7130 uint ea = EA_AX_AI_16();\r
7131\r
7132 m68ki_write_16(ea, res);\r
7133\r
7134 FLAG_N = NFLAG_16(res);\r
7135 FLAG_Z = res;\r
7136 FLAG_V = VFLAG_CLEAR;\r
7137 FLAG_C = CFLAG_CLEAR;\r
7138}\r
7139\r
7140\r
7141void m68k_op_move_16_ai_i(void)\r
7142{\r
7143 uint res = OPER_I_16();\r
7144 uint ea = EA_AX_AI_16();\r
7145\r
7146 m68ki_write_16(ea, res);\r
7147\r
7148 FLAG_N = NFLAG_16(res);\r
7149 FLAG_Z = res;\r
7150 FLAG_V = VFLAG_CLEAR;\r
7151 FLAG_C = CFLAG_CLEAR;\r
7152}\r
7153\r
7154\r
7155void m68k_op_move_16_pi_d(void)\r
7156{\r
7157 uint res = MASK_OUT_ABOVE_16(DY);\r
7158 uint ea = EA_AX_PI_16();\r
7159\r
7160 m68ki_write_16(ea, res);\r
7161\r
7162 FLAG_N = NFLAG_16(res);\r
7163 FLAG_Z = res;\r
7164 FLAG_V = VFLAG_CLEAR;\r
7165 FLAG_C = CFLAG_CLEAR;\r
7166}\r
7167\r
7168\r
7169void m68k_op_move_16_pi_a(void)\r
7170{\r
7171 uint res = MASK_OUT_ABOVE_16(AY);\r
7172 uint ea = EA_AX_PI_16();\r
7173\r
7174 m68ki_write_16(ea, res);\r
7175\r
7176 FLAG_N = NFLAG_16(res);\r
7177 FLAG_Z = res;\r
7178 FLAG_V = VFLAG_CLEAR;\r
7179 FLAG_C = CFLAG_CLEAR;\r
7180}\r
7181\r
7182\r
7183void m68k_op_move_16_pi_ai(void)\r
7184{\r
7185 uint res = OPER_AY_AI_16();\r
7186 uint ea = EA_AX_PI_16();\r
7187\r
7188 m68ki_write_16(ea, res);\r
7189\r
7190 FLAG_N = NFLAG_16(res);\r
7191 FLAG_Z = res;\r
7192 FLAG_V = VFLAG_CLEAR;\r
7193 FLAG_C = CFLAG_CLEAR;\r
7194}\r
7195\r
7196\r
7197void m68k_op_move_16_pi_pi(void)\r
7198{\r
7199 uint res = OPER_AY_PI_16();\r
7200 uint ea = EA_AX_PI_16();\r
7201\r
7202 m68ki_write_16(ea, res);\r
7203\r
7204 FLAG_N = NFLAG_16(res);\r
7205 FLAG_Z = res;\r
7206 FLAG_V = VFLAG_CLEAR;\r
7207 FLAG_C = CFLAG_CLEAR;\r
7208}\r
7209\r
7210\r
7211void m68k_op_move_16_pi_pd(void)\r
7212{\r
7213 uint res = OPER_AY_PD_16();\r
7214 uint ea = EA_AX_PI_16();\r
7215\r
7216 m68ki_write_16(ea, res);\r
7217\r
7218 FLAG_N = NFLAG_16(res);\r
7219 FLAG_Z = res;\r
7220 FLAG_V = VFLAG_CLEAR;\r
7221 FLAG_C = CFLAG_CLEAR;\r
7222}\r
7223\r
7224\r
7225void m68k_op_move_16_pi_di(void)\r
7226{\r
7227 uint res = OPER_AY_DI_16();\r
7228 uint ea = EA_AX_PI_16();\r
7229\r
7230 m68ki_write_16(ea, res);\r
7231\r
7232 FLAG_N = NFLAG_16(res);\r
7233 FLAG_Z = res;\r
7234 FLAG_V = VFLAG_CLEAR;\r
7235 FLAG_C = CFLAG_CLEAR;\r
7236}\r
7237\r
7238\r
7239void m68k_op_move_16_pi_ix(void)\r
7240{\r
7241 uint res = OPER_AY_IX_16();\r
7242 uint ea = EA_AX_PI_16();\r
7243\r
7244 m68ki_write_16(ea, res);\r
7245\r
7246 FLAG_N = NFLAG_16(res);\r
7247 FLAG_Z = res;\r
7248 FLAG_V = VFLAG_CLEAR;\r
7249 FLAG_C = CFLAG_CLEAR;\r
7250}\r
7251\r
7252\r
7253void m68k_op_move_16_pi_aw(void)\r
7254{\r
7255 uint res = OPER_AW_16();\r
7256 uint ea = EA_AX_PI_16();\r
7257\r
7258 m68ki_write_16(ea, res);\r
7259\r
7260 FLAG_N = NFLAG_16(res);\r
7261 FLAG_Z = res;\r
7262 FLAG_V = VFLAG_CLEAR;\r
7263 FLAG_C = CFLAG_CLEAR;\r
7264}\r
7265\r
7266\r
7267void m68k_op_move_16_pi_al(void)\r
7268{\r
7269 uint res = OPER_AL_16();\r
7270 uint ea = EA_AX_PI_16();\r
7271\r
7272 m68ki_write_16(ea, res);\r
7273\r
7274 FLAG_N = NFLAG_16(res);\r
7275 FLAG_Z = res;\r
7276 FLAG_V = VFLAG_CLEAR;\r
7277 FLAG_C = CFLAG_CLEAR;\r
7278}\r
7279\r
7280\r
7281void m68k_op_move_16_pi_pcdi(void)\r
7282{\r
7283 uint res = OPER_PCDI_16();\r
7284 uint ea = EA_AX_PI_16();\r
7285\r
7286 m68ki_write_16(ea, res);\r
7287\r
7288 FLAG_N = NFLAG_16(res);\r
7289 FLAG_Z = res;\r
7290 FLAG_V = VFLAG_CLEAR;\r
7291 FLAG_C = CFLAG_CLEAR;\r
7292}\r
7293\r
7294\r
7295void m68k_op_move_16_pi_pcix(void)\r
7296{\r
7297 uint res = OPER_PCIX_16();\r
7298 uint ea = EA_AX_PI_16();\r
7299\r
7300 m68ki_write_16(ea, res);\r
7301\r
7302 FLAG_N = NFLAG_16(res);\r
7303 FLAG_Z = res;\r
7304 FLAG_V = VFLAG_CLEAR;\r
7305 FLAG_C = CFLAG_CLEAR;\r
7306}\r
7307\r
7308\r
7309void m68k_op_move_16_pi_i(void)\r
7310{\r
7311 uint res = OPER_I_16();\r
7312 uint ea = EA_AX_PI_16();\r
7313\r
7314 m68ki_write_16(ea, res);\r
7315\r
7316 FLAG_N = NFLAG_16(res);\r
7317 FLAG_Z = res;\r
7318 FLAG_V = VFLAG_CLEAR;\r
7319 FLAG_C = CFLAG_CLEAR;\r
7320}\r
7321\r
7322\r
7323void m68k_op_move_16_pd_d(void)\r
7324{\r
7325 uint res = MASK_OUT_ABOVE_16(DY);\r
7326 uint ea = EA_AX_PD_16();\r
7327\r
7328 m68ki_write_16(ea, res);\r
7329\r
7330 FLAG_N = NFLAG_16(res);\r
7331 FLAG_Z = res;\r
7332 FLAG_V = VFLAG_CLEAR;\r
7333 FLAG_C = CFLAG_CLEAR;\r
7334}\r
7335\r
7336\r
7337void m68k_op_move_16_pd_a(void)\r
7338{\r
7339 uint res = MASK_OUT_ABOVE_16(AY);\r
7340 uint ea = EA_AX_PD_16();\r
7341\r
7342 m68ki_write_16(ea, res);\r
7343\r
7344 FLAG_N = NFLAG_16(res);\r
7345 FLAG_Z = res;\r
7346 FLAG_V = VFLAG_CLEAR;\r
7347 FLAG_C = CFLAG_CLEAR;\r
7348}\r
7349\r
7350\r
7351void m68k_op_move_16_pd_ai(void)\r
7352{\r
7353 uint res = OPER_AY_AI_16();\r
7354 uint ea = EA_AX_PD_16();\r
7355\r
7356 m68ki_write_16(ea, res);\r
7357\r
7358 FLAG_N = NFLAG_16(res);\r
7359 FLAG_Z = res;\r
7360 FLAG_V = VFLAG_CLEAR;\r
7361 FLAG_C = CFLAG_CLEAR;\r
7362}\r
7363\r
7364\r
7365void m68k_op_move_16_pd_pi(void)\r
7366{\r
7367 uint res = OPER_AY_PI_16();\r
7368 uint ea = EA_AX_PD_16();\r
7369\r
7370 m68ki_write_16(ea, res);\r
7371\r
7372 FLAG_N = NFLAG_16(res);\r
7373 FLAG_Z = res;\r
7374 FLAG_V = VFLAG_CLEAR;\r
7375 FLAG_C = CFLAG_CLEAR;\r
7376}\r
7377\r
7378\r
7379void m68k_op_move_16_pd_pd(void)\r
7380{\r
7381 uint res = OPER_AY_PD_16();\r
7382 uint ea = EA_AX_PD_16();\r
7383\r
7384 m68ki_write_16(ea, res);\r
7385\r
7386 FLAG_N = NFLAG_16(res);\r
7387 FLAG_Z = res;\r
7388 FLAG_V = VFLAG_CLEAR;\r
7389 FLAG_C = CFLAG_CLEAR;\r
7390}\r
7391\r
7392\r
7393void m68k_op_move_16_pd_di(void)\r
7394{\r
7395 uint res = OPER_AY_DI_16();\r
7396 uint ea = EA_AX_PD_16();\r
7397\r
7398 m68ki_write_16(ea, res);\r
7399\r
7400 FLAG_N = NFLAG_16(res);\r
7401 FLAG_Z = res;\r
7402 FLAG_V = VFLAG_CLEAR;\r
7403 FLAG_C = CFLAG_CLEAR;\r
7404}\r
7405\r
7406\r
7407void m68k_op_move_16_pd_ix(void)\r
7408{\r
7409 uint res = OPER_AY_IX_16();\r
7410 uint ea = EA_AX_PD_16();\r
7411\r
7412 m68ki_write_16(ea, res);\r
7413\r
7414 FLAG_N = NFLAG_16(res);\r
7415 FLAG_Z = res;\r
7416 FLAG_V = VFLAG_CLEAR;\r
7417 FLAG_C = CFLAG_CLEAR;\r
7418}\r
7419\r
7420\r
7421void m68k_op_move_16_pd_aw(void)\r
7422{\r
7423 uint res = OPER_AW_16();\r
7424 uint ea = EA_AX_PD_16();\r
7425\r
7426 m68ki_write_16(ea, res);\r
7427\r
7428 FLAG_N = NFLAG_16(res);\r
7429 FLAG_Z = res;\r
7430 FLAG_V = VFLAG_CLEAR;\r
7431 FLAG_C = CFLAG_CLEAR;\r
7432}\r
7433\r
7434\r
7435void m68k_op_move_16_pd_al(void)\r
7436{\r
7437 uint res = OPER_AL_16();\r
7438 uint ea = EA_AX_PD_16();\r
7439\r
7440 m68ki_write_16(ea, res);\r
7441\r
7442 FLAG_N = NFLAG_16(res);\r
7443 FLAG_Z = res;\r
7444 FLAG_V = VFLAG_CLEAR;\r
7445 FLAG_C = CFLAG_CLEAR;\r
7446}\r
7447\r
7448\r
7449void m68k_op_move_16_pd_pcdi(void)\r
7450{\r
7451 uint res = OPER_PCDI_16();\r
7452 uint ea = EA_AX_PD_16();\r
7453\r
7454 m68ki_write_16(ea, res);\r
7455\r
7456 FLAG_N = NFLAG_16(res);\r
7457 FLAG_Z = res;\r
7458 FLAG_V = VFLAG_CLEAR;\r
7459 FLAG_C = CFLAG_CLEAR;\r
7460}\r
7461\r
7462\r
7463void m68k_op_move_16_pd_pcix(void)\r
7464{\r
7465 uint res = OPER_PCIX_16();\r
7466 uint ea = EA_AX_PD_16();\r
7467\r
7468 m68ki_write_16(ea, res);\r
7469\r
7470 FLAG_N = NFLAG_16(res);\r
7471 FLAG_Z = res;\r
7472 FLAG_V = VFLAG_CLEAR;\r
7473 FLAG_C = CFLAG_CLEAR;\r
7474}\r
7475\r
7476\r
7477void m68k_op_move_16_pd_i(void)\r
7478{\r
7479 uint res = OPER_I_16();\r
7480 uint ea = EA_AX_PD_16();\r
7481\r
7482 m68ki_write_16(ea, res);\r
7483\r
7484 FLAG_N = NFLAG_16(res);\r
7485 FLAG_Z = res;\r
7486 FLAG_V = VFLAG_CLEAR;\r
7487 FLAG_C = CFLAG_CLEAR;\r
7488}\r
7489\r
7490\r
7491void m68k_op_move_16_di_d(void)\r
7492{\r
7493 uint res = MASK_OUT_ABOVE_16(DY);\r
7494 uint ea = EA_AX_DI_16();\r
7495\r
7496 m68ki_write_16(ea, res);\r
7497\r
7498 FLAG_N = NFLAG_16(res);\r
7499 FLAG_Z = res;\r
7500 FLAG_V = VFLAG_CLEAR;\r
7501 FLAG_C = CFLAG_CLEAR;\r
7502}\r
7503\r
7504\r
7505void m68k_op_move_16_di_a(void)\r
7506{\r
7507 uint res = MASK_OUT_ABOVE_16(AY);\r
7508 uint ea = EA_AX_DI_16();\r
7509\r
7510 m68ki_write_16(ea, res);\r
7511\r
7512 FLAG_N = NFLAG_16(res);\r
7513 FLAG_Z = res;\r
7514 FLAG_V = VFLAG_CLEAR;\r
7515 FLAG_C = CFLAG_CLEAR;\r
7516}\r
7517\r
7518\r
7519void m68k_op_move_16_di_ai(void)\r
7520{\r
7521 uint res = OPER_AY_AI_16();\r
7522 uint ea = EA_AX_DI_16();\r
7523\r
7524 m68ki_write_16(ea, res);\r
7525\r
7526 FLAG_N = NFLAG_16(res);\r
7527 FLAG_Z = res;\r
7528 FLAG_V = VFLAG_CLEAR;\r
7529 FLAG_C = CFLAG_CLEAR;\r
7530}\r
7531\r
7532\r
7533void m68k_op_move_16_di_pi(void)\r
7534{\r
7535 uint res = OPER_AY_PI_16();\r
7536 uint ea = EA_AX_DI_16();\r
7537\r
7538 m68ki_write_16(ea, res);\r
7539\r
7540 FLAG_N = NFLAG_16(res);\r
7541 FLAG_Z = res;\r
7542 FLAG_V = VFLAG_CLEAR;\r
7543 FLAG_C = CFLAG_CLEAR;\r
7544}\r
7545\r
7546\r
7547void m68k_op_move_16_di_pd(void)\r
7548{\r
7549 uint res = OPER_AY_PD_16();\r
7550 uint ea = EA_AX_DI_16();\r
7551\r
7552 m68ki_write_16(ea, res);\r
7553\r
7554 FLAG_N = NFLAG_16(res);\r
7555 FLAG_Z = res;\r
7556 FLAG_V = VFLAG_CLEAR;\r
7557 FLAG_C = CFLAG_CLEAR;\r
7558}\r
7559\r
7560\r
7561void m68k_op_move_16_di_di(void)\r
7562{\r
7563 uint res = OPER_AY_DI_16();\r
7564 uint ea = EA_AX_DI_16();\r
7565\r
7566 m68ki_write_16(ea, res);\r
7567\r
7568 FLAG_N = NFLAG_16(res);\r
7569 FLAG_Z = res;\r
7570 FLAG_V = VFLAG_CLEAR;\r
7571 FLAG_C = CFLAG_CLEAR;\r
7572}\r
7573\r
7574\r
7575void m68k_op_move_16_di_ix(void)\r
7576{\r
7577 uint res = OPER_AY_IX_16();\r
7578 uint ea = EA_AX_DI_16();\r
7579\r
7580 m68ki_write_16(ea, res);\r
7581\r
7582 FLAG_N = NFLAG_16(res);\r
7583 FLAG_Z = res;\r
7584 FLAG_V = VFLAG_CLEAR;\r
7585 FLAG_C = CFLAG_CLEAR;\r
7586}\r
7587\r
7588\r
7589void m68k_op_move_16_di_aw(void)\r
7590{\r
7591 uint res = OPER_AW_16();\r
7592 uint ea = EA_AX_DI_16();\r
7593\r
7594 m68ki_write_16(ea, res);\r
7595\r
7596 FLAG_N = NFLAG_16(res);\r
7597 FLAG_Z = res;\r
7598 FLAG_V = VFLAG_CLEAR;\r
7599 FLAG_C = CFLAG_CLEAR;\r
7600}\r
7601\r
7602\r
7603void m68k_op_move_16_di_al(void)\r
7604{\r
7605 uint res = OPER_AL_16();\r
7606 uint ea = EA_AX_DI_16();\r
7607\r
7608 m68ki_write_16(ea, res);\r
7609\r
7610 FLAG_N = NFLAG_16(res);\r
7611 FLAG_Z = res;\r
7612 FLAG_V = VFLAG_CLEAR;\r
7613 FLAG_C = CFLAG_CLEAR;\r
7614}\r
7615\r
7616\r
7617void m68k_op_move_16_di_pcdi(void)\r
7618{\r
7619 uint res = OPER_PCDI_16();\r
7620 uint ea = EA_AX_DI_16();\r
7621\r
7622 m68ki_write_16(ea, res);\r
7623\r
7624 FLAG_N = NFLAG_16(res);\r
7625 FLAG_Z = res;\r
7626 FLAG_V = VFLAG_CLEAR;\r
7627 FLAG_C = CFLAG_CLEAR;\r
7628}\r
7629\r
7630\r
7631void m68k_op_move_16_di_pcix(void)\r
7632{\r
7633 uint res = OPER_PCIX_16();\r
7634 uint ea = EA_AX_DI_16();\r
7635\r
7636 m68ki_write_16(ea, res);\r
7637\r
7638 FLAG_N = NFLAG_16(res);\r
7639 FLAG_Z = res;\r
7640 FLAG_V = VFLAG_CLEAR;\r
7641 FLAG_C = CFLAG_CLEAR;\r
7642}\r
7643\r
7644\r
7645void m68k_op_move_16_di_i(void)\r
7646{\r
7647 uint res = OPER_I_16();\r
7648 uint ea = EA_AX_DI_16();\r
7649\r
7650 m68ki_write_16(ea, res);\r
7651\r
7652 FLAG_N = NFLAG_16(res);\r
7653 FLAG_Z = res;\r
7654 FLAG_V = VFLAG_CLEAR;\r
7655 FLAG_C = CFLAG_CLEAR;\r
7656}\r
7657\r
7658\r
7659void m68k_op_move_16_ix_d(void)\r
7660{\r
7661 uint res = MASK_OUT_ABOVE_16(DY);\r
7662 uint ea = EA_AX_IX_16();\r
7663\r
7664 m68ki_write_16(ea, res);\r
7665\r
7666 FLAG_N = NFLAG_16(res);\r
7667 FLAG_Z = res;\r
7668 FLAG_V = VFLAG_CLEAR;\r
7669 FLAG_C = CFLAG_CLEAR;\r
7670}\r
7671\r
7672\r
7673void m68k_op_move_16_ix_a(void)\r
7674{\r
7675 uint res = MASK_OUT_ABOVE_16(AY);\r
7676 uint ea = EA_AX_IX_16();\r
7677\r
7678 m68ki_write_16(ea, res);\r
7679\r
7680 FLAG_N = NFLAG_16(res);\r
7681 FLAG_Z = res;\r
7682 FLAG_V = VFLAG_CLEAR;\r
7683 FLAG_C = CFLAG_CLEAR;\r
7684}\r
7685\r
7686\r
7687void m68k_op_move_16_ix_ai(void)\r
7688{\r
7689 uint res = OPER_AY_AI_16();\r
7690 uint ea = EA_AX_IX_16();\r
7691\r
7692 m68ki_write_16(ea, res);\r
7693\r
7694 FLAG_N = NFLAG_16(res);\r
7695 FLAG_Z = res;\r
7696 FLAG_V = VFLAG_CLEAR;\r
7697 FLAG_C = CFLAG_CLEAR;\r
7698}\r
7699\r
7700\r
7701void m68k_op_move_16_ix_pi(void)\r
7702{\r
7703 uint res = OPER_AY_PI_16();\r
7704 uint ea = EA_AX_IX_16();\r
7705\r
7706 m68ki_write_16(ea, res);\r
7707\r
7708 FLAG_N = NFLAG_16(res);\r
7709 FLAG_Z = res;\r
7710 FLAG_V = VFLAG_CLEAR;\r
7711 FLAG_C = CFLAG_CLEAR;\r
7712}\r
7713\r
7714\r
7715void m68k_op_move_16_ix_pd(void)\r
7716{\r
7717 uint res = OPER_AY_PD_16();\r
7718 uint ea = EA_AX_IX_16();\r
7719\r
7720 m68ki_write_16(ea, res);\r
7721\r
7722 FLAG_N = NFLAG_16(res);\r
7723 FLAG_Z = res;\r
7724 FLAG_V = VFLAG_CLEAR;\r
7725 FLAG_C = CFLAG_CLEAR;\r
7726}\r
7727\r
7728\r
7729void m68k_op_move_16_ix_di(void)\r
7730{\r
7731 uint res = OPER_AY_DI_16();\r
7732 uint ea = EA_AX_IX_16();\r
7733\r
7734 m68ki_write_16(ea, res);\r
7735\r
7736 FLAG_N = NFLAG_16(res);\r
7737 FLAG_Z = res;\r
7738 FLAG_V = VFLAG_CLEAR;\r
7739 FLAG_C = CFLAG_CLEAR;\r
7740}\r
7741\r
7742\r
7743void m68k_op_move_16_ix_ix(void)\r
7744{\r
7745 uint res = OPER_AY_IX_16();\r
7746 uint ea = EA_AX_IX_16();\r
7747\r
7748 m68ki_write_16(ea, res);\r
7749\r
7750 FLAG_N = NFLAG_16(res);\r
7751 FLAG_Z = res;\r
7752 FLAG_V = VFLAG_CLEAR;\r
7753 FLAG_C = CFLAG_CLEAR;\r
7754}\r
7755\r
7756\r
7757void m68k_op_move_16_ix_aw(void)\r
7758{\r
7759 uint res = OPER_AW_16();\r
7760 uint ea = EA_AX_IX_16();\r
7761\r
7762 m68ki_write_16(ea, res);\r
7763\r
7764 FLAG_N = NFLAG_16(res);\r
7765 FLAG_Z = res;\r
7766 FLAG_V = VFLAG_CLEAR;\r
7767 FLAG_C = CFLAG_CLEAR;\r
7768}\r
7769\r
7770\r
7771void m68k_op_move_16_ix_al(void)\r
7772{\r
7773 uint res = OPER_AL_16();\r
7774 uint ea = EA_AX_IX_16();\r
7775\r
7776 m68ki_write_16(ea, res);\r
7777\r
7778 FLAG_N = NFLAG_16(res);\r
7779 FLAG_Z = res;\r
7780 FLAG_V = VFLAG_CLEAR;\r
7781 FLAG_C = CFLAG_CLEAR;\r
7782}\r
7783\r
7784\r
7785void m68k_op_move_16_ix_pcdi(void)\r
7786{\r
7787 uint res = OPER_PCDI_16();\r
7788 uint ea = EA_AX_IX_16();\r
7789\r
7790 m68ki_write_16(ea, res);\r
7791\r
7792 FLAG_N = NFLAG_16(res);\r
7793 FLAG_Z = res;\r
7794 FLAG_V = VFLAG_CLEAR;\r
7795 FLAG_C = CFLAG_CLEAR;\r
7796}\r
7797\r
7798\r
7799void m68k_op_move_16_ix_pcix(void)\r
7800{\r
7801 uint res = OPER_PCIX_16();\r
7802 uint ea = EA_AX_IX_16();\r
7803\r
7804 m68ki_write_16(ea, res);\r
7805\r
7806 FLAG_N = NFLAG_16(res);\r
7807 FLAG_Z = res;\r
7808 FLAG_V = VFLAG_CLEAR;\r
7809 FLAG_C = CFLAG_CLEAR;\r
7810}\r
7811\r
7812\r
7813void m68k_op_move_16_ix_i(void)\r
7814{\r
7815 uint res = OPER_I_16();\r
7816 uint ea = EA_AX_IX_16();\r
7817\r
7818 m68ki_write_16(ea, res);\r
7819\r
7820 FLAG_N = NFLAG_16(res);\r
7821 FLAG_Z = res;\r
7822 FLAG_V = VFLAG_CLEAR;\r
7823 FLAG_C = CFLAG_CLEAR;\r
7824}\r
7825\r
7826\r
7827void m68k_op_move_16_aw_d(void)\r
7828{\r
7829 uint res = MASK_OUT_ABOVE_16(DY);\r
7830 uint ea = EA_AW_16();\r
7831\r
7832 m68ki_write_16(ea, res);\r
7833\r
7834 FLAG_N = NFLAG_16(res);\r
7835 FLAG_Z = res;\r
7836 FLAG_V = VFLAG_CLEAR;\r
7837 FLAG_C = CFLAG_CLEAR;\r
7838}\r
7839\r
7840\r
7841void m68k_op_move_16_aw_a(void)\r
7842{\r
7843 uint res = MASK_OUT_ABOVE_16(AY);\r
7844 uint ea = EA_AW_16();\r
7845\r
7846 m68ki_write_16(ea, res);\r
7847\r
7848 FLAG_N = NFLAG_16(res);\r
7849 FLAG_Z = res;\r
7850 FLAG_V = VFLAG_CLEAR;\r
7851 FLAG_C = CFLAG_CLEAR;\r
7852}\r
7853\r
7854\r
7855void m68k_op_move_16_aw_ai(void)\r
7856{\r
7857 uint res = OPER_AY_AI_16();\r
7858 uint ea = EA_AW_16();\r
7859\r
7860 m68ki_write_16(ea, res);\r
7861\r
7862 FLAG_N = NFLAG_16(res);\r
7863 FLAG_Z = res;\r
7864 FLAG_V = VFLAG_CLEAR;\r
7865 FLAG_C = CFLAG_CLEAR;\r
7866}\r
7867\r
7868\r
7869void m68k_op_move_16_aw_pi(void)\r
7870{\r
7871 uint res = OPER_AY_PI_16();\r
7872 uint ea = EA_AW_16();\r
7873\r
7874 m68ki_write_16(ea, res);\r
7875\r
7876 FLAG_N = NFLAG_16(res);\r
7877 FLAG_Z = res;\r
7878 FLAG_V = VFLAG_CLEAR;\r
7879 FLAG_C = CFLAG_CLEAR;\r
7880}\r
7881\r
7882\r
7883void m68k_op_move_16_aw_pd(void)\r
7884{\r
7885 uint res = OPER_AY_PD_16();\r
7886 uint ea = EA_AW_16();\r
7887\r
7888 m68ki_write_16(ea, res);\r
7889\r
7890 FLAG_N = NFLAG_16(res);\r
7891 FLAG_Z = res;\r
7892 FLAG_V = VFLAG_CLEAR;\r
7893 FLAG_C = CFLAG_CLEAR;\r
7894}\r
7895\r
7896\r
7897void m68k_op_move_16_aw_di(void)\r
7898{\r
7899 uint res = OPER_AY_DI_16();\r
7900 uint ea = EA_AW_16();\r
7901\r
7902 m68ki_write_16(ea, res);\r
7903\r
7904 FLAG_N = NFLAG_16(res);\r
7905 FLAG_Z = res;\r
7906 FLAG_V = VFLAG_CLEAR;\r
7907 FLAG_C = CFLAG_CLEAR;\r
7908}\r
7909\r
7910\r
7911void m68k_op_move_16_aw_ix(void)\r
7912{\r
7913 uint res = OPER_AY_IX_16();\r
7914 uint ea = EA_AW_16();\r
7915\r
7916 m68ki_write_16(ea, res);\r
7917\r
7918 FLAG_N = NFLAG_16(res);\r
7919 FLAG_Z = res;\r
7920 FLAG_V = VFLAG_CLEAR;\r
7921 FLAG_C = CFLAG_CLEAR;\r
7922}\r
7923\r
7924\r
7925void m68k_op_move_16_aw_aw(void)\r
7926{\r
7927 uint res = OPER_AW_16();\r
7928 uint ea = EA_AW_16();\r
7929\r
7930 m68ki_write_16(ea, res);\r
7931\r
7932 FLAG_N = NFLAG_16(res);\r
7933 FLAG_Z = res;\r
7934 FLAG_V = VFLAG_CLEAR;\r
7935 FLAG_C = CFLAG_CLEAR;\r
7936}\r
7937\r
7938\r
7939void m68k_op_move_16_aw_al(void)\r
7940{\r
7941 uint res = OPER_AL_16();\r
7942 uint ea = EA_AW_16();\r
7943\r
7944 m68ki_write_16(ea, res);\r
7945\r
7946 FLAG_N = NFLAG_16(res);\r
7947 FLAG_Z = res;\r
7948 FLAG_V = VFLAG_CLEAR;\r
7949 FLAG_C = CFLAG_CLEAR;\r
7950}\r
7951\r
7952\r
7953void m68k_op_move_16_aw_pcdi(void)\r
7954{\r
7955 uint res = OPER_PCDI_16();\r
7956 uint ea = EA_AW_16();\r
7957\r
7958 m68ki_write_16(ea, res);\r
7959\r
7960 FLAG_N = NFLAG_16(res);\r
7961 FLAG_Z = res;\r
7962 FLAG_V = VFLAG_CLEAR;\r
7963 FLAG_C = CFLAG_CLEAR;\r
7964}\r
7965\r
7966\r
7967void m68k_op_move_16_aw_pcix(void)\r
7968{\r
7969 uint res = OPER_PCIX_16();\r
7970 uint ea = EA_AW_16();\r
7971\r
7972 m68ki_write_16(ea, res);\r
7973\r
7974 FLAG_N = NFLAG_16(res);\r
7975 FLAG_Z = res;\r
7976 FLAG_V = VFLAG_CLEAR;\r
7977 FLAG_C = CFLAG_CLEAR;\r
7978}\r
7979\r
7980\r
7981void m68k_op_move_16_aw_i(void)\r
7982{\r
7983 uint res = OPER_I_16();\r
7984 uint ea = EA_AW_16();\r
7985\r
7986 m68ki_write_16(ea, res);\r
7987\r
7988 FLAG_N = NFLAG_16(res);\r
7989 FLAG_Z = res;\r
7990 FLAG_V = VFLAG_CLEAR;\r
7991 FLAG_C = CFLAG_CLEAR;\r
7992}\r
7993\r
7994\r
7995void m68k_op_move_16_al_d(void)\r
7996{\r
7997 uint res = MASK_OUT_ABOVE_16(DY);\r
7998 uint ea = EA_AL_16();\r
7999\r
8000 m68ki_write_16(ea, res);\r
8001\r
8002 FLAG_N = NFLAG_16(res);\r
8003 FLAG_Z = res;\r
8004 FLAG_V = VFLAG_CLEAR;\r
8005 FLAG_C = CFLAG_CLEAR;\r
8006}\r
8007\r
8008\r
8009void m68k_op_move_16_al_a(void)\r
8010{\r
8011 uint res = MASK_OUT_ABOVE_16(AY);\r
8012 uint ea = EA_AL_16();\r
8013\r
8014 m68ki_write_16(ea, res);\r
8015\r
8016 FLAG_N = NFLAG_16(res);\r
8017 FLAG_Z = res;\r
8018 FLAG_V = VFLAG_CLEAR;\r
8019 FLAG_C = CFLAG_CLEAR;\r
8020}\r
8021\r
8022\r
8023void m68k_op_move_16_al_ai(void)\r
8024{\r
8025 uint res = OPER_AY_AI_16();\r
8026 uint ea = EA_AL_16();\r
8027\r
8028 m68ki_write_16(ea, res);\r
8029\r
8030 FLAG_N = NFLAG_16(res);\r
8031 FLAG_Z = res;\r
8032 FLAG_V = VFLAG_CLEAR;\r
8033 FLAG_C = CFLAG_CLEAR;\r
8034}\r
8035\r
8036\r
8037void m68k_op_move_16_al_pi(void)\r
8038{\r
8039 uint res = OPER_AY_PI_16();\r
8040 uint ea = EA_AL_16();\r
8041\r
8042 m68ki_write_16(ea, res);\r
8043\r
8044 FLAG_N = NFLAG_16(res);\r
8045 FLAG_Z = res;\r
8046 FLAG_V = VFLAG_CLEAR;\r
8047 FLAG_C = CFLAG_CLEAR;\r
8048}\r
8049\r
8050\r
8051void m68k_op_move_16_al_pd(void)\r
8052{\r
8053 uint res = OPER_AY_PD_16();\r
8054 uint ea = EA_AL_16();\r
8055\r
8056 m68ki_write_16(ea, res);\r
8057\r
8058 FLAG_N = NFLAG_16(res);\r
8059 FLAG_Z = res;\r
8060 FLAG_V = VFLAG_CLEAR;\r
8061 FLAG_C = CFLAG_CLEAR;\r
8062}\r
8063\r
8064\r
8065void m68k_op_move_16_al_di(void)\r
8066{\r
8067 uint res = OPER_AY_DI_16();\r
8068 uint ea = EA_AL_16();\r
8069\r
8070 m68ki_write_16(ea, res);\r
8071\r
8072 FLAG_N = NFLAG_16(res);\r
8073 FLAG_Z = res;\r
8074 FLAG_V = VFLAG_CLEAR;\r
8075 FLAG_C = CFLAG_CLEAR;\r
8076}\r
8077\r
8078\r
8079void m68k_op_move_16_al_ix(void)\r
8080{\r
8081 uint res = OPER_AY_IX_16();\r
8082 uint ea = EA_AL_16();\r
8083\r
8084 m68ki_write_16(ea, res);\r
8085\r
8086 FLAG_N = NFLAG_16(res);\r
8087 FLAG_Z = res;\r
8088 FLAG_V = VFLAG_CLEAR;\r
8089 FLAG_C = CFLAG_CLEAR;\r
8090}\r
8091\r
8092\r
8093void m68k_op_move_16_al_aw(void)\r
8094{\r
8095 uint res = OPER_AW_16();\r
8096 uint ea = EA_AL_16();\r
8097\r
8098 m68ki_write_16(ea, res);\r
8099\r
8100 FLAG_N = NFLAG_16(res);\r
8101 FLAG_Z = res;\r
8102 FLAG_V = VFLAG_CLEAR;\r
8103 FLAG_C = CFLAG_CLEAR;\r
8104}\r
8105\r
8106\r
8107void m68k_op_move_16_al_al(void)\r
8108{\r
8109 uint res = OPER_AL_16();\r
8110 uint ea = EA_AL_16();\r
8111\r
8112 m68ki_write_16(ea, res);\r
8113\r
8114 FLAG_N = NFLAG_16(res);\r
8115 FLAG_Z = res;\r
8116 FLAG_V = VFLAG_CLEAR;\r
8117 FLAG_C = CFLAG_CLEAR;\r
8118}\r
8119\r
8120\r
8121void m68k_op_move_16_al_pcdi(void)\r
8122{\r
8123 uint res = OPER_PCDI_16();\r
8124 uint ea = EA_AL_16();\r
8125\r
8126 m68ki_write_16(ea, res);\r
8127\r
8128 FLAG_N = NFLAG_16(res);\r
8129 FLAG_Z = res;\r
8130 FLAG_V = VFLAG_CLEAR;\r
8131 FLAG_C = CFLAG_CLEAR;\r
8132}\r
8133\r
8134\r
8135void m68k_op_move_16_al_pcix(void)\r
8136{\r
8137 uint res = OPER_PCIX_16();\r
8138 uint ea = EA_AL_16();\r
8139\r
8140 m68ki_write_16(ea, res);\r
8141\r
8142 FLAG_N = NFLAG_16(res);\r
8143 FLAG_Z = res;\r
8144 FLAG_V = VFLAG_CLEAR;\r
8145 FLAG_C = CFLAG_CLEAR;\r
8146}\r
8147\r
8148\r
8149void m68k_op_move_16_al_i(void)\r
8150{\r
8151 uint res = OPER_I_16();\r
8152 uint ea = EA_AL_16();\r
8153\r
8154 m68ki_write_16(ea, res);\r
8155\r
8156 FLAG_N = NFLAG_16(res);\r
8157 FLAG_Z = res;\r
8158 FLAG_V = VFLAG_CLEAR;\r
8159 FLAG_C = CFLAG_CLEAR;\r
8160}\r
8161\r
8162\r
8163void m68k_op_move_32_d_d(void)\r
8164{\r
8165 uint res = DY;\r
8166 uint* r_dst = &DX;\r
8167\r
8168 *r_dst = res;\r
8169\r
8170 FLAG_N = NFLAG_32(res);\r
8171 FLAG_Z = res;\r
8172 FLAG_V = VFLAG_CLEAR;\r
8173 FLAG_C = CFLAG_CLEAR;\r
8174}\r
8175\r
8176\r
8177void m68k_op_move_32_d_a(void)\r
8178{\r
8179 uint res = AY;\r
8180 uint* r_dst = &DX;\r
8181\r
8182 *r_dst = res;\r
8183\r
8184 FLAG_N = NFLAG_32(res);\r
8185 FLAG_Z = res;\r
8186 FLAG_V = VFLAG_CLEAR;\r
8187 FLAG_C = CFLAG_CLEAR;\r
8188}\r
8189\r
8190\r
8191void m68k_op_move_32_d_ai(void)\r
8192{\r
8193 uint res = OPER_AY_AI_32();\r
8194 uint* r_dst = &DX;\r
8195\r
8196 *r_dst = res;\r
8197\r
8198 FLAG_N = NFLAG_32(res);\r
8199 FLAG_Z = res;\r
8200 FLAG_V = VFLAG_CLEAR;\r
8201 FLAG_C = CFLAG_CLEAR;\r
8202}\r
8203\r
8204\r
8205void m68k_op_move_32_d_pi(void)\r
8206{\r
8207 uint res = OPER_AY_PI_32();\r
8208 uint* r_dst = &DX;\r
8209\r
8210 *r_dst = res;\r
8211\r
8212 FLAG_N = NFLAG_32(res);\r
8213 FLAG_Z = res;\r
8214 FLAG_V = VFLAG_CLEAR;\r
8215 FLAG_C = CFLAG_CLEAR;\r
8216}\r
8217\r
8218\r
8219void m68k_op_move_32_d_pd(void)\r
8220{\r
8221 uint res = OPER_AY_PD_32();\r
8222 uint* r_dst = &DX;\r
8223\r
8224 *r_dst = res;\r
8225\r
8226 FLAG_N = NFLAG_32(res);\r
8227 FLAG_Z = res;\r
8228 FLAG_V = VFLAG_CLEAR;\r
8229 FLAG_C = CFLAG_CLEAR;\r
8230}\r
8231\r
8232\r
8233void m68k_op_move_32_d_di(void)\r
8234{\r
8235 uint res = OPER_AY_DI_32();\r
8236 uint* r_dst = &DX;\r
8237\r
8238 *r_dst = res;\r
8239\r
8240 FLAG_N = NFLAG_32(res);\r
8241 FLAG_Z = res;\r
8242 FLAG_V = VFLAG_CLEAR;\r
8243 FLAG_C = CFLAG_CLEAR;\r
8244}\r
8245\r
8246\r
8247void m68k_op_move_32_d_ix(void)\r
8248{\r
8249 uint res = OPER_AY_IX_32();\r
8250 uint* r_dst = &DX;\r
8251\r
8252 *r_dst = res;\r
8253\r
8254 FLAG_N = NFLAG_32(res);\r
8255 FLAG_Z = res;\r
8256 FLAG_V = VFLAG_CLEAR;\r
8257 FLAG_C = CFLAG_CLEAR;\r
8258}\r
8259\r
8260\r
8261void m68k_op_move_32_d_aw(void)\r
8262{\r
8263 uint res = OPER_AW_32();\r
8264 uint* r_dst = &DX;\r
8265\r
8266 *r_dst = res;\r
8267\r
8268 FLAG_N = NFLAG_32(res);\r
8269 FLAG_Z = res;\r
8270 FLAG_V = VFLAG_CLEAR;\r
8271 FLAG_C = CFLAG_CLEAR;\r
8272}\r
8273\r
8274\r
8275void m68k_op_move_32_d_al(void)\r
8276{\r
8277 uint res = OPER_AL_32();\r
8278 uint* r_dst = &DX;\r
8279\r
8280 *r_dst = res;\r
8281\r
8282 FLAG_N = NFLAG_32(res);\r
8283 FLAG_Z = res;\r
8284 FLAG_V = VFLAG_CLEAR;\r
8285 FLAG_C = CFLAG_CLEAR;\r
8286}\r
8287\r
8288\r
8289void m68k_op_move_32_d_pcdi(void)\r
8290{\r
8291 uint res = OPER_PCDI_32();\r
8292 uint* r_dst = &DX;\r
8293\r
8294 *r_dst = res;\r
8295\r
8296 FLAG_N = NFLAG_32(res);\r
8297 FLAG_Z = res;\r
8298 FLAG_V = VFLAG_CLEAR;\r
8299 FLAG_C = CFLAG_CLEAR;\r
8300}\r
8301\r
8302\r
8303void m68k_op_move_32_d_pcix(void)\r
8304{\r
8305 uint res = OPER_PCIX_32();\r
8306 uint* r_dst = &DX;\r
8307\r
8308 *r_dst = res;\r
8309\r
8310 FLAG_N = NFLAG_32(res);\r
8311 FLAG_Z = res;\r
8312 FLAG_V = VFLAG_CLEAR;\r
8313 FLAG_C = CFLAG_CLEAR;\r
8314}\r
8315\r
8316\r
8317void m68k_op_move_32_d_i(void)\r
8318{\r
8319 uint res = OPER_I_32();\r
8320 uint* r_dst = &DX;\r
8321\r
8322 *r_dst = res;\r
8323\r
8324 FLAG_N = NFLAG_32(res);\r
8325 FLAG_Z = res;\r
8326 FLAG_V = VFLAG_CLEAR;\r
8327 FLAG_C = CFLAG_CLEAR;\r
8328}\r
8329\r
8330\r
8331void m68k_op_move_32_ai_d(void)\r
8332{\r
8333 uint res = DY;\r
8334 uint ea = EA_AX_AI_32();\r
8335\r
8336 m68ki_write_32(ea, res);\r
8337\r
8338 FLAG_N = NFLAG_32(res);\r
8339 FLAG_Z = res;\r
8340 FLAG_V = VFLAG_CLEAR;\r
8341 FLAG_C = CFLAG_CLEAR;\r
8342}\r
8343\r
8344\r
8345void m68k_op_move_32_ai_a(void)\r
8346{\r
8347 uint res = AY;\r
8348 uint ea = EA_AX_AI_32();\r
8349\r
8350 m68ki_write_32(ea, res);\r
8351\r
8352 FLAG_N = NFLAG_32(res);\r
8353 FLAG_Z = res;\r
8354 FLAG_V = VFLAG_CLEAR;\r
8355 FLAG_C = CFLAG_CLEAR;\r
8356}\r
8357\r
8358\r
8359void m68k_op_move_32_ai_ai(void)\r
8360{\r
8361 uint res = OPER_AY_AI_32();\r
8362 uint ea = EA_AX_AI_32();\r
8363\r
8364 m68ki_write_32(ea, res);\r
8365\r
8366 FLAG_N = NFLAG_32(res);\r
8367 FLAG_Z = res;\r
8368 FLAG_V = VFLAG_CLEAR;\r
8369 FLAG_C = CFLAG_CLEAR;\r
8370}\r
8371\r
8372\r
8373void m68k_op_move_32_ai_pi(void)\r
8374{\r
8375 uint res = OPER_AY_PI_32();\r
8376 uint ea = EA_AX_AI_32();\r
8377\r
8378 m68ki_write_32(ea, res);\r
8379\r
8380 FLAG_N = NFLAG_32(res);\r
8381 FLAG_Z = res;\r
8382 FLAG_V = VFLAG_CLEAR;\r
8383 FLAG_C = CFLAG_CLEAR;\r
8384}\r
8385\r
8386\r
8387void m68k_op_move_32_ai_pd(void)\r
8388{\r
8389 uint res = OPER_AY_PD_32();\r
8390 uint ea = EA_AX_AI_32();\r
8391\r
8392 m68ki_write_32(ea, res);\r
8393\r
8394 FLAG_N = NFLAG_32(res);\r
8395 FLAG_Z = res;\r
8396 FLAG_V = VFLAG_CLEAR;\r
8397 FLAG_C = CFLAG_CLEAR;\r
8398}\r
8399\r
8400\r
8401void m68k_op_move_32_ai_di(void)\r
8402{\r
8403 uint res = OPER_AY_DI_32();\r
8404 uint ea = EA_AX_AI_32();\r
8405\r
8406 m68ki_write_32(ea, res);\r
8407\r
8408 FLAG_N = NFLAG_32(res);\r
8409 FLAG_Z = res;\r
8410 FLAG_V = VFLAG_CLEAR;\r
8411 FLAG_C = CFLAG_CLEAR;\r
8412}\r
8413\r
8414\r
8415void m68k_op_move_32_ai_ix(void)\r
8416{\r
8417 uint res = OPER_AY_IX_32();\r
8418 uint ea = EA_AX_AI_32();\r
8419\r
8420 m68ki_write_32(ea, res);\r
8421\r
8422 FLAG_N = NFLAG_32(res);\r
8423 FLAG_Z = res;\r
8424 FLAG_V = VFLAG_CLEAR;\r
8425 FLAG_C = CFLAG_CLEAR;\r
8426}\r
8427\r
8428\r
8429void m68k_op_move_32_ai_aw(void)\r
8430{\r
8431 uint res = OPER_AW_32();\r
8432 uint ea = EA_AX_AI_32();\r
8433\r
8434 m68ki_write_32(ea, res);\r
8435\r
8436 FLAG_N = NFLAG_32(res);\r
8437 FLAG_Z = res;\r
8438 FLAG_V = VFLAG_CLEAR;\r
8439 FLAG_C = CFLAG_CLEAR;\r
8440}\r
8441\r
8442\r
8443void m68k_op_move_32_ai_al(void)\r
8444{\r
8445 uint res = OPER_AL_32();\r
8446 uint ea = EA_AX_AI_32();\r
8447\r
8448 m68ki_write_32(ea, res);\r
8449\r
8450 FLAG_N = NFLAG_32(res);\r
8451 FLAG_Z = res;\r
8452 FLAG_V = VFLAG_CLEAR;\r
8453 FLAG_C = CFLAG_CLEAR;\r
8454}\r
8455\r
8456\r
8457void m68k_op_move_32_ai_pcdi(void)\r
8458{\r
8459 uint res = OPER_PCDI_32();\r
8460 uint ea = EA_AX_AI_32();\r
8461\r
8462 m68ki_write_32(ea, res);\r
8463\r
8464 FLAG_N = NFLAG_32(res);\r
8465 FLAG_Z = res;\r
8466 FLAG_V = VFLAG_CLEAR;\r
8467 FLAG_C = CFLAG_CLEAR;\r
8468}\r
8469\r
8470\r
8471void m68k_op_move_32_ai_pcix(void)\r
8472{\r
8473 uint res = OPER_PCIX_32();\r
8474 uint ea = EA_AX_AI_32();\r
8475\r
8476 m68ki_write_32(ea, res);\r
8477\r
8478 FLAG_N = NFLAG_32(res);\r
8479 FLAG_Z = res;\r
8480 FLAG_V = VFLAG_CLEAR;\r
8481 FLAG_C = CFLAG_CLEAR;\r
8482}\r
8483\r
8484\r
8485void m68k_op_move_32_ai_i(void)\r
8486{\r
8487 uint res = OPER_I_32();\r
8488 uint ea = EA_AX_AI_32();\r
8489\r
8490 m68ki_write_32(ea, res);\r
8491\r
8492 FLAG_N = NFLAG_32(res);\r
8493 FLAG_Z = res;\r
8494 FLAG_V = VFLAG_CLEAR;\r
8495 FLAG_C = CFLAG_CLEAR;\r
8496}\r
8497\r
8498\r
8499void m68k_op_move_32_pi_d(void)\r
8500{\r
8501 uint res = DY;\r
8502 uint ea = EA_AX_PI_32();\r
8503\r
8504 m68ki_write_32(ea, res);\r
8505\r
8506 FLAG_N = NFLAG_32(res);\r
8507 FLAG_Z = res;\r
8508 FLAG_V = VFLAG_CLEAR;\r
8509 FLAG_C = CFLAG_CLEAR;\r
8510}\r
8511\r
8512\r
8513void m68k_op_move_32_pi_a(void)\r
8514{\r
8515 uint res = AY;\r
8516 uint ea = EA_AX_PI_32();\r
8517\r
8518 m68ki_write_32(ea, res);\r
8519\r
8520 FLAG_N = NFLAG_32(res);\r
8521 FLAG_Z = res;\r
8522 FLAG_V = VFLAG_CLEAR;\r
8523 FLAG_C = CFLAG_CLEAR;\r
8524}\r
8525\r
8526\r
8527void m68k_op_move_32_pi_ai(void)\r
8528{\r
8529 uint res = OPER_AY_AI_32();\r
8530 uint ea = EA_AX_PI_32();\r
8531\r
8532 m68ki_write_32(ea, res);\r
8533\r
8534 FLAG_N = NFLAG_32(res);\r
8535 FLAG_Z = res;\r
8536 FLAG_V = VFLAG_CLEAR;\r
8537 FLAG_C = CFLAG_CLEAR;\r
8538}\r
8539\r
8540\r
8541void m68k_op_move_32_pi_pi(void)\r
8542{\r
8543 uint res = OPER_AY_PI_32();\r
8544 uint ea = EA_AX_PI_32();\r
8545\r
8546 m68ki_write_32(ea, res);\r
8547\r
8548 FLAG_N = NFLAG_32(res);\r
8549 FLAG_Z = res;\r
8550 FLAG_V = VFLAG_CLEAR;\r
8551 FLAG_C = CFLAG_CLEAR;\r
8552}\r
8553\r
8554\r
8555void m68k_op_move_32_pi_pd(void)\r
8556{\r
8557 uint res = OPER_AY_PD_32();\r
8558 uint ea = EA_AX_PI_32();\r
8559\r
8560 m68ki_write_32(ea, res);\r
8561\r
8562 FLAG_N = NFLAG_32(res);\r
8563 FLAG_Z = res;\r
8564 FLAG_V = VFLAG_CLEAR;\r
8565 FLAG_C = CFLAG_CLEAR;\r
8566}\r
8567\r
8568\r
8569void m68k_op_move_32_pi_di(void)\r
8570{\r
8571 uint res = OPER_AY_DI_32();\r
8572 uint ea = EA_AX_PI_32();\r
8573\r
8574 m68ki_write_32(ea, res);\r
8575\r
8576 FLAG_N = NFLAG_32(res);\r
8577 FLAG_Z = res;\r
8578 FLAG_V = VFLAG_CLEAR;\r
8579 FLAG_C = CFLAG_CLEAR;\r
8580}\r
8581\r
8582\r
8583void m68k_op_move_32_pi_ix(void)\r
8584{\r
8585 uint res = OPER_AY_IX_32();\r
8586 uint ea = EA_AX_PI_32();\r
8587\r
8588 m68ki_write_32(ea, res);\r
8589\r
8590 FLAG_N = NFLAG_32(res);\r
8591 FLAG_Z = res;\r
8592 FLAG_V = VFLAG_CLEAR;\r
8593 FLAG_C = CFLAG_CLEAR;\r
8594}\r
8595\r
8596\r
8597void m68k_op_move_32_pi_aw(void)\r
8598{\r
8599 uint res = OPER_AW_32();\r
8600 uint ea = EA_AX_PI_32();\r
8601\r
8602 m68ki_write_32(ea, res);\r
8603\r
8604 FLAG_N = NFLAG_32(res);\r
8605 FLAG_Z = res;\r
8606 FLAG_V = VFLAG_CLEAR;\r
8607 FLAG_C = CFLAG_CLEAR;\r
8608}\r
8609\r
8610\r
8611void m68k_op_move_32_pi_al(void)\r
8612{\r
8613 uint res = OPER_AL_32();\r
8614 uint ea = EA_AX_PI_32();\r
8615\r
8616 m68ki_write_32(ea, res);\r
8617\r
8618 FLAG_N = NFLAG_32(res);\r
8619 FLAG_Z = res;\r
8620 FLAG_V = VFLAG_CLEAR;\r
8621 FLAG_C = CFLAG_CLEAR;\r
8622}\r
8623\r
8624\r
8625void m68k_op_move_32_pi_pcdi(void)\r
8626{\r
8627 uint res = OPER_PCDI_32();\r
8628 uint ea = EA_AX_PI_32();\r
8629\r
8630 m68ki_write_32(ea, res);\r
8631\r
8632 FLAG_N = NFLAG_32(res);\r
8633 FLAG_Z = res;\r
8634 FLAG_V = VFLAG_CLEAR;\r
8635 FLAG_C = CFLAG_CLEAR;\r
8636}\r
8637\r
8638\r
8639void m68k_op_move_32_pi_pcix(void)\r
8640{\r
8641 uint res = OPER_PCIX_32();\r
8642 uint ea = EA_AX_PI_32();\r
8643\r
8644 m68ki_write_32(ea, res);\r
8645\r
8646 FLAG_N = NFLAG_32(res);\r
8647 FLAG_Z = res;\r
8648 FLAG_V = VFLAG_CLEAR;\r
8649 FLAG_C = CFLAG_CLEAR;\r
8650}\r
8651\r
8652\r
8653void m68k_op_move_32_pi_i(void)\r
8654{\r
8655 uint res = OPER_I_32();\r
8656 uint ea = EA_AX_PI_32();\r
8657\r
8658 m68ki_write_32(ea, res);\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_move_32_pd_d(void)\r
8668{\r
8669 uint res = DY;\r
8670 uint ea = EA_AX_PD_32();\r
8671\r
8672 m68ki_write_32(ea, res);\r
8673\r
8674 FLAG_N = NFLAG_32(res);\r
8675 FLAG_Z = res;\r
8676 FLAG_V = VFLAG_CLEAR;\r
8677 FLAG_C = CFLAG_CLEAR;\r
8678}\r
8679\r
8680\r
8681void m68k_op_move_32_pd_a(void)\r
8682{\r
8683 uint res = AY;\r
8684 uint ea = EA_AX_PD_32();\r
8685\r
8686 m68ki_write_32(ea, res);\r
8687\r
8688 FLAG_N = NFLAG_32(res);\r
8689 FLAG_Z = res;\r
8690 FLAG_V = VFLAG_CLEAR;\r
8691 FLAG_C = CFLAG_CLEAR;\r
8692}\r
8693\r
8694\r
8695void m68k_op_move_32_pd_ai(void)\r
8696{\r
8697 uint res = OPER_AY_AI_32();\r
8698 uint ea = EA_AX_PD_32();\r
8699\r
8700 m68ki_write_32(ea, res);\r
8701\r
8702 FLAG_N = NFLAG_32(res);\r
8703 FLAG_Z = res;\r
8704 FLAG_V = VFLAG_CLEAR;\r
8705 FLAG_C = CFLAG_CLEAR;\r
8706}\r
8707\r
8708\r
8709void m68k_op_move_32_pd_pi(void)\r
8710{\r
8711 uint res = OPER_AY_PI_32();\r
8712 uint ea = EA_AX_PD_32();\r
8713\r
8714 m68ki_write_32(ea, res);\r
8715\r
8716 FLAG_N = NFLAG_32(res);\r
8717 FLAG_Z = res;\r
8718 FLAG_V = VFLAG_CLEAR;\r
8719 FLAG_C = CFLAG_CLEAR;\r
8720}\r
8721\r
8722\r
8723void m68k_op_move_32_pd_pd(void)\r
8724{\r
8725 uint res = OPER_AY_PD_32();\r
8726 uint ea = EA_AX_PD_32();\r
8727\r
8728 m68ki_write_32(ea, res);\r
8729\r
8730 FLAG_N = NFLAG_32(res);\r
8731 FLAG_Z = res;\r
8732 FLAG_V = VFLAG_CLEAR;\r
8733 FLAG_C = CFLAG_CLEAR;\r
8734}\r
8735\r
8736\r
8737void m68k_op_move_32_pd_di(void)\r
8738{\r
8739 uint res = OPER_AY_DI_32();\r
8740 uint ea = EA_AX_PD_32();\r
8741\r
8742 m68ki_write_32(ea, res);\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}\r
8749\r
8750\r
8751void m68k_op_move_32_pd_ix(void)\r
8752{\r
8753 uint res = OPER_AY_IX_32();\r
8754 uint ea = EA_AX_PD_32();\r
8755\r
8756 m68ki_write_32(ea, res);\r
8757\r
8758 FLAG_N = NFLAG_32(res);\r
8759 FLAG_Z = res;\r
8760 FLAG_V = VFLAG_CLEAR;\r
8761 FLAG_C = CFLAG_CLEAR;\r
8762}\r
8763\r
8764\r
8765void m68k_op_move_32_pd_aw(void)\r
8766{\r
8767 uint res = OPER_AW_32();\r
8768 uint ea = EA_AX_PD_32();\r
8769\r
8770 m68ki_write_32(ea, res);\r
8771\r
8772 FLAG_N = NFLAG_32(res);\r
8773 FLAG_Z = res;\r
8774 FLAG_V = VFLAG_CLEAR;\r
8775 FLAG_C = CFLAG_CLEAR;\r
8776}\r
8777\r
8778\r
8779void m68k_op_move_32_pd_al(void)\r
8780{\r
8781 uint res = OPER_AL_32();\r
8782 uint ea = EA_AX_PD_32();\r
8783\r
8784 m68ki_write_32(ea, res);\r
8785\r
8786 FLAG_N = NFLAG_32(res);\r
8787 FLAG_Z = res;\r
8788 FLAG_V = VFLAG_CLEAR;\r
8789 FLAG_C = CFLAG_CLEAR;\r
8790}\r
8791\r
8792\r
8793void m68k_op_move_32_pd_pcdi(void)\r
8794{\r
8795 uint res = OPER_PCDI_32();\r
8796 uint ea = EA_AX_PD_32();\r
8797\r
8798 m68ki_write_32(ea, res);\r
8799\r
8800 FLAG_N = NFLAG_32(res);\r
8801 FLAG_Z = res;\r
8802 FLAG_V = VFLAG_CLEAR;\r
8803 FLAG_C = CFLAG_CLEAR;\r
8804}\r
8805\r
8806\r
8807void m68k_op_move_32_pd_pcix(void)\r
8808{\r
8809 uint res = OPER_PCIX_32();\r
8810 uint ea = EA_AX_PD_32();\r
8811\r
8812 m68ki_write_32(ea, res);\r
8813\r
8814 FLAG_N = NFLAG_32(res);\r
8815 FLAG_Z = res;\r
8816 FLAG_V = VFLAG_CLEAR;\r
8817 FLAG_C = CFLAG_CLEAR;\r
8818}\r
8819\r
8820\r
8821void m68k_op_move_32_pd_i(void)\r
8822{\r
8823 uint res = OPER_I_32();\r
8824 uint ea = EA_AX_PD_32();\r
8825\r
8826 m68ki_write_32(ea, res);\r
8827\r
8828 FLAG_N = NFLAG_32(res);\r
8829 FLAG_Z = res;\r
8830 FLAG_V = VFLAG_CLEAR;\r
8831 FLAG_C = CFLAG_CLEAR;\r
8832}\r
8833\r
8834\r
8835void m68k_op_move_32_di_d(void)\r
8836{\r
8837 uint res = DY;\r
8838 uint ea = EA_AX_DI_32();\r
8839\r
8840 m68ki_write_32(ea, res);\r
8841\r
8842 FLAG_N = NFLAG_32(res);\r
8843 FLAG_Z = res;\r
8844 FLAG_V = VFLAG_CLEAR;\r
8845 FLAG_C = CFLAG_CLEAR;\r
8846}\r
8847\r
8848\r
8849void m68k_op_move_32_di_a(void)\r
8850{\r
8851 uint res = AY;\r
8852 uint ea = EA_AX_DI_32();\r
8853\r
8854 m68ki_write_32(ea, res);\r
8855\r
8856 FLAG_N = NFLAG_32(res);\r
8857 FLAG_Z = res;\r
8858 FLAG_V = VFLAG_CLEAR;\r
8859 FLAG_C = CFLAG_CLEAR;\r
8860}\r
8861\r
8862\r
8863void m68k_op_move_32_di_ai(void)\r
8864{\r
8865 uint res = OPER_AY_AI_32();\r
8866 uint ea = EA_AX_DI_32();\r
8867\r
8868 m68ki_write_32(ea, res);\r
8869\r
8870 FLAG_N = NFLAG_32(res);\r
8871 FLAG_Z = res;\r
8872 FLAG_V = VFLAG_CLEAR;\r
8873 FLAG_C = CFLAG_CLEAR;\r
8874}\r
8875\r
8876\r
8877void m68k_op_move_32_di_pi(void)\r
8878{\r
8879 uint res = OPER_AY_PI_32();\r
8880 uint ea = EA_AX_DI_32();\r
8881\r
8882 m68ki_write_32(ea, res);\r
8883\r
8884 FLAG_N = NFLAG_32(res);\r
8885 FLAG_Z = res;\r
8886 FLAG_V = VFLAG_CLEAR;\r
8887 FLAG_C = CFLAG_CLEAR;\r
8888}\r
8889\r
8890\r
8891void m68k_op_move_32_di_pd(void)\r
8892{\r
8893 uint res = OPER_AY_PD_32();\r
8894 uint ea = EA_AX_DI_32();\r
8895\r
8896 m68ki_write_32(ea, res);\r
8897\r
8898 FLAG_N = NFLAG_32(res);\r
8899 FLAG_Z = res;\r
8900 FLAG_V = VFLAG_CLEAR;\r
8901 FLAG_C = CFLAG_CLEAR;\r
8902}\r
8903\r
8904\r
8905void m68k_op_move_32_di_di(void)\r
8906{\r
8907 uint res = OPER_AY_DI_32();\r
8908 uint ea = EA_AX_DI_32();\r
8909\r
8910 m68ki_write_32(ea, res);\r
8911\r
8912 FLAG_N = NFLAG_32(res);\r
8913 FLAG_Z = res;\r
8914 FLAG_V = VFLAG_CLEAR;\r
8915 FLAG_C = CFLAG_CLEAR;\r
8916}\r
8917\r
8918\r
8919void m68k_op_move_32_di_ix(void)\r
8920{\r
8921 uint res = OPER_AY_IX_32();\r
8922 uint ea = EA_AX_DI_32();\r
8923\r
8924 m68ki_write_32(ea, res);\r
8925\r
8926 FLAG_N = NFLAG_32(res);\r
8927 FLAG_Z = res;\r
8928 FLAG_V = VFLAG_CLEAR;\r
8929 FLAG_C = CFLAG_CLEAR;\r
8930}\r
8931\r
8932\r
8933void m68k_op_move_32_di_aw(void)\r
8934{\r
8935 uint res = OPER_AW_32();\r
8936 uint ea = EA_AX_DI_32();\r
8937\r
8938 m68ki_write_32(ea, res);\r
8939\r
8940 FLAG_N = NFLAG_32(res);\r
8941 FLAG_Z = res;\r
8942 FLAG_V = VFLAG_CLEAR;\r
8943 FLAG_C = CFLAG_CLEAR;\r
8944}\r
8945\r
8946\r
8947void m68k_op_move_32_di_al(void)\r
8948{\r
8949 uint res = OPER_AL_32();\r
8950 uint ea = EA_AX_DI_32();\r
8951\r
8952 m68ki_write_32(ea, res);\r
8953\r
8954 FLAG_N = NFLAG_32(res);\r
8955 FLAG_Z = res;\r
8956 FLAG_V = VFLAG_CLEAR;\r
8957 FLAG_C = CFLAG_CLEAR;\r
8958}\r
8959\r
8960\r
8961void m68k_op_move_32_di_pcdi(void)\r
8962{\r
8963 uint res = OPER_PCDI_32();\r
8964 uint ea = EA_AX_DI_32();\r
8965\r
8966 m68ki_write_32(ea, res);\r
8967\r
8968 FLAG_N = NFLAG_32(res);\r
8969 FLAG_Z = res;\r
8970 FLAG_V = VFLAG_CLEAR;\r
8971 FLAG_C = CFLAG_CLEAR;\r
8972}\r
8973\r
8974\r
8975void m68k_op_move_32_di_pcix(void)\r
8976{\r
8977 uint res = OPER_PCIX_32();\r
8978 uint ea = EA_AX_DI_32();\r
8979\r
8980 m68ki_write_32(ea, res);\r
8981\r
8982 FLAG_N = NFLAG_32(res);\r
8983 FLAG_Z = res;\r
8984 FLAG_V = VFLAG_CLEAR;\r
8985 FLAG_C = CFLAG_CLEAR;\r
8986}\r
8987\r
8988\r
8989void m68k_op_move_32_di_i(void)\r
8990{\r
8991 uint res = OPER_I_32();\r
8992 uint ea = EA_AX_DI_32();\r
8993\r
8994 m68ki_write_32(ea, res);\r
8995\r
8996 FLAG_N = NFLAG_32(res);\r
8997 FLAG_Z = res;\r
8998 FLAG_V = VFLAG_CLEAR;\r
8999 FLAG_C = CFLAG_CLEAR;\r
9000}\r
9001\r
9002\r
9003void m68k_op_move_32_ix_d(void)\r
9004{\r
9005 uint res = DY;\r
9006 uint ea = EA_AX_IX_32();\r
9007\r
9008 m68ki_write_32(ea, res);\r
9009\r
9010 FLAG_N = NFLAG_32(res);\r
9011 FLAG_Z = res;\r
9012 FLAG_V = VFLAG_CLEAR;\r
9013 FLAG_C = CFLAG_CLEAR;\r
9014}\r
9015\r
9016\r
9017void m68k_op_move_32_ix_a(void)\r
9018{\r
9019 uint res = AY;\r
9020 uint ea = EA_AX_IX_32();\r
9021\r
9022 m68ki_write_32(ea, res);\r
9023\r
9024 FLAG_N = NFLAG_32(res);\r
9025 FLAG_Z = res;\r
9026 FLAG_V = VFLAG_CLEAR;\r
9027 FLAG_C = CFLAG_CLEAR;\r
9028}\r
9029\r
9030\r
9031void m68k_op_move_32_ix_ai(void)\r
9032{\r
9033 uint res = OPER_AY_AI_32();\r
9034 uint ea = EA_AX_IX_32();\r
9035\r
9036 m68ki_write_32(ea, res);\r
9037\r
9038 FLAG_N = NFLAG_32(res);\r
9039 FLAG_Z = res;\r
9040 FLAG_V = VFLAG_CLEAR;\r
9041 FLAG_C = CFLAG_CLEAR;\r
9042}\r
9043\r
9044\r
9045void m68k_op_move_32_ix_pi(void)\r
9046{\r
9047 uint res = OPER_AY_PI_32();\r
9048 uint ea = EA_AX_IX_32();\r
9049\r
9050 m68ki_write_32(ea, res);\r
9051\r
9052 FLAG_N = NFLAG_32(res);\r
9053 FLAG_Z = res;\r
9054 FLAG_V = VFLAG_CLEAR;\r
9055 FLAG_C = CFLAG_CLEAR;\r
9056}\r
9057\r
9058\r
9059void m68k_op_move_32_ix_pd(void)\r
9060{\r
9061 uint res = OPER_AY_PD_32();\r
9062 uint ea = EA_AX_IX_32();\r
9063\r
9064 m68ki_write_32(ea, res);\r
9065\r
9066 FLAG_N = NFLAG_32(res);\r
9067 FLAG_Z = res;\r
9068 FLAG_V = VFLAG_CLEAR;\r
9069 FLAG_C = CFLAG_CLEAR;\r
9070}\r
9071\r
9072\r
9073void m68k_op_move_32_ix_di(void)\r
9074{\r
9075 uint res = OPER_AY_DI_32();\r
9076 uint ea = EA_AX_IX_32();\r
9077\r
9078 m68ki_write_32(ea, res);\r
9079\r
9080 FLAG_N = NFLAG_32(res);\r
9081 FLAG_Z = res;\r
9082 FLAG_V = VFLAG_CLEAR;\r
9083 FLAG_C = CFLAG_CLEAR;\r
9084}\r
9085\r
9086\r
9087void m68k_op_move_32_ix_ix(void)\r
9088{\r
9089 uint res = OPER_AY_IX_32();\r
9090 uint ea = EA_AX_IX_32();\r
9091\r
9092 m68ki_write_32(ea, res);\r
9093\r
9094 FLAG_N = NFLAG_32(res);\r
9095 FLAG_Z = res;\r
9096 FLAG_V = VFLAG_CLEAR;\r
9097 FLAG_C = CFLAG_CLEAR;\r
9098}\r
9099\r
9100\r
9101void m68k_op_move_32_ix_aw(void)\r
9102{\r
9103 uint res = OPER_AW_32();\r
9104 uint ea = EA_AX_IX_32();\r
9105\r
9106 m68ki_write_32(ea, res);\r
9107\r
9108 FLAG_N = NFLAG_32(res);\r
9109 FLAG_Z = res;\r
9110 FLAG_V = VFLAG_CLEAR;\r
9111 FLAG_C = CFLAG_CLEAR;\r
9112}\r
9113\r
9114\r
9115void m68k_op_move_32_ix_al(void)\r
9116{\r
9117 uint res = OPER_AL_32();\r
9118 uint ea = EA_AX_IX_32();\r
9119\r
9120 m68ki_write_32(ea, res);\r
9121\r
9122 FLAG_N = NFLAG_32(res);\r
9123 FLAG_Z = res;\r
9124 FLAG_V = VFLAG_CLEAR;\r
9125 FLAG_C = CFLAG_CLEAR;\r
9126}\r
9127\r
9128\r
9129void m68k_op_move_32_ix_pcdi(void)\r
9130{\r
9131 uint res = OPER_PCDI_32();\r
9132 uint ea = EA_AX_IX_32();\r
9133\r
9134 m68ki_write_32(ea, res);\r
9135\r
9136 FLAG_N = NFLAG_32(res);\r
9137 FLAG_Z = res;\r
9138 FLAG_V = VFLAG_CLEAR;\r
9139 FLAG_C = CFLAG_CLEAR;\r
9140}\r
9141\r
9142\r
9143void m68k_op_move_32_ix_pcix(void)\r
9144{\r
9145 uint res = OPER_PCIX_32();\r
9146 uint ea = EA_AX_IX_32();\r
9147\r
9148 m68ki_write_32(ea, res);\r
9149\r
9150 FLAG_N = NFLAG_32(res);\r
9151 FLAG_Z = res;\r
9152 FLAG_V = VFLAG_CLEAR;\r
9153 FLAG_C = CFLAG_CLEAR;\r
9154}\r
9155\r
9156\r
9157void m68k_op_move_32_ix_i(void)\r
9158{\r
9159 uint res = OPER_I_32();\r
9160 uint ea = EA_AX_IX_32();\r
9161\r
9162 m68ki_write_32(ea, res);\r
9163\r
9164 FLAG_N = NFLAG_32(res);\r
9165 FLAG_Z = res;\r
9166 FLAG_V = VFLAG_CLEAR;\r
9167 FLAG_C = CFLAG_CLEAR;\r
9168}\r
9169\r
9170\r
9171void m68k_op_move_32_aw_d(void)\r
9172{\r
9173 uint res = DY;\r
9174 uint ea = EA_AW_32();\r
9175\r
9176 m68ki_write_32(ea, res);\r
9177\r
9178 FLAG_N = NFLAG_32(res);\r
9179 FLAG_Z = res;\r
9180 FLAG_V = VFLAG_CLEAR;\r
9181 FLAG_C = CFLAG_CLEAR;\r
9182}\r
9183\r
9184\r
9185void m68k_op_move_32_aw_a(void)\r
9186{\r
9187 uint res = AY;\r
9188 uint ea = EA_AW_32();\r
9189\r
9190 m68ki_write_32(ea, res);\r
9191\r
9192 FLAG_N = NFLAG_32(res);\r
9193 FLAG_Z = res;\r
9194 FLAG_V = VFLAG_CLEAR;\r
9195 FLAG_C = CFLAG_CLEAR;\r
9196}\r
9197\r
9198\r
9199void m68k_op_move_32_aw_ai(void)\r
9200{\r
9201 uint res = OPER_AY_AI_32();\r
9202 uint ea = EA_AW_32();\r
9203\r
9204 m68ki_write_32(ea, res);\r
9205\r
9206 FLAG_N = NFLAG_32(res);\r
9207 FLAG_Z = res;\r
9208 FLAG_V = VFLAG_CLEAR;\r
9209 FLAG_C = CFLAG_CLEAR;\r
9210}\r
9211\r
9212\r
9213void m68k_op_move_32_aw_pi(void)\r
9214{\r
9215 uint res = OPER_AY_PI_32();\r
9216 uint ea = EA_AW_32();\r
9217\r
9218 m68ki_write_32(ea, res);\r
9219\r
9220 FLAG_N = NFLAG_32(res);\r
9221 FLAG_Z = res;\r
9222 FLAG_V = VFLAG_CLEAR;\r
9223 FLAG_C = CFLAG_CLEAR;\r
9224}\r
9225\r
9226\r
9227void m68k_op_move_32_aw_pd(void)\r
9228{\r
9229 uint res = OPER_AY_PD_32();\r
9230 uint ea = EA_AW_32();\r
9231\r
9232 m68ki_write_32(ea, res);\r
9233\r
9234 FLAG_N = NFLAG_32(res);\r
9235 FLAG_Z = res;\r
9236 FLAG_V = VFLAG_CLEAR;\r
9237 FLAG_C = CFLAG_CLEAR;\r
9238}\r
9239\r
9240\r
9241void m68k_op_move_32_aw_di(void)\r
9242{\r
9243 uint res = OPER_AY_DI_32();\r
9244 uint ea = EA_AW_32();\r
9245\r
9246 m68ki_write_32(ea, res);\r
9247\r
9248 FLAG_N = NFLAG_32(res);\r
9249 FLAG_Z = res;\r
9250 FLAG_V = VFLAG_CLEAR;\r
9251 FLAG_C = CFLAG_CLEAR;\r
9252}\r
9253\r
9254\r
9255void m68k_op_move_32_aw_ix(void)\r
9256{\r
9257 uint res = OPER_AY_IX_32();\r
9258 uint ea = EA_AW_32();\r
9259\r
9260 m68ki_write_32(ea, res);\r
9261\r
9262 FLAG_N = NFLAG_32(res);\r
9263 FLAG_Z = res;\r
9264 FLAG_V = VFLAG_CLEAR;\r
9265 FLAG_C = CFLAG_CLEAR;\r
9266}\r
9267\r
9268\r
9269void m68k_op_move_32_aw_aw(void)\r
9270{\r
9271 uint res = OPER_AW_32();\r
9272 uint ea = EA_AW_32();\r
9273\r
9274 m68ki_write_32(ea, res);\r
9275\r
9276 FLAG_N = NFLAG_32(res);\r
9277 FLAG_Z = res;\r
9278 FLAG_V = VFLAG_CLEAR;\r
9279 FLAG_C = CFLAG_CLEAR;\r
9280}\r
9281\r
9282\r
9283void m68k_op_move_32_aw_al(void)\r
9284{\r
9285 uint res = OPER_AL_32();\r
9286 uint ea = EA_AW_32();\r
9287\r
9288 m68ki_write_32(ea, res);\r
9289\r
9290 FLAG_N = NFLAG_32(res);\r
9291 FLAG_Z = res;\r
9292 FLAG_V = VFLAG_CLEAR;\r
9293 FLAG_C = CFLAG_CLEAR;\r
9294}\r
9295\r
9296\r
9297void m68k_op_move_32_aw_pcdi(void)\r
9298{\r
9299 uint res = OPER_PCDI_32();\r
9300 uint ea = EA_AW_32();\r
9301\r
9302 m68ki_write_32(ea, res);\r
9303\r
9304 FLAG_N = NFLAG_32(res);\r
9305 FLAG_Z = res;\r
9306 FLAG_V = VFLAG_CLEAR;\r
9307 FLAG_C = CFLAG_CLEAR;\r
9308}\r
9309\r
9310\r
9311void m68k_op_move_32_aw_pcix(void)\r
9312{\r
9313 uint res = OPER_PCIX_32();\r
9314 uint ea = EA_AW_32();\r
9315\r
9316 m68ki_write_32(ea, res);\r
9317\r
9318 FLAG_N = NFLAG_32(res);\r
9319 FLAG_Z = res;\r
9320 FLAG_V = VFLAG_CLEAR;\r
9321 FLAG_C = CFLAG_CLEAR;\r
9322}\r
9323\r
9324\r
9325void m68k_op_move_32_aw_i(void)\r
9326{\r
9327 uint res = OPER_I_32();\r
9328 uint ea = EA_AW_32();\r
9329\r
9330 m68ki_write_32(ea, res);\r
9331\r
9332 FLAG_N = NFLAG_32(res);\r
9333 FLAG_Z = res;\r
9334 FLAG_V = VFLAG_CLEAR;\r
9335 FLAG_C = CFLAG_CLEAR;\r
9336}\r
9337\r
9338\r
9339void m68k_op_move_32_al_d(void)\r
9340{\r
9341 uint res = DY;\r
9342 uint ea = EA_AL_32();\r
9343\r
9344 m68ki_write_32(ea, res);\r
9345\r
9346 FLAG_N = NFLAG_32(res);\r
9347 FLAG_Z = res;\r
9348 FLAG_V = VFLAG_CLEAR;\r
9349 FLAG_C = CFLAG_CLEAR;\r
9350}\r
9351\r
9352\r
9353void m68k_op_move_32_al_a(void)\r
9354{\r
9355 uint res = AY;\r
9356 uint ea = EA_AL_32();\r
9357\r
9358 m68ki_write_32(ea, res);\r
9359\r
9360 FLAG_N = NFLAG_32(res);\r
9361 FLAG_Z = res;\r
9362 FLAG_V = VFLAG_CLEAR;\r
9363 FLAG_C = CFLAG_CLEAR;\r
9364}\r
9365\r
9366\r
9367void m68k_op_move_32_al_ai(void)\r
9368{\r
9369 uint res = OPER_AY_AI_32();\r
9370 uint ea = EA_AL_32();\r
9371\r
9372 m68ki_write_32(ea, res);\r
9373\r
9374 FLAG_N = NFLAG_32(res);\r
9375 FLAG_Z = res;\r
9376 FLAG_V = VFLAG_CLEAR;\r
9377 FLAG_C = CFLAG_CLEAR;\r
9378}\r
9379\r
9380\r
9381void m68k_op_move_32_al_pi(void)\r
9382{\r
9383 uint res = OPER_AY_PI_32();\r
9384 uint ea = EA_AL_32();\r
9385\r
9386 m68ki_write_32(ea, res);\r
9387\r
9388 FLAG_N = NFLAG_32(res);\r
9389 FLAG_Z = res;\r
9390 FLAG_V = VFLAG_CLEAR;\r
9391 FLAG_C = CFLAG_CLEAR;\r
9392}\r
9393\r
9394\r
9395void m68k_op_move_32_al_pd(void)\r
9396{\r
9397 uint res = OPER_AY_PD_32();\r
9398 uint ea = EA_AL_32();\r
9399\r
9400 m68ki_write_32(ea, res);\r
9401\r
9402 FLAG_N = NFLAG_32(res);\r
9403 FLAG_Z = res;\r
9404 FLAG_V = VFLAG_CLEAR;\r
9405 FLAG_C = CFLAG_CLEAR;\r
9406}\r
9407\r
9408\r
9409void m68k_op_move_32_al_di(void)\r
9410{\r
9411 uint res = OPER_AY_DI_32();\r
9412 uint ea = EA_AL_32();\r
9413\r
9414 m68ki_write_32(ea, res);\r
9415\r
9416 FLAG_N = NFLAG_32(res);\r
9417 FLAG_Z = res;\r
9418 FLAG_V = VFLAG_CLEAR;\r
9419 FLAG_C = CFLAG_CLEAR;\r
9420}\r
9421\r
9422\r
9423void m68k_op_move_32_al_ix(void)\r
9424{\r
9425 uint res = OPER_AY_IX_32();\r
9426 uint ea = EA_AL_32();\r
9427\r
9428 m68ki_write_32(ea, res);\r
9429\r
9430 FLAG_N = NFLAG_32(res);\r
9431 FLAG_Z = res;\r
9432 FLAG_V = VFLAG_CLEAR;\r
9433 FLAG_C = CFLAG_CLEAR;\r
9434}\r
9435\r
9436\r
9437void m68k_op_move_32_al_aw(void)\r
9438{\r
9439 uint res = OPER_AW_32();\r
9440 uint ea = EA_AL_32();\r
9441\r
9442 m68ki_write_32(ea, res);\r
9443\r
9444 FLAG_N = NFLAG_32(res);\r
9445 FLAG_Z = res;\r
9446 FLAG_V = VFLAG_CLEAR;\r
9447 FLAG_C = CFLAG_CLEAR;\r
9448}\r
9449\r
9450\r
9451void m68k_op_move_32_al_al(void)\r
9452{\r
9453 uint res = OPER_AL_32();\r
9454 uint ea = EA_AL_32();\r
9455\r
9456 m68ki_write_32(ea, res);\r
9457\r
9458 FLAG_N = NFLAG_32(res);\r
9459 FLAG_Z = res;\r
9460 FLAG_V = VFLAG_CLEAR;\r
9461 FLAG_C = CFLAG_CLEAR;\r
9462}\r
9463\r
9464\r
9465void m68k_op_move_32_al_pcdi(void)\r
9466{\r
9467 uint res = OPER_PCDI_32();\r
9468 uint ea = EA_AL_32();\r
9469\r
9470 m68ki_write_32(ea, res);\r
9471\r
9472 FLAG_N = NFLAG_32(res);\r
9473 FLAG_Z = res;\r
9474 FLAG_V = VFLAG_CLEAR;\r
9475 FLAG_C = CFLAG_CLEAR;\r
9476}\r
9477\r
9478\r
9479void m68k_op_move_32_al_pcix(void)\r
9480{\r
9481 uint res = OPER_PCIX_32();\r
9482 uint ea = EA_AL_32();\r
9483\r
9484 m68ki_write_32(ea, res);\r
9485\r
9486 FLAG_N = NFLAG_32(res);\r
9487 FLAG_Z = res;\r
9488 FLAG_V = VFLAG_CLEAR;\r
9489 FLAG_C = CFLAG_CLEAR;\r
9490}\r
9491\r
9492\r
9493void m68k_op_move_32_al_i(void)\r
9494{\r
9495 uint res = OPER_I_32();\r
9496 uint ea = EA_AL_32();\r
9497\r
9498 m68ki_write_32(ea, res);\r
9499\r
9500 FLAG_N = NFLAG_32(res);\r
9501 FLAG_Z = res;\r
9502 FLAG_V = VFLAG_CLEAR;\r
9503 FLAG_C = CFLAG_CLEAR;\r
9504}\r
9505\r
9506\r
9507void m68k_op_movea_16_d(void)\r
9508{\r
9509 AX = MAKE_INT_16(DY);\r
9510}\r
9511\r
9512\r
9513void m68k_op_movea_16_a(void)\r
9514{\r
9515 AX = MAKE_INT_16(AY);\r
9516}\r
9517\r
9518\r
9519void m68k_op_movea_16_ai(void)\r
9520{\r
9521 AX = MAKE_INT_16(OPER_AY_AI_16());\r
9522}\r
9523\r
9524\r
9525void m68k_op_movea_16_pi(void)\r
9526{\r
9527 AX = MAKE_INT_16(OPER_AY_PI_16());\r
9528}\r
9529\r
9530\r
9531void m68k_op_movea_16_pd(void)\r
9532{\r
9533 AX = MAKE_INT_16(OPER_AY_PD_16());\r
9534}\r
9535\r
9536\r
9537void m68k_op_movea_16_di(void)\r
9538{\r
9539 AX = MAKE_INT_16(OPER_AY_DI_16());\r
9540}\r
9541\r
9542\r
9543void m68k_op_movea_16_ix(void)\r
9544{\r
9545 AX = MAKE_INT_16(OPER_AY_IX_16());\r
9546}\r
9547\r
9548\r
9549void m68k_op_movea_16_aw(void)\r
9550{\r
9551 AX = MAKE_INT_16(OPER_AW_16());\r
9552}\r
9553\r
9554\r
9555void m68k_op_movea_16_al(void)\r
9556{\r
9557 AX = MAKE_INT_16(OPER_AL_16());\r
9558}\r
9559\r
9560\r
9561void m68k_op_movea_16_pcdi(void)\r
9562{\r
9563 AX = MAKE_INT_16(OPER_PCDI_16());\r
9564}\r
9565\r
9566\r
9567void m68k_op_movea_16_pcix(void)\r
9568{\r
9569 AX = MAKE_INT_16(OPER_PCIX_16());\r
9570}\r
9571\r
9572\r
9573void m68k_op_movea_16_i(void)\r
9574{\r
9575 AX = MAKE_INT_16(OPER_I_16());\r
9576}\r
9577\r
9578\r
9579void m68k_op_movea_32_d(void)\r
9580{\r
9581 AX = DY;\r
9582}\r
9583\r
9584\r
9585void m68k_op_movea_32_a(void)\r
9586{\r
9587 AX = AY;\r
9588}\r
9589\r
9590\r
9591void m68k_op_movea_32_ai(void)\r
9592{\r
9593 AX = OPER_AY_AI_32();\r
9594}\r
9595\r
9596\r
9597void m68k_op_movea_32_pi(void)\r
9598{\r
9599 AX = OPER_AY_PI_32();\r
9600}\r
9601\r
9602\r
9603void m68k_op_movea_32_pd(void)\r
9604{\r
9605 AX = OPER_AY_PD_32();\r
9606}\r
9607\r
9608\r
9609void m68k_op_movea_32_di(void)\r
9610{\r
9611 AX = OPER_AY_DI_32();\r
9612}\r
9613\r
9614\r
9615void m68k_op_movea_32_ix(void)\r
9616{\r
9617 AX = OPER_AY_IX_32();\r
9618}\r
9619\r
9620\r
9621void m68k_op_movea_32_aw(void)\r
9622{\r
9623 AX = OPER_AW_32();\r
9624}\r
9625\r
9626\r
9627void m68k_op_movea_32_al(void)\r
9628{\r
9629 AX = OPER_AL_32();\r
9630}\r
9631\r
9632\r
9633void m68k_op_movea_32_pcdi(void)\r
9634{\r
9635 AX = OPER_PCDI_32();\r
9636}\r
9637\r
9638\r
9639void m68k_op_movea_32_pcix(void)\r
9640{\r
9641 AX = OPER_PCIX_32();\r
9642}\r
9643\r
9644\r
9645void m68k_op_movea_32_i(void)\r
9646{\r
9647 AX = OPER_I_32();\r
9648}\r
9649\r
9650\r
9651void m68k_op_move_16_frc_d(void)\r
9652{\r
9653 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
9654 {\r
9655 DY = MASK_OUT_BELOW_16(DY) | m68ki_get_ccr();\r
9656 return;\r
9657 }\r
9658 m68ki_exception_illegal();\r
9659}\r
9660\r
9661\r
9662void m68k_op_move_16_frc_ai(void)\r
9663{\r
9664 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
9665 {\r
9666 m68ki_write_16(EA_AY_AI_16(), m68ki_get_ccr());\r
9667 return;\r
9668 }\r
9669 m68ki_exception_illegal();\r
9670}\r
9671\r
9672\r
9673void m68k_op_move_16_frc_pi(void)\r
9674{\r
9675 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
9676 {\r
9677 m68ki_write_16(EA_AY_PI_16(), m68ki_get_ccr());\r
9678 return;\r
9679 }\r
9680 m68ki_exception_illegal();\r
9681}\r
9682\r
9683\r
9684void m68k_op_move_16_frc_pd(void)\r
9685{\r
9686 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
9687 {\r
9688 m68ki_write_16(EA_AY_PD_16(), m68ki_get_ccr());\r
9689 return;\r
9690 }\r
9691 m68ki_exception_illegal();\r
9692}\r
9693\r
9694\r
9695void m68k_op_move_16_frc_di(void)\r
9696{\r
9697 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
9698 {\r
9699 m68ki_write_16(EA_AY_DI_16(), m68ki_get_ccr());\r
9700 return;\r
9701 }\r
9702 m68ki_exception_illegal();\r
9703}\r
9704\r
9705\r
9706void m68k_op_move_16_frc_ix(void)\r
9707{\r
9708 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
9709 {\r
9710 m68ki_write_16(EA_AY_IX_16(), m68ki_get_ccr());\r
9711 return;\r
9712 }\r
9713 m68ki_exception_illegal();\r
9714}\r
9715\r
9716\r
9717void m68k_op_move_16_frc_aw(void)\r
9718{\r
9719 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
9720 {\r
9721 m68ki_write_16(EA_AW_16(), m68ki_get_ccr());\r
9722 return;\r
9723 }\r
9724 m68ki_exception_illegal();\r
9725}\r
9726\r
9727\r
9728void m68k_op_move_16_frc_al(void)\r
9729{\r
9730 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
9731 {\r
9732 m68ki_write_16(EA_AL_16(), m68ki_get_ccr());\r
9733 return;\r
9734 }\r
9735 m68ki_exception_illegal();\r
9736}\r
9737\r
9738\r
9739void m68k_op_move_16_toc_d(void)\r
9740{\r
9741 m68ki_set_ccr(DY);\r
9742}\r
9743\r
9744\r
9745void m68k_op_move_16_toc_ai(void)\r
9746{\r
9747 m68ki_set_ccr(OPER_AY_AI_16());\r
9748}\r
9749\r
9750\r
9751void m68k_op_move_16_toc_pi(void)\r
9752{\r
9753 m68ki_set_ccr(OPER_AY_PI_16());\r
9754}\r
9755\r
9756\r
9757void m68k_op_move_16_toc_pd(void)\r
9758{\r
9759 m68ki_set_ccr(OPER_AY_PD_16());\r
9760}\r
9761\r
9762\r
9763void m68k_op_move_16_toc_di(void)\r
9764{\r
9765 m68ki_set_ccr(OPER_AY_DI_16());\r
9766}\r
9767\r
9768\r
9769void m68k_op_move_16_toc_ix(void)\r
9770{\r
9771 m68ki_set_ccr(OPER_AY_IX_16());\r
9772}\r
9773\r
9774\r
9775void m68k_op_move_16_toc_aw(void)\r
9776{\r
9777 m68ki_set_ccr(OPER_AW_16());\r
9778}\r
9779\r
9780\r
9781void m68k_op_move_16_toc_al(void)\r
9782{\r
9783 m68ki_set_ccr(OPER_AL_16());\r
9784}\r
9785\r
9786\r
9787void m68k_op_move_16_toc_pcdi(void)\r
9788{\r
9789 m68ki_set_ccr(OPER_PCDI_16());\r
9790}\r
9791\r
9792\r
9793void m68k_op_move_16_toc_pcix(void)\r
9794{\r
9795 m68ki_set_ccr(OPER_PCIX_16());\r
9796}\r
9797\r
9798\r
9799void m68k_op_move_16_toc_i(void)\r
9800{\r
9801 m68ki_set_ccr(OPER_I_16());\r
9802}\r
9803\r
9804\r
9805void m68k_op_move_16_frs_d(void)\r
9806{\r
9807 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */\r
9808 {\r
9809 DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr();\r
9810 return;\r
9811 }\r
9812 m68ki_exception_privilege_violation();\r
9813}\r
9814\r
9815\r
9816void m68k_op_move_16_frs_ai(void)\r
9817{\r
9818 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */\r
9819 {\r
9820 uint ea = EA_AY_AI_16();\r
9821 m68ki_write_16(ea, m68ki_get_sr());\r
9822 return;\r
9823 }\r
9824 m68ki_exception_privilege_violation();\r
9825}\r
9826\r
9827\r
9828void m68k_op_move_16_frs_pi(void)\r
9829{\r
9830 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */\r
9831 {\r
9832 uint ea = EA_AY_PI_16();\r
9833 m68ki_write_16(ea, m68ki_get_sr());\r
9834 return;\r
9835 }\r
9836 m68ki_exception_privilege_violation();\r
9837}\r
9838\r
9839\r
9840void m68k_op_move_16_frs_pd(void)\r
9841{\r
9842 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */\r
9843 {\r
9844 uint ea = EA_AY_PD_16();\r
9845 m68ki_write_16(ea, m68ki_get_sr());\r
9846 return;\r
9847 }\r
9848 m68ki_exception_privilege_violation();\r
9849}\r
9850\r
9851\r
9852void m68k_op_move_16_frs_di(void)\r
9853{\r
9854 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */\r
9855 {\r
9856 uint ea = EA_AY_DI_16();\r
9857 m68ki_write_16(ea, m68ki_get_sr());\r
9858 return;\r
9859 }\r
9860 m68ki_exception_privilege_violation();\r
9861}\r
9862\r
9863\r
9864void m68k_op_move_16_frs_ix(void)\r
9865{\r
9866 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */\r
9867 {\r
9868 uint ea = EA_AY_IX_16();\r
9869 m68ki_write_16(ea, m68ki_get_sr());\r
9870 return;\r
9871 }\r
9872 m68ki_exception_privilege_violation();\r
9873}\r
9874\r
9875\r
9876void m68k_op_move_16_frs_aw(void)\r
9877{\r
9878 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */\r
9879 {\r
9880 uint ea = EA_AW_16();\r
9881 m68ki_write_16(ea, m68ki_get_sr());\r
9882 return;\r
9883 }\r
9884 m68ki_exception_privilege_violation();\r
9885}\r
9886\r
9887\r
9888void m68k_op_move_16_frs_al(void)\r
9889{\r
9890 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */\r
9891 {\r
9892 uint ea = EA_AL_16();\r
9893 m68ki_write_16(ea, m68ki_get_sr());\r
9894 return;\r
9895 }\r
9896 m68ki_exception_privilege_violation();\r
9897}\r
9898\r
9899\r
9900void m68k_op_move_16_tos_d(void)\r
9901{\r
9902 if(FLAG_S)\r
9903 {\r
9904 m68ki_set_sr(DY);\r
9905 return;\r
9906 }\r
9907 m68ki_exception_privilege_violation();\r
9908}\r
9909\r
9910\r
9911void m68k_op_move_16_tos_ai(void)\r
9912{\r
9913 if(FLAG_S)\r
9914 {\r
9915 uint new_sr = OPER_AY_AI_16();\r
9916 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
9917 m68ki_set_sr(new_sr);\r
9918 return;\r
9919 }\r
9920 m68ki_exception_privilege_violation();\r
9921}\r
9922\r
9923\r
9924void m68k_op_move_16_tos_pi(void)\r
9925{\r
9926 if(FLAG_S)\r
9927 {\r
9928 uint new_sr = OPER_AY_PI_16();\r
9929 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
9930 m68ki_set_sr(new_sr);\r
9931 return;\r
9932 }\r
9933 m68ki_exception_privilege_violation();\r
9934}\r
9935\r
9936\r
9937void m68k_op_move_16_tos_pd(void)\r
9938{\r
9939 if(FLAG_S)\r
9940 {\r
9941 uint new_sr = OPER_AY_PD_16();\r
9942 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
9943 m68ki_set_sr(new_sr);\r
9944 return;\r
9945 }\r
9946 m68ki_exception_privilege_violation();\r
9947}\r
9948\r
9949\r
9950void m68k_op_move_16_tos_di(void)\r
9951{\r
9952 if(FLAG_S)\r
9953 {\r
9954 uint new_sr = OPER_AY_DI_16();\r
9955 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
9956 m68ki_set_sr(new_sr);\r
9957 return;\r
9958 }\r
9959 m68ki_exception_privilege_violation();\r
9960}\r
9961\r
9962\r
9963void m68k_op_move_16_tos_ix(void)\r
9964{\r
9965 if(FLAG_S)\r
9966 {\r
9967 uint new_sr = OPER_AY_IX_16();\r
9968 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
9969 m68ki_set_sr(new_sr);\r
9970 return;\r
9971 }\r
9972 m68ki_exception_privilege_violation();\r
9973}\r
9974\r
9975\r
9976void m68k_op_move_16_tos_aw(void)\r
9977{\r
9978 if(FLAG_S)\r
9979 {\r
9980 uint new_sr = OPER_AW_16();\r
9981 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
9982 m68ki_set_sr(new_sr);\r
9983 return;\r
9984 }\r
9985 m68ki_exception_privilege_violation();\r
9986}\r
9987\r
9988\r
9989void m68k_op_move_16_tos_al(void)\r
9990{\r
9991 if(FLAG_S)\r
9992 {\r
9993 uint new_sr = OPER_AL_16();\r
9994 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
9995 m68ki_set_sr(new_sr);\r
9996 return;\r
9997 }\r
9998 m68ki_exception_privilege_violation();\r
9999}\r
10000\r
10001\r
10002void m68k_op_move_16_tos_pcdi(void)\r
10003{\r
10004 if(FLAG_S)\r
10005 {\r
10006 uint new_sr = OPER_PCDI_16();\r
10007 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10008 m68ki_set_sr(new_sr);\r
10009 return;\r
10010 }\r
10011 m68ki_exception_privilege_violation();\r
10012}\r
10013\r
10014\r
10015void m68k_op_move_16_tos_pcix(void)\r
10016{\r
10017 if(FLAG_S)\r
10018 {\r
10019 uint new_sr = OPER_PCIX_16();\r
10020 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10021 m68ki_set_sr(new_sr);\r
10022 return;\r
10023 }\r
10024 m68ki_exception_privilege_violation();\r
10025}\r
10026\r
10027\r
10028void m68k_op_move_16_tos_i(void)\r
10029{\r
10030 if(FLAG_S)\r
10031 {\r
10032 uint new_sr = OPER_I_16();\r
10033 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10034 m68ki_set_sr(new_sr);\r
10035 return;\r
10036 }\r
10037 m68ki_exception_privilege_violation();\r
10038}\r
10039\r
10040\r
10041void m68k_op_move_32_fru(void)\r
10042{\r
10043 if(FLAG_S)\r
10044 {\r
10045 AY = REG_USP;\r
10046 return;\r
10047 }\r
10048 m68ki_exception_privilege_violation();\r
10049}\r
10050\r
10051\r
10052void m68k_op_move_32_tou(void)\r
10053{\r
10054 if(FLAG_S)\r
10055 {\r
10056 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10057 REG_USP = AY;\r
10058 return;\r
10059 }\r
10060 m68ki_exception_privilege_violation();\r
10061}\r
10062\r
10063\r
10064void m68k_op_movec_32_cr(void)\r
10065{\r
10066 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
10067 {\r
10068 if(FLAG_S)\r
10069 {\r
10070 uint word2 = OPER_I_16();\r
10071\r
10072 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10073 switch (word2 & 0xfff)\r
10074 {\r
10075 case 0x000: /* SFC */\r
10076 REG_DA[(word2 >> 12) & 15] = REG_SFC;\r
10077 return;\r
10078 case 0x001: /* DFC */\r
10079 REG_DA[(word2 >> 12) & 15] = REG_DFC;\r
10080 return;\r
10081 case 0x002: /* CACR */\r
10082 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
10083 {\r
10084 REG_DA[(word2 >> 12) & 15] = REG_CACR;\r
10085 return;\r
10086 }\r
10087 return;\r
10088 case 0x800: /* USP */\r
10089 REG_DA[(word2 >> 12) & 15] = REG_USP;\r
10090 return;\r
10091 case 0x801: /* VBR */\r
10092 REG_DA[(word2 >> 12) & 15] = REG_VBR;\r
10093 return;\r
10094 case 0x802: /* CAAR */\r
10095 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
10096 {\r
10097 REG_DA[(word2 >> 12) & 15] = REG_CAAR;\r
10098 return;\r
10099 }\r
10100 m68ki_exception_illegal();\r
10101 break;\r
10102 case 0x803: /* MSP */\r
10103 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
10104 {\r
10105 REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_SP : REG_MSP;\r
10106 return;\r
10107 }\r
10108 m68ki_exception_illegal();\r
10109 return;\r
10110 case 0x804: /* ISP */\r
10111 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
10112 {\r
10113 REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_ISP : REG_SP;\r
10114 return;\r
10115 }\r
10116 m68ki_exception_illegal();\r
10117 return;\r
10118 case 0x003: /* TC */\r
10119 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10120 {\r
10121 /* TODO */\r
10122 return;\r
10123 }\r
10124 m68ki_exception_illegal();\r
10125 return;\r
10126 case 0x004: /* ITT0 */\r
10127 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10128 {\r
10129 /* TODO */\r
10130 return;\r
10131 }\r
10132 m68ki_exception_illegal();\r
10133 return;\r
10134 case 0x005: /* ITT1 */\r
10135 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10136 {\r
10137 /* TODO */\r
10138 return;\r
10139 }\r
10140 m68ki_exception_illegal();\r
10141 return;\r
10142 case 0x006: /* DTT0 */\r
10143 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10144 {\r
10145 /* TODO */\r
10146 return;\r
10147 }\r
10148 m68ki_exception_illegal();\r
10149 return;\r
10150 case 0x007: /* DTT1 */\r
10151 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10152 {\r
10153 /* TODO */\r
10154 return;\r
10155 }\r
10156 m68ki_exception_illegal();\r
10157 return;\r
10158 case 0x805: /* MMUSR */\r
10159 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10160 {\r
10161 /* TODO */\r
10162 return;\r
10163 }\r
10164 m68ki_exception_illegal();\r
10165 return;\r
10166 case 0x806: /* URP */\r
10167 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10168 {\r
10169 /* TODO */\r
10170 return;\r
10171 }\r
10172 m68ki_exception_illegal();\r
10173 return;\r
10174 case 0x807: /* SRP */\r
10175 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10176 {\r
10177 /* TODO */\r
10178 return;\r
10179 }\r
10180 m68ki_exception_illegal();\r
10181 return;\r
10182 default:\r
10183 m68ki_exception_illegal();\r
10184 return;\r
10185 }\r
10186 }\r
10187 m68ki_exception_privilege_violation();\r
10188 return;\r
10189 }\r
10190 m68ki_exception_illegal();\r
10191}\r
10192\r
10193\r
10194void m68k_op_movec_32_rc(void)\r
10195{\r
10196 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
10197 {\r
10198 if(FLAG_S)\r
10199 {\r
10200 uint word2 = OPER_I_16();\r
10201\r
10202 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10203 switch (word2 & 0xfff)\r
10204 {\r
10205 case 0x000: /* SFC */\r
10206 REG_SFC = REG_DA[(word2 >> 12) & 15] & 7;\r
10207 return;\r
10208 case 0x001: /* DFC */\r
10209 REG_DFC = REG_DA[(word2 >> 12) & 15] & 7;\r
10210 return;\r
10211 case 0x002: /* CACR */\r
10212 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
10213 {\r
10214 REG_CACR = REG_DA[(word2 >> 12) & 15];\r
10215 return;\r
10216 }\r
10217 m68ki_exception_illegal();\r
10218 return;\r
10219 case 0x800: /* USP */\r
10220 REG_USP = REG_DA[(word2 >> 12) & 15];\r
10221 return;\r
10222 case 0x801: /* VBR */\r
10223 REG_VBR = REG_DA[(word2 >> 12) & 15];\r
10224 return;\r
10225 case 0x802: /* CAAR */\r
10226 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
10227 {\r
10228 REG_CAAR = REG_DA[(word2 >> 12) & 15];\r
10229 return;\r
10230 }\r
10231 m68ki_exception_illegal();\r
10232 return;\r
10233 case 0x803: /* MSP */\r
10234 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
10235 {\r
10236 /* we are in supervisor mode so just check for M flag */\r
10237 if(!FLAG_M)\r
10238 {\r
10239 REG_MSP = REG_DA[(word2 >> 12) & 15];\r
10240 return;\r
10241 }\r
10242 REG_SP = REG_DA[(word2 >> 12) & 15];\r
10243 return;\r
10244 }\r
10245 m68ki_exception_illegal();\r
10246 return;\r
10247 case 0x804: /* ISP */\r
10248 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
10249 {\r
10250 if(!FLAG_M)\r
10251 {\r
10252 REG_SP = REG_DA[(word2 >> 12) & 15];\r
10253 return;\r
10254 }\r
10255 REG_ISP = REG_DA[(word2 >> 12) & 15];\r
10256 return;\r
10257 }\r
10258 m68ki_exception_illegal();\r
10259 return;\r
10260 case 0x003: /* TC */\r
10261 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10262 {\r
10263 /* TODO */\r
10264 return;\r
10265 }\r
10266 m68ki_exception_illegal();\r
10267 return;\r
10268 case 0x004: /* ITT0 */\r
10269 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10270 {\r
10271 /* TODO */\r
10272 return;\r
10273 }\r
10274 m68ki_exception_illegal();\r
10275 return;\r
10276 case 0x005: /* ITT1 */\r
10277 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10278 {\r
10279 /* TODO */\r
10280 return;\r
10281 }\r
10282 m68ki_exception_illegal();\r
10283 return;\r
10284 case 0x006: /* DTT0 */\r
10285 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10286 {\r
10287 /* TODO */\r
10288 return;\r
10289 }\r
10290 m68ki_exception_illegal();\r
10291 return;\r
10292 case 0x007: /* DTT1 */\r
10293 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10294 {\r
10295 /* TODO */\r
10296 return;\r
10297 }\r
10298 m68ki_exception_illegal();\r
10299 return;\r
10300 case 0x805: /* MMUSR */\r
10301 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10302 {\r
10303 /* TODO */\r
10304 return;\r
10305 }\r
10306 m68ki_exception_illegal();\r
10307 return;\r
10308 case 0x806: /* URP */\r
10309 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10310 {\r
10311 /* TODO */\r
10312 return;\r
10313 }\r
10314 m68ki_exception_illegal();\r
10315 return;\r
10316 case 0x807: /* SRP */\r
10317 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))\r
10318 {\r
10319 /* TODO */\r
10320 return;\r
10321 }\r
10322 m68ki_exception_illegal();\r
10323 return;\r
10324 default:\r
10325 m68ki_exception_illegal();\r
10326 return;\r
10327 }\r
10328 }\r
10329 m68ki_exception_privilege_violation();\r
10330 return;\r
10331 }\r
10332 m68ki_exception_illegal();\r
10333}\r
10334\r
10335\r
10336void m68k_op_movem_16_re_pd(void)\r
10337{\r
10338 uint i = 0;\r
10339 uint register_list = OPER_I_16();\r
10340 uint ea = AY;\r
10341 uint count = 0;\r
10342\r
10343 for(; i < 16; i++)\r
10344 if(register_list & (1 << i))\r
10345 {\r
10346 ea -= 2;\r
10347 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[15-i]));\r
10348 count++;\r
10349 }\r
10350 AY = ea;\r
10351\r
10352 USE_CYCLES(count<<CYC_MOVEM_W);\r
10353}\r
10354\r
10355\r
10356void m68k_op_movem_16_re_ai(void)\r
10357{\r
10358 uint i = 0;\r
10359 uint register_list = OPER_I_16();\r
10360 uint ea = EA_AY_AI_16();\r
10361 uint count = 0;\r
10362\r
10363 for(; i < 16; i++)\r
10364 if(register_list & (1 << i))\r
10365 {\r
10366 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));\r
10367 ea += 2;\r
10368 count++;\r
10369 }\r
10370\r
10371 USE_CYCLES(count<<CYC_MOVEM_W);\r
10372}\r
10373\r
10374\r
10375void m68k_op_movem_16_re_di(void)\r
10376{\r
10377 uint i = 0;\r
10378 uint register_list = OPER_I_16();\r
10379 uint ea = EA_AY_DI_16();\r
10380 uint count = 0;\r
10381\r
10382 for(; i < 16; i++)\r
10383 if(register_list & (1 << i))\r
10384 {\r
10385 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));\r
10386 ea += 2;\r
10387 count++;\r
10388 }\r
10389\r
10390 USE_CYCLES(count<<CYC_MOVEM_W);\r
10391}\r
10392\r
10393\r
10394void m68k_op_movem_16_re_ix(void)\r
10395{\r
10396 uint i = 0;\r
10397 uint register_list = OPER_I_16();\r
10398 uint ea = EA_AY_IX_16();\r
10399 uint count = 0;\r
10400\r
10401 for(; i < 16; i++)\r
10402 if(register_list & (1 << i))\r
10403 {\r
10404 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));\r
10405 ea += 2;\r
10406 count++;\r
10407 }\r
10408\r
10409 USE_CYCLES(count<<CYC_MOVEM_W);\r
10410}\r
10411\r
10412\r
10413void m68k_op_movem_16_re_aw(void)\r
10414{\r
10415 uint i = 0;\r
10416 uint register_list = OPER_I_16();\r
10417 uint ea = EA_AW_16();\r
10418 uint count = 0;\r
10419\r
10420 for(; i < 16; i++)\r
10421 if(register_list & (1 << i))\r
10422 {\r
10423 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));\r
10424 ea += 2;\r
10425 count++;\r
10426 }\r
10427\r
10428 USE_CYCLES(count<<CYC_MOVEM_W);\r
10429}\r
10430\r
10431\r
10432void m68k_op_movem_16_re_al(void)\r
10433{\r
10434 uint i = 0;\r
10435 uint register_list = OPER_I_16();\r
10436 uint ea = EA_AL_16();\r
10437 uint count = 0;\r
10438\r
10439 for(; i < 16; i++)\r
10440 if(register_list & (1 << i))\r
10441 {\r
10442 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));\r
10443 ea += 2;\r
10444 count++;\r
10445 }\r
10446\r
10447 USE_CYCLES(count<<CYC_MOVEM_W);\r
10448}\r
10449\r
10450\r
10451void m68k_op_movem_32_re_pd(void)\r
10452{\r
10453 uint i = 0;\r
10454 uint register_list = OPER_I_16();\r
10455 uint ea = AY;\r
10456 uint count = 0;\r
10457\r
10458 for(; i < 16; i++)\r
10459 if(register_list & (1 << i))\r
10460 {\r
10461 ea -= 4;\r
10462 m68ki_write_32(ea, REG_DA[15-i]);\r
10463 count++;\r
10464 }\r
10465 AY = ea;\r
10466\r
10467 USE_CYCLES(count<<CYC_MOVEM_L);\r
10468}\r
10469\r
10470\r
10471void m68k_op_movem_32_re_ai(void)\r
10472{\r
10473 uint i = 0;\r
10474 uint register_list = OPER_I_16();\r
10475 uint ea = EA_AY_AI_32();\r
10476 uint count = 0;\r
10477\r
10478 for(; i < 16; i++)\r
10479 if(register_list & (1 << i))\r
10480 {\r
10481 m68ki_write_32(ea, REG_DA[i]);\r
10482 ea += 4;\r
10483 count++;\r
10484 }\r
10485\r
10486 USE_CYCLES(count<<CYC_MOVEM_L);\r
10487}\r
10488\r
10489\r
10490void m68k_op_movem_32_re_di(void)\r
10491{\r
10492 uint i = 0;\r
10493 uint register_list = OPER_I_16();\r
10494 uint ea = EA_AY_DI_32();\r
10495 uint count = 0;\r
10496\r
10497 for(; i < 16; i++)\r
10498 if(register_list & (1 << i))\r
10499 {\r
10500 m68ki_write_32(ea, REG_DA[i]);\r
10501 ea += 4;\r
10502 count++;\r
10503 }\r
10504\r
10505 USE_CYCLES(count<<CYC_MOVEM_L);\r
10506}\r
10507\r
10508\r
10509void m68k_op_movem_32_re_ix(void)\r
10510{\r
10511 uint i = 0;\r
10512 uint register_list = OPER_I_16();\r
10513 uint ea = EA_AY_IX_32();\r
10514 uint count = 0;\r
10515\r
10516 for(; i < 16; i++)\r
10517 if(register_list & (1 << i))\r
10518 {\r
10519 m68ki_write_32(ea, REG_DA[i]);\r
10520 ea += 4;\r
10521 count++;\r
10522 }\r
10523\r
10524 USE_CYCLES(count<<CYC_MOVEM_L);\r
10525}\r
10526\r
10527\r
10528void m68k_op_movem_32_re_aw(void)\r
10529{\r
10530 uint i = 0;\r
10531 uint register_list = OPER_I_16();\r
10532 uint ea = EA_AW_32();\r
10533 uint count = 0;\r
10534\r
10535 for(; i < 16; i++)\r
10536 if(register_list & (1 << i))\r
10537 {\r
10538 m68ki_write_32(ea, REG_DA[i]);\r
10539 ea += 4;\r
10540 count++;\r
10541 }\r
10542\r
10543 USE_CYCLES(count<<CYC_MOVEM_L);\r
10544}\r
10545\r
10546\r
10547void m68k_op_movem_32_re_al(void)\r
10548{\r
10549 uint i = 0;\r
10550 uint register_list = OPER_I_16();\r
10551 uint ea = EA_AL_32();\r
10552 uint count = 0;\r
10553\r
10554 for(; i < 16; i++)\r
10555 if(register_list & (1 << i))\r
10556 {\r
10557 m68ki_write_32(ea, REG_DA[i]);\r
10558 ea += 4;\r
10559 count++;\r
10560 }\r
10561\r
10562 USE_CYCLES(count<<CYC_MOVEM_L);\r
10563}\r
10564\r
10565\r
10566void m68k_op_movem_16_er_pi(void)\r
10567{\r
10568 uint i = 0;\r
10569 uint register_list = OPER_I_16();\r
10570 uint ea = AY;\r
10571 uint count = 0;\r
10572\r
10573 for(; i < 16; i++)\r
10574 if(register_list & (1 << i))\r
10575 {\r
10576 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));\r
10577 ea += 2;\r
10578 count++;\r
10579 }\r
10580 AY = ea;\r
10581\r
10582 USE_CYCLES(count<<CYC_MOVEM_W);\r
10583}\r
10584\r
10585\r
10586void m68k_op_movem_16_er_pcdi(void)\r
10587{\r
10588 uint i = 0;\r
10589 uint register_list = OPER_I_16();\r
10590 uint ea = EA_PCDI_16();\r
10591 uint count = 0;\r
10592\r
10593 for(; i < 16; i++)\r
10594 if(register_list & (1 << i))\r
10595 {\r
10596 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea)));\r
10597 ea += 2;\r
10598 count++;\r
10599 }\r
10600\r
10601 USE_CYCLES(count<<CYC_MOVEM_W);\r
10602}\r
10603\r
10604\r
10605void m68k_op_movem_16_er_pcix(void)\r
10606{\r
10607 uint i = 0;\r
10608 uint register_list = OPER_I_16();\r
10609 uint ea = EA_PCIX_16();\r
10610 uint count = 0;\r
10611\r
10612 for(; i < 16; i++)\r
10613 if(register_list & (1 << i))\r
10614 {\r
10615 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea)));\r
10616 ea += 2;\r
10617 count++;\r
10618 }\r
10619\r
10620 USE_CYCLES(count<<CYC_MOVEM_W);\r
10621}\r
10622\r
10623\r
10624void m68k_op_movem_16_er_ai(void)\r
10625{\r
10626 uint i = 0;\r
10627 uint register_list = OPER_I_16();\r
10628 uint ea = EA_AY_AI_16();\r
10629 uint count = 0;\r
10630\r
10631 for(; i < 16; i++)\r
10632 if(register_list & (1 << i))\r
10633 {\r
10634 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));\r
10635 ea += 2;\r
10636 count++;\r
10637 }\r
10638\r
10639 USE_CYCLES(count<<CYC_MOVEM_W);\r
10640}\r
10641\r
10642\r
10643void m68k_op_movem_16_er_di(void)\r
10644{\r
10645 uint i = 0;\r
10646 uint register_list = OPER_I_16();\r
10647 uint ea = EA_AY_DI_16();\r
10648 uint count = 0;\r
10649\r
10650 for(; i < 16; i++)\r
10651 if(register_list & (1 << i))\r
10652 {\r
10653 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));\r
10654 ea += 2;\r
10655 count++;\r
10656 }\r
10657\r
10658 USE_CYCLES(count<<CYC_MOVEM_W);\r
10659}\r
10660\r
10661\r
10662void m68k_op_movem_16_er_ix(void)\r
10663{\r
10664 uint i = 0;\r
10665 uint register_list = OPER_I_16();\r
10666 uint ea = EA_AY_IX_16();\r
10667 uint count = 0;\r
10668\r
10669 for(; i < 16; i++)\r
10670 if(register_list & (1 << i))\r
10671 {\r
10672 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));\r
10673 ea += 2;\r
10674 count++;\r
10675 }\r
10676\r
10677 USE_CYCLES(count<<CYC_MOVEM_W);\r
10678}\r
10679\r
10680\r
10681void m68k_op_movem_16_er_aw(void)\r
10682{\r
10683 uint i = 0;\r
10684 uint register_list = OPER_I_16();\r
10685 uint ea = EA_AW_16();\r
10686 uint count = 0;\r
10687\r
10688 for(; i < 16; i++)\r
10689 if(register_list & (1 << i))\r
10690 {\r
10691 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));\r
10692 ea += 2;\r
10693 count++;\r
10694 }\r
10695\r
10696 USE_CYCLES(count<<CYC_MOVEM_W);\r
10697}\r
10698\r
10699\r
10700void m68k_op_movem_16_er_al(void)\r
10701{\r
10702 uint i = 0;\r
10703 uint register_list = OPER_I_16();\r
10704 uint ea = EA_AL_16();\r
10705 uint count = 0;\r
10706\r
10707 for(; i < 16; i++)\r
10708 if(register_list & (1 << i))\r
10709 {\r
10710 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));\r
10711 ea += 2;\r
10712 count++;\r
10713 }\r
10714\r
10715 USE_CYCLES(count<<CYC_MOVEM_W);\r
10716}\r
10717\r
10718\r
10719void m68k_op_movem_32_er_pi(void)\r
10720{\r
10721 uint i = 0;\r
10722 uint register_list = OPER_I_16();\r
10723 uint ea = AY;\r
10724 uint count = 0;\r
10725\r
10726 for(; i < 16; i++)\r
10727 if(register_list & (1 << i))\r
10728 {\r
10729 REG_DA[i] = m68ki_read_32(ea);\r
10730 ea += 4;\r
10731 count++;\r
10732 }\r
10733 AY = ea;\r
10734\r
10735 USE_CYCLES(count<<CYC_MOVEM_L);\r
10736}\r
10737\r
10738\r
10739void m68k_op_movem_32_er_pcdi(void)\r
10740{\r
10741 uint i = 0;\r
10742 uint register_list = OPER_I_16();\r
10743 uint ea = EA_PCDI_32();\r
10744 uint count = 0;\r
10745\r
10746 for(; i < 16; i++)\r
10747 if(register_list & (1 << i))\r
10748 {\r
10749 REG_DA[i] = m68ki_read_pcrel_32(ea);\r
10750 ea += 4;\r
10751 count++;\r
10752 }\r
10753\r
10754 USE_CYCLES(count<<CYC_MOVEM_L);\r
10755}\r
10756\r
10757\r
10758void m68k_op_movem_32_er_pcix(void)\r
10759{\r
10760 uint i = 0;\r
10761 uint register_list = OPER_I_16();\r
10762 uint ea = EA_PCIX_32();\r
10763 uint count = 0;\r
10764\r
10765 for(; i < 16; i++)\r
10766 if(register_list & (1 << i))\r
10767 {\r
10768 REG_DA[i] = m68ki_read_pcrel_32(ea);\r
10769 ea += 4;\r
10770 count++;\r
10771 }\r
10772\r
10773 USE_CYCLES(count<<CYC_MOVEM_L);\r
10774}\r
10775\r
10776\r
10777void m68k_op_movem_32_er_ai(void)\r
10778{\r
10779 uint i = 0;\r
10780 uint register_list = OPER_I_16();\r
10781 uint ea = EA_AY_AI_32();\r
10782 uint count = 0;\r
10783\r
10784 for(; i < 16; i++)\r
10785 if(register_list & (1 << i))\r
10786 {\r
10787 REG_DA[i] = m68ki_read_32(ea);\r
10788 ea += 4;\r
10789 count++;\r
10790 }\r
10791\r
10792 USE_CYCLES(count<<CYC_MOVEM_L);\r
10793}\r
10794\r
10795\r
10796void m68k_op_movem_32_er_di(void)\r
10797{\r
10798 uint i = 0;\r
10799 uint register_list = OPER_I_16();\r
10800 uint ea = EA_AY_DI_32();\r
10801 uint count = 0;\r
10802\r
10803 for(; i < 16; i++)\r
10804 if(register_list & (1 << i))\r
10805 {\r
10806 REG_DA[i] = m68ki_read_32(ea);\r
10807 ea += 4;\r
10808 count++;\r
10809 }\r
10810\r
10811 USE_CYCLES(count<<CYC_MOVEM_L);\r
10812}\r
10813\r
10814\r
10815void m68k_op_movem_32_er_ix(void)\r
10816{\r
10817 uint i = 0;\r
10818 uint register_list = OPER_I_16();\r
10819 uint ea = EA_AY_IX_32();\r
10820 uint count = 0;\r
10821\r
10822 for(; i < 16; i++)\r
10823 if(register_list & (1 << i))\r
10824 {\r
10825 REG_DA[i] = m68ki_read_32(ea);\r
10826 ea += 4;\r
10827 count++;\r
10828 }\r
10829\r
10830 USE_CYCLES(count<<CYC_MOVEM_L);\r
10831}\r
10832\r
10833\r
10834void m68k_op_movem_32_er_aw(void)\r
10835{\r
10836 uint i = 0;\r
10837 uint register_list = OPER_I_16();\r
10838 uint ea = EA_AW_32();\r
10839 uint count = 0;\r
10840\r
10841 for(; i < 16; i++)\r
10842 if(register_list & (1 << i))\r
10843 {\r
10844 REG_DA[i] = m68ki_read_32(ea);\r
10845 ea += 4;\r
10846 count++;\r
10847 }\r
10848\r
10849 USE_CYCLES(count<<CYC_MOVEM_L);\r
10850}\r
10851\r
10852\r
10853void m68k_op_movem_32_er_al(void)\r
10854{\r
10855 uint i = 0;\r
10856 uint register_list = OPER_I_16();\r
10857 uint ea = EA_AL_32();\r
10858 uint count = 0;\r
10859\r
10860 for(; i < 16; i++)\r
10861 if(register_list & (1 << i))\r
10862 {\r
10863 REG_DA[i] = m68ki_read_32(ea);\r
10864 ea += 4;\r
10865 count++;\r
10866 }\r
10867\r
10868 USE_CYCLES(count<<CYC_MOVEM_L);\r
10869}\r
10870\r
10871\r
10872void m68k_op_movep_16_re(void)\r
10873{\r
10874 uint ea = EA_AY_DI_16();\r
10875 uint src = DX;\r
10876\r
10877 m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 8));\r
10878 m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src));\r
10879}\r
10880\r
10881\r
10882void m68k_op_movep_32_re(void)\r
10883{\r
10884 uint ea = EA_AY_DI_32();\r
10885 uint src = DX;\r
10886\r
10887 m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 24));\r
10888 m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 16));\r
10889 m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 8));\r
10890 m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src));\r
10891}\r
10892\r
10893\r
10894void m68k_op_movep_16_er(void)\r
10895{\r
10896 uint ea = EA_AY_DI_16();\r
10897 uint* r_dst = &DX;\r
10898\r
10899 *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(ea) << 8) + m68ki_read_8(ea + 2));\r
10900}\r
10901\r
10902\r
10903void m68k_op_movep_32_er(void)\r
10904{\r
10905 uint ea = EA_AY_DI_32();\r
10906\r
10907 DX = (m68ki_read_8(ea) << 24) + (m68ki_read_8(ea + 2) << 16)\r
10908 + (m68ki_read_8(ea + 4) << 8) + m68ki_read_8(ea + 6);\r
10909}\r
10910\r
10911\r
10912void m68k_op_moves_8_ai(void)\r
10913{\r
10914 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
10915 {\r
10916 if(FLAG_S)\r
10917 {\r
10918 uint word2 = OPER_I_16();\r
10919 uint ea = EA_AY_AI_8();\r
10920\r
10921 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10922 if(BIT_B(word2)) /* Register to memory */\r
10923 {\r
10924 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
10925 return;\r
10926 }\r
10927 if(BIT_F(word2)) /* Memory to address register */\r
10928 {\r
10929 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
10930 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
10931 USE_CYCLES(2);\r
10932 return;\r
10933 }\r
10934 /* Memory to data register */\r
10935 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
10936 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
10937 USE_CYCLES(2);\r
10938 return;\r
10939 }\r
10940 m68ki_exception_privilege_violation();\r
10941 return;\r
10942 }\r
10943 m68ki_exception_illegal();\r
10944}\r
10945\r
10946\r
10947void m68k_op_moves_8_pi(void)\r
10948{\r
10949 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
10950 {\r
10951 if(FLAG_S)\r
10952 {\r
10953 uint word2 = OPER_I_16();\r
10954 uint ea = EA_AY_PI_8();\r
10955\r
10956 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10957 if(BIT_B(word2)) /* Register to memory */\r
10958 {\r
10959 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
10960 return;\r
10961 }\r
10962 if(BIT_F(word2)) /* Memory to address register */\r
10963 {\r
10964 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
10965 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
10966 USE_CYCLES(2);\r
10967 return;\r
10968 }\r
10969 /* Memory to data register */\r
10970 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
10971 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
10972 USE_CYCLES(2);\r
10973 return;\r
10974 }\r
10975 m68ki_exception_privilege_violation();\r
10976 return;\r
10977 }\r
10978 m68ki_exception_illegal();\r
10979}\r
10980\r
10981\r
10982void m68k_op_moves_8_pi7(void)\r
10983{\r
10984 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
10985 {\r
10986 if(FLAG_S)\r
10987 {\r
10988 uint word2 = OPER_I_16();\r
10989 uint ea = EA_A7_PI_8();\r
10990\r
10991 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
10992 if(BIT_B(word2)) /* Register to memory */\r
10993 {\r
10994 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
10995 return;\r
10996 }\r
10997 if(BIT_F(word2)) /* Memory to address register */\r
10998 {\r
10999 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
11000 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11001 USE_CYCLES(2);\r
11002 return;\r
11003 }\r
11004 /* Memory to data register */\r
11005 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
11006 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11007 USE_CYCLES(2);\r
11008 return;\r
11009 }\r
11010 m68ki_exception_privilege_violation();\r
11011 return;\r
11012 }\r
11013 m68ki_exception_illegal();\r
11014}\r
11015\r
11016\r
11017void m68k_op_moves_8_pd(void)\r
11018{\r
11019 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11020 {\r
11021 if(FLAG_S)\r
11022 {\r
11023 uint word2 = OPER_I_16();\r
11024 uint ea = EA_AY_PD_8();\r
11025\r
11026 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11027 if(BIT_B(word2)) /* Register to memory */\r
11028 {\r
11029 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
11030 return;\r
11031 }\r
11032 if(BIT_F(word2)) /* Memory to address register */\r
11033 {\r
11034 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
11035 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11036 USE_CYCLES(2);\r
11037 return;\r
11038 }\r
11039 /* Memory to data register */\r
11040 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
11041 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11042 USE_CYCLES(2);\r
11043 return;\r
11044 }\r
11045 m68ki_exception_privilege_violation();\r
11046 return;\r
11047 }\r
11048 m68ki_exception_illegal();\r
11049}\r
11050\r
11051\r
11052void m68k_op_moves_8_pd7(void)\r
11053{\r
11054 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11055 {\r
11056 if(FLAG_S)\r
11057 {\r
11058 uint word2 = OPER_I_16();\r
11059 uint ea = EA_A7_PD_8();\r
11060\r
11061 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11062 if(BIT_B(word2)) /* Register to memory */\r
11063 {\r
11064 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
11065 return;\r
11066 }\r
11067 if(BIT_F(word2)) /* Memory to address register */\r
11068 {\r
11069 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
11070 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11071 USE_CYCLES(2);\r
11072 return;\r
11073 }\r
11074 /* Memory to data register */\r
11075 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
11076 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11077 USE_CYCLES(2);\r
11078 return;\r
11079 }\r
11080 m68ki_exception_privilege_violation();\r
11081 return;\r
11082 }\r
11083 m68ki_exception_illegal();\r
11084}\r
11085\r
11086\r
11087void m68k_op_moves_8_di(void)\r
11088{\r
11089 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11090 {\r
11091 if(FLAG_S)\r
11092 {\r
11093 uint word2 = OPER_I_16();\r
11094 uint ea = EA_AY_DI_8();\r
11095\r
11096 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11097 if(BIT_B(word2)) /* Register to memory */\r
11098 {\r
11099 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
11100 return;\r
11101 }\r
11102 if(BIT_F(word2)) /* Memory to address register */\r
11103 {\r
11104 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
11105 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11106 USE_CYCLES(2);\r
11107 return;\r
11108 }\r
11109 /* Memory to data register */\r
11110 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
11111 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11112 USE_CYCLES(2);\r
11113 return;\r
11114 }\r
11115 m68ki_exception_privilege_violation();\r
11116 return;\r
11117 }\r
11118 m68ki_exception_illegal();\r
11119}\r
11120\r
11121\r
11122void m68k_op_moves_8_ix(void)\r
11123{\r
11124 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11125 {\r
11126 if(FLAG_S)\r
11127 {\r
11128 uint word2 = OPER_I_16();\r
11129 uint ea = EA_AY_IX_8();\r
11130\r
11131 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11132 if(BIT_B(word2)) /* Register to memory */\r
11133 {\r
11134 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
11135 return;\r
11136 }\r
11137 if(BIT_F(word2)) /* Memory to address register */\r
11138 {\r
11139 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
11140 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11141 USE_CYCLES(2);\r
11142 return;\r
11143 }\r
11144 /* Memory to data register */\r
11145 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
11146 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11147 USE_CYCLES(2);\r
11148 return;\r
11149 }\r
11150 m68ki_exception_privilege_violation();\r
11151 return;\r
11152 }\r
11153 m68ki_exception_illegal();\r
11154}\r
11155\r
11156\r
11157void m68k_op_moves_8_aw(void)\r
11158{\r
11159 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11160 {\r
11161 if(FLAG_S)\r
11162 {\r
11163 uint word2 = OPER_I_16();\r
11164 uint ea = EA_AW_8();\r
11165\r
11166 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11167 if(BIT_B(word2)) /* Register to memory */\r
11168 {\r
11169 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
11170 return;\r
11171 }\r
11172 if(BIT_F(word2)) /* Memory to address register */\r
11173 {\r
11174 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
11175 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11176 USE_CYCLES(2);\r
11177 return;\r
11178 }\r
11179 /* Memory to data register */\r
11180 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
11181 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11182 USE_CYCLES(2);\r
11183 return;\r
11184 }\r
11185 m68ki_exception_privilege_violation();\r
11186 return;\r
11187 }\r
11188 m68ki_exception_illegal();\r
11189}\r
11190\r
11191\r
11192void m68k_op_moves_8_al(void)\r
11193{\r
11194 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11195 {\r
11196 if(FLAG_S)\r
11197 {\r
11198 uint word2 = OPER_I_16();\r
11199 uint ea = EA_AL_8();\r
11200\r
11201 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11202 if(BIT_B(word2)) /* Register to memory */\r
11203 {\r
11204 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));\r
11205 return;\r
11206 }\r
11207 if(BIT_F(word2)) /* Memory to address register */\r
11208 {\r
11209 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));\r
11210 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11211 USE_CYCLES(2);\r
11212 return;\r
11213 }\r
11214 /* Memory to data register */\r
11215 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);\r
11216 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11217 USE_CYCLES(2);\r
11218 return;\r
11219 }\r
11220 m68ki_exception_privilege_violation();\r
11221 return;\r
11222 }\r
11223 m68ki_exception_illegal();\r
11224}\r
11225\r
11226\r
11227void m68k_op_moves_16_ai(void)\r
11228{\r
11229 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11230 {\r
11231 if(FLAG_S)\r
11232 {\r
11233 uint word2 = OPER_I_16();\r
11234 uint ea = EA_AY_AI_16();\r
11235\r
11236 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11237 if(BIT_B(word2)) /* Register to memory */\r
11238 {\r
11239 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));\r
11240 return;\r
11241 }\r
11242 if(BIT_F(word2)) /* Memory to address register */\r
11243 {\r
11244 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));\r
11245 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11246 USE_CYCLES(2);\r
11247 return;\r
11248 }\r
11249 /* Memory to data register */\r
11250 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);\r
11251 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11252 USE_CYCLES(2);\r
11253 return;\r
11254 }\r
11255 m68ki_exception_privilege_violation();\r
11256 return;\r
11257 }\r
11258 m68ki_exception_illegal();\r
11259}\r
11260\r
11261\r
11262void m68k_op_moves_16_pi(void)\r
11263{\r
11264 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11265 {\r
11266 if(FLAG_S)\r
11267 {\r
11268 uint word2 = OPER_I_16();\r
11269 uint ea = EA_AY_PI_16();\r
11270\r
11271 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11272 if(BIT_B(word2)) /* Register to memory */\r
11273 {\r
11274 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));\r
11275 return;\r
11276 }\r
11277 if(BIT_F(word2)) /* Memory to address register */\r
11278 {\r
11279 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));\r
11280 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11281 USE_CYCLES(2);\r
11282 return;\r
11283 }\r
11284 /* Memory to data register */\r
11285 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);\r
11286 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11287 USE_CYCLES(2);\r
11288 return;\r
11289 }\r
11290 m68ki_exception_privilege_violation();\r
11291 return;\r
11292 }\r
11293 m68ki_exception_illegal();\r
11294}\r
11295\r
11296\r
11297void m68k_op_moves_16_pd(void)\r
11298{\r
11299 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11300 {\r
11301 if(FLAG_S)\r
11302 {\r
11303 uint word2 = OPER_I_16();\r
11304 uint ea = EA_AY_PD_16();\r
11305\r
11306 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11307 if(BIT_B(word2)) /* Register to memory */\r
11308 {\r
11309 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));\r
11310 return;\r
11311 }\r
11312 if(BIT_F(word2)) /* Memory to address register */\r
11313 {\r
11314 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));\r
11315 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11316 USE_CYCLES(2);\r
11317 return;\r
11318 }\r
11319 /* Memory to data register */\r
11320 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);\r
11321 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11322 USE_CYCLES(2);\r
11323 return;\r
11324 }\r
11325 m68ki_exception_privilege_violation();\r
11326 return;\r
11327 }\r
11328 m68ki_exception_illegal();\r
11329}\r
11330\r
11331\r
11332void m68k_op_moves_16_di(void)\r
11333{\r
11334 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11335 {\r
11336 if(FLAG_S)\r
11337 {\r
11338 uint word2 = OPER_I_16();\r
11339 uint ea = EA_AY_DI_16();\r
11340\r
11341 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11342 if(BIT_B(word2)) /* Register to memory */\r
11343 {\r
11344 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));\r
11345 return;\r
11346 }\r
11347 if(BIT_F(word2)) /* Memory to address register */\r
11348 {\r
11349 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));\r
11350 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11351 USE_CYCLES(2);\r
11352 return;\r
11353 }\r
11354 /* Memory to data register */\r
11355 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);\r
11356 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11357 USE_CYCLES(2);\r
11358 return;\r
11359 }\r
11360 m68ki_exception_privilege_violation();\r
11361 return;\r
11362 }\r
11363 m68ki_exception_illegal();\r
11364}\r
11365\r
11366\r
11367void m68k_op_moves_16_ix(void)\r
11368{\r
11369 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11370 {\r
11371 if(FLAG_S)\r
11372 {\r
11373 uint word2 = OPER_I_16();\r
11374 uint ea = EA_AY_IX_16();\r
11375\r
11376 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11377 if(BIT_B(word2)) /* Register to memory */\r
11378 {\r
11379 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));\r
11380 return;\r
11381 }\r
11382 if(BIT_F(word2)) /* Memory to address register */\r
11383 {\r
11384 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));\r
11385 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11386 USE_CYCLES(2);\r
11387 return;\r
11388 }\r
11389 /* Memory to data register */\r
11390 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);\r
11391 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11392 USE_CYCLES(2);\r
11393 return;\r
11394 }\r
11395 m68ki_exception_privilege_violation();\r
11396 return;\r
11397 }\r
11398 m68ki_exception_illegal();\r
11399}\r
11400\r
11401\r
11402void m68k_op_moves_16_aw(void)\r
11403{\r
11404 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11405 {\r
11406 if(FLAG_S)\r
11407 {\r
11408 uint word2 = OPER_I_16();\r
11409 uint ea = EA_AW_16();\r
11410\r
11411 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11412 if(BIT_B(word2)) /* Register to memory */\r
11413 {\r
11414 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));\r
11415 return;\r
11416 }\r
11417 if(BIT_F(word2)) /* Memory to address register */\r
11418 {\r
11419 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));\r
11420 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11421 USE_CYCLES(2);\r
11422 return;\r
11423 }\r
11424 /* Memory to data register */\r
11425 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);\r
11426 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11427 USE_CYCLES(2);\r
11428 return;\r
11429 }\r
11430 m68ki_exception_privilege_violation();\r
11431 return;\r
11432 }\r
11433 m68ki_exception_illegal();\r
11434}\r
11435\r
11436\r
11437void m68k_op_moves_16_al(void)\r
11438{\r
11439 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11440 {\r
11441 if(FLAG_S)\r
11442 {\r
11443 uint word2 = OPER_I_16();\r
11444 uint ea = EA_AL_16();\r
11445\r
11446 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11447 if(BIT_B(word2)) /* Register to memory */\r
11448 {\r
11449 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));\r
11450 return;\r
11451 }\r
11452 if(BIT_F(word2)) /* Memory to address register */\r
11453 {\r
11454 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));\r
11455 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11456 USE_CYCLES(2);\r
11457 return;\r
11458 }\r
11459 /* Memory to data register */\r
11460 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);\r
11461 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11462 USE_CYCLES(2);\r
11463 return;\r
11464 }\r
11465 m68ki_exception_privilege_violation();\r
11466 return;\r
11467 }\r
11468 m68ki_exception_illegal();\r
11469}\r
11470\r
11471\r
11472void m68k_op_moves_32_ai(void)\r
11473{\r
11474 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11475 {\r
11476 if(FLAG_S)\r
11477 {\r
11478 uint word2 = OPER_I_16();\r
11479 uint ea = EA_AY_AI_32();\r
11480\r
11481 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11482 if(BIT_B(word2)) /* Register to memory */\r
11483 {\r
11484 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);\r
11485 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11486 USE_CYCLES(2);\r
11487 return;\r
11488 }\r
11489 /* Memory to register */\r
11490 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);\r
11491 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11492 USE_CYCLES(2);\r
11493 return;\r
11494 }\r
11495 m68ki_exception_privilege_violation();\r
11496 return;\r
11497 }\r
11498 m68ki_exception_illegal();\r
11499}\r
11500\r
11501\r
11502void m68k_op_moves_32_pi(void)\r
11503{\r
11504 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11505 {\r
11506 if(FLAG_S)\r
11507 {\r
11508 uint word2 = OPER_I_16();\r
11509 uint ea = EA_AY_PI_32();\r
11510\r
11511 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11512 if(BIT_B(word2)) /* Register to memory */\r
11513 {\r
11514 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);\r
11515 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11516 USE_CYCLES(2);\r
11517 return;\r
11518 }\r
11519 /* Memory to register */\r
11520 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);\r
11521 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11522 USE_CYCLES(2);\r
11523 return;\r
11524 }\r
11525 m68ki_exception_privilege_violation();\r
11526 return;\r
11527 }\r
11528 m68ki_exception_illegal();\r
11529}\r
11530\r
11531\r
11532void m68k_op_moves_32_pd(void)\r
11533{\r
11534 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11535 {\r
11536 if(FLAG_S)\r
11537 {\r
11538 uint word2 = OPER_I_16();\r
11539 uint ea = EA_AY_PD_32();\r
11540\r
11541 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11542 if(BIT_B(word2)) /* Register to memory */\r
11543 {\r
11544 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);\r
11545 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11546 USE_CYCLES(2);\r
11547 return;\r
11548 }\r
11549 /* Memory to register */\r
11550 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);\r
11551 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11552 USE_CYCLES(2);\r
11553 return;\r
11554 }\r
11555 m68ki_exception_privilege_violation();\r
11556 return;\r
11557 }\r
11558 m68ki_exception_illegal();\r
11559}\r
11560\r
11561\r
11562void m68k_op_moves_32_di(void)\r
11563{\r
11564 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11565 {\r
11566 if(FLAG_S)\r
11567 {\r
11568 uint word2 = OPER_I_16();\r
11569 uint ea = EA_AY_DI_32();\r
11570\r
11571 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11572 if(BIT_B(word2)) /* Register to memory */\r
11573 {\r
11574 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);\r
11575 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11576 USE_CYCLES(2);\r
11577 return;\r
11578 }\r
11579 /* Memory to register */\r
11580 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);\r
11581 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11582 USE_CYCLES(2);\r
11583 return;\r
11584 }\r
11585 m68ki_exception_privilege_violation();\r
11586 return;\r
11587 }\r
11588 m68ki_exception_illegal();\r
11589}\r
11590\r
11591\r
11592void m68k_op_moves_32_ix(void)\r
11593{\r
11594 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11595 {\r
11596 if(FLAG_S)\r
11597 {\r
11598 uint word2 = OPER_I_16();\r
11599 uint ea = EA_AY_IX_32();\r
11600\r
11601 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11602 if(BIT_B(word2)) /* Register to memory */\r
11603 {\r
11604 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);\r
11605 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11606 USE_CYCLES(2);\r
11607 return;\r
11608 }\r
11609 /* Memory to register */\r
11610 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);\r
11611 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11612 USE_CYCLES(2);\r
11613 return;\r
11614 }\r
11615 m68ki_exception_privilege_violation();\r
11616 return;\r
11617 }\r
11618 m68ki_exception_illegal();\r
11619}\r
11620\r
11621\r
11622void m68k_op_moves_32_aw(void)\r
11623{\r
11624 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11625 {\r
11626 if(FLAG_S)\r
11627 {\r
11628 uint word2 = OPER_I_16();\r
11629 uint ea = EA_AW_32();\r
11630\r
11631 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11632 if(BIT_B(word2)) /* Register to memory */\r
11633 {\r
11634 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);\r
11635 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11636 USE_CYCLES(2);\r
11637 return;\r
11638 }\r
11639 /* Memory to register */\r
11640 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);\r
11641 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11642 USE_CYCLES(2);\r
11643 return;\r
11644 }\r
11645 m68ki_exception_privilege_violation();\r
11646 return;\r
11647 }\r
11648 m68ki_exception_illegal();\r
11649}\r
11650\r
11651\r
11652void m68k_op_moves_32_al(void)\r
11653{\r
11654 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))\r
11655 {\r
11656 if(FLAG_S)\r
11657 {\r
11658 uint word2 = OPER_I_16();\r
11659 uint ea = EA_AL_32();\r
11660\r
11661 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */\r
11662 if(BIT_B(word2)) /* Register to memory */\r
11663 {\r
11664 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);\r
11665 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11666 USE_CYCLES(2);\r
11667 return;\r
11668 }\r
11669 /* Memory to register */\r
11670 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);\r
11671 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))\r
11672 USE_CYCLES(2);\r
11673 return;\r
11674 }\r
11675 m68ki_exception_privilege_violation();\r
11676 return;\r
11677 }\r
11678 m68ki_exception_illegal();\r
11679}\r
11680\r
11681\r
11682void m68k_op_moveq_32(void)\r
11683{\r
11684 uint res = DX = MAKE_INT_8(MASK_OUT_ABOVE_8(REG_IR));\r
11685\r
11686 FLAG_N = NFLAG_32(res);\r
11687 FLAG_Z = res;\r
11688 FLAG_V = VFLAG_CLEAR;\r
11689 FLAG_C = CFLAG_CLEAR;\r
11690}\r
11691\r
11692\r
11693void m68k_op_move16_32(void)\r
11694{\r
11695 UINT16 w2 = OPER_I_16();\r
11696 int ax = REG_IR & 7;\r
11697 int ay = (w2 >> 12) & 7;\r
11698\r
11699 m68ki_write_32(REG_A[ay], m68ki_read_32(REG_A[ax]));\r
11700 m68ki_write_32(REG_A[ay]+4, m68ki_read_32(REG_A[ax]+4));\r
11701 m68ki_write_32(REG_A[ay]+8, m68ki_read_32(REG_A[ax]+8));\r
11702 m68ki_write_32(REG_A[ay]+12, m68ki_read_32(REG_A[ax]+12));\r
11703\r
11704 REG_A[ax] += 16;\r
11705 REG_A[ay] += 16;\r
11706}\r
11707\r
11708\r
11709void m68k_op_muls_16_d(void)\r
11710{\r
11711 uint* r_dst = &DX;\r
11712 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(DY) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11713\r
11714 *r_dst = res;\r
11715\r
11716 FLAG_Z = res;\r
11717 FLAG_N = NFLAG_32(res);\r
11718 FLAG_V = VFLAG_CLEAR;\r
11719 FLAG_C = CFLAG_CLEAR;\r
11720}\r
11721\r
11722\r
11723void m68k_op_muls_16_ai(void)\r
11724{\r
11725 uint* r_dst = &DX;\r
11726 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_AI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11727\r
11728 *r_dst = res;\r
11729\r
11730 FLAG_Z = res;\r
11731 FLAG_N = NFLAG_32(res);\r
11732 FLAG_V = VFLAG_CLEAR;\r
11733 FLAG_C = CFLAG_CLEAR;\r
11734}\r
11735\r
11736\r
11737void m68k_op_muls_16_pi(void)\r
11738{\r
11739 uint* r_dst = &DX;\r
11740 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11741\r
11742 *r_dst = res;\r
11743\r
11744 FLAG_Z = res;\r
11745 FLAG_N = NFLAG_32(res);\r
11746 FLAG_V = VFLAG_CLEAR;\r
11747 FLAG_C = CFLAG_CLEAR;\r
11748}\r
11749\r
11750\r
11751void m68k_op_muls_16_pd(void)\r
11752{\r
11753 uint* r_dst = &DX;\r
11754 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PD_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11755\r
11756 *r_dst = res;\r
11757\r
11758 FLAG_Z = res;\r
11759 FLAG_N = NFLAG_32(res);\r
11760 FLAG_V = VFLAG_CLEAR;\r
11761 FLAG_C = CFLAG_CLEAR;\r
11762}\r
11763\r
11764\r
11765void m68k_op_muls_16_di(void)\r
11766{\r
11767 uint* r_dst = &DX;\r
11768 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_DI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11769\r
11770 *r_dst = res;\r
11771\r
11772 FLAG_Z = res;\r
11773 FLAG_N = NFLAG_32(res);\r
11774 FLAG_V = VFLAG_CLEAR;\r
11775 FLAG_C = CFLAG_CLEAR;\r
11776}\r
11777\r
11778\r
11779void m68k_op_muls_16_ix(void)\r
11780{\r
11781 uint* r_dst = &DX;\r
11782 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_IX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11783\r
11784 *r_dst = res;\r
11785\r
11786 FLAG_Z = res;\r
11787 FLAG_N = NFLAG_32(res);\r
11788 FLAG_V = VFLAG_CLEAR;\r
11789 FLAG_C = CFLAG_CLEAR;\r
11790}\r
11791\r
11792\r
11793void m68k_op_muls_16_aw(void)\r
11794{\r
11795 uint* r_dst = &DX;\r
11796 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AW_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11797\r
11798 *r_dst = res;\r
11799\r
11800 FLAG_Z = res;\r
11801 FLAG_N = NFLAG_32(res);\r
11802 FLAG_V = VFLAG_CLEAR;\r
11803 FLAG_C = CFLAG_CLEAR;\r
11804}\r
11805\r
11806\r
11807void m68k_op_muls_16_al(void)\r
11808{\r
11809 uint* r_dst = &DX;\r
11810 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AL_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11811\r
11812 *r_dst = res;\r
11813\r
11814 FLAG_Z = res;\r
11815 FLAG_N = NFLAG_32(res);\r
11816 FLAG_V = VFLAG_CLEAR;\r
11817 FLAG_C = CFLAG_CLEAR;\r
11818}\r
11819\r
11820\r
11821void m68k_op_muls_16_pcdi(void)\r
11822{\r
11823 uint* r_dst = &DX;\r
11824 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCDI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11825\r
11826 *r_dst = res;\r
11827\r
11828 FLAG_Z = res;\r
11829 FLAG_N = NFLAG_32(res);\r
11830 FLAG_V = VFLAG_CLEAR;\r
11831 FLAG_C = CFLAG_CLEAR;\r
11832}\r
11833\r
11834\r
11835void m68k_op_muls_16_pcix(void)\r
11836{\r
11837 uint* r_dst = &DX;\r
11838 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCIX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11839\r
11840 *r_dst = res;\r
11841\r
11842 FLAG_Z = res;\r
11843 FLAG_N = NFLAG_32(res);\r
11844 FLAG_V = VFLAG_CLEAR;\r
11845 FLAG_C = CFLAG_CLEAR;\r
11846}\r
11847\r
11848\r
11849void m68k_op_muls_16_i(void)\r
11850{\r
11851 uint* r_dst = &DX;\r
11852 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_I_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));\r
11853\r
11854 *r_dst = res;\r
11855\r
11856 FLAG_Z = res;\r
11857 FLAG_N = NFLAG_32(res);\r
11858 FLAG_V = VFLAG_CLEAR;\r
11859 FLAG_C = CFLAG_CLEAR;\r
11860}\r
11861\r
11862\r
11863void m68k_op_mulu_16_d(void)\r
11864{\r
11865 uint* r_dst = &DX;\r
11866 uint res = MASK_OUT_ABOVE_16(DY) * MASK_OUT_ABOVE_16(*r_dst);\r
11867\r
11868 *r_dst = res;\r
11869\r
11870 FLAG_Z = res;\r
11871 FLAG_N = NFLAG_32(res);\r
11872 FLAG_V = VFLAG_CLEAR;\r
11873 FLAG_C = CFLAG_CLEAR;\r
11874}\r
11875\r
11876\r
11877void m68k_op_mulu_16_ai(void)\r
11878{\r
11879 uint* r_dst = &DX;\r
11880 uint res = OPER_AY_AI_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11881\r
11882 *r_dst = res;\r
11883\r
11884 FLAG_Z = res;\r
11885 FLAG_N = NFLAG_32(res);\r
11886 FLAG_V = VFLAG_CLEAR;\r
11887 FLAG_C = CFLAG_CLEAR;\r
11888}\r
11889\r
11890\r
11891void m68k_op_mulu_16_pi(void)\r
11892{\r
11893 uint* r_dst = &DX;\r
11894 uint res = OPER_AY_PI_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11895\r
11896 *r_dst = res;\r
11897\r
11898 FLAG_Z = res;\r
11899 FLAG_N = NFLAG_32(res);\r
11900 FLAG_V = VFLAG_CLEAR;\r
11901 FLAG_C = CFLAG_CLEAR;\r
11902}\r
11903\r
11904\r
11905void m68k_op_mulu_16_pd(void)\r
11906{\r
11907 uint* r_dst = &DX;\r
11908 uint res = OPER_AY_PD_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11909\r
11910 *r_dst = res;\r
11911\r
11912 FLAG_Z = res;\r
11913 FLAG_N = NFLAG_32(res);\r
11914 FLAG_V = VFLAG_CLEAR;\r
11915 FLAG_C = CFLAG_CLEAR;\r
11916}\r
11917\r
11918\r
11919void m68k_op_mulu_16_di(void)\r
11920{\r
11921 uint* r_dst = &DX;\r
11922 uint res = OPER_AY_DI_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11923\r
11924 *r_dst = res;\r
11925\r
11926 FLAG_Z = res;\r
11927 FLAG_N = NFLAG_32(res);\r
11928 FLAG_V = VFLAG_CLEAR;\r
11929 FLAG_C = CFLAG_CLEAR;\r
11930}\r
11931\r
11932\r
11933void m68k_op_mulu_16_ix(void)\r
11934{\r
11935 uint* r_dst = &DX;\r
11936 uint res = OPER_AY_IX_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11937\r
11938 *r_dst = res;\r
11939\r
11940 FLAG_Z = res;\r
11941 FLAG_N = NFLAG_32(res);\r
11942 FLAG_V = VFLAG_CLEAR;\r
11943 FLAG_C = CFLAG_CLEAR;\r
11944}\r
11945\r
11946\r
11947void m68k_op_mulu_16_aw(void)\r
11948{\r
11949 uint* r_dst = &DX;\r
11950 uint res = OPER_AW_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11951\r
11952 *r_dst = res;\r
11953\r
11954 FLAG_Z = res;\r
11955 FLAG_N = NFLAG_32(res);\r
11956 FLAG_V = VFLAG_CLEAR;\r
11957 FLAG_C = CFLAG_CLEAR;\r
11958}\r
11959\r
11960\r
11961void m68k_op_mulu_16_al(void)\r
11962{\r
11963 uint* r_dst = &DX;\r
11964 uint res = OPER_AL_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11965\r
11966 *r_dst = res;\r
11967\r
11968 FLAG_Z = res;\r
11969 FLAG_N = NFLAG_32(res);\r
11970 FLAG_V = VFLAG_CLEAR;\r
11971 FLAG_C = CFLAG_CLEAR;\r
11972}\r
11973\r
11974\r
11975void m68k_op_mulu_16_pcdi(void)\r
11976{\r
11977 uint* r_dst = &DX;\r
11978 uint res = OPER_PCDI_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11979\r
11980 *r_dst = res;\r
11981\r
11982 FLAG_Z = res;\r
11983 FLAG_N = NFLAG_32(res);\r
11984 FLAG_V = VFLAG_CLEAR;\r
11985 FLAG_C = CFLAG_CLEAR;\r
11986}\r
11987\r
11988\r
11989void m68k_op_mulu_16_pcix(void)\r
11990{\r
11991 uint* r_dst = &DX;\r
11992 uint res = OPER_PCIX_16() * MASK_OUT_ABOVE_16(*r_dst);\r
11993\r
11994 *r_dst = res;\r
11995\r
11996 FLAG_Z = res;\r
11997 FLAG_N = NFLAG_32(res);\r
11998 FLAG_V = VFLAG_CLEAR;\r
11999 FLAG_C = CFLAG_CLEAR;\r
12000}\r
12001\r
12002\r
12003void m68k_op_mulu_16_i(void)\r
12004{\r
12005 uint* r_dst = &DX;\r
12006 uint res = OPER_I_16() * MASK_OUT_ABOVE_16(*r_dst);\r
12007\r
12008 *r_dst = res;\r
12009\r
12010 FLAG_Z = res;\r
12011 FLAG_N = NFLAG_32(res);\r
12012 FLAG_V = VFLAG_CLEAR;\r
12013 FLAG_C = CFLAG_CLEAR;\r
12014}\r
12015\r
12016\r
12017void m68k_op_mull_32_d(void)\r
12018{\r
12019#if M68K_USE_64_BIT\r
12020\r
12021 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12022 {\r
12023 uint word2 = OPER_I_16();\r
12024 uint64 src = DY;\r
12025 uint64 dst = REG_D[(word2 >> 12) & 7];\r
12026 uint64 res;\r
12027\r
12028 FLAG_C = CFLAG_CLEAR;\r
12029\r
12030 if(BIT_B(word2)) /* signed */\r
12031 {\r
12032 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
12033 if(!BIT_A(word2))\r
12034 {\r
12035 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12036 FLAG_N = NFLAG_32(res);\r
12037 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
12038 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12039 return;\r
12040 }\r
12041 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12042 FLAG_N = NFLAG_64(res);\r
12043 FLAG_V = VFLAG_CLEAR;\r
12044 REG_D[word2 & 7] = (res >> 32);\r
12045 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12046 return;\r
12047 }\r
12048\r
12049 res = src * dst;\r
12050 if(!BIT_A(word2))\r
12051 {\r
12052 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12053 FLAG_N = NFLAG_32(res);\r
12054 FLAG_V = (res > 0xffffffff)<<7;\r
12055 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12056 return;\r
12057 }\r
12058 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12059 FLAG_N = NFLAG_64(res);\r
12060 FLAG_V = VFLAG_CLEAR;\r
12061 REG_D[word2 & 7] = (res >> 32);\r
12062 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12063 return;\r
12064 }\r
12065 m68ki_exception_illegal();\r
12066\r
12067#else\r
12068\r
12069 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12070 {\r
12071 uint word2 = OPER_I_16();\r
12072 uint src = DY;\r
12073 uint dst = REG_D[(word2 >> 12) & 7];\r
12074 uint neg = GET_MSB_32(src ^ dst);\r
12075 uint src1;\r
12076 uint src2;\r
12077 uint dst1;\r
12078 uint dst2;\r
12079 uint r1;\r
12080 uint r2;\r
12081 uint r3;\r
12082 uint r4;\r
12083 uint lo;\r
12084 uint hi;\r
12085\r
12086 FLAG_C = CFLAG_CLEAR;\r
12087\r
12088 if(BIT_B(word2)) /* signed */\r
12089 {\r
12090 if(GET_MSB_32(src))\r
12091 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
12092 if(GET_MSB_32(dst))\r
12093 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
12094 }\r
12095\r
12096 src1 = MASK_OUT_ABOVE_16(src);\r
12097 src2 = src>>16;\r
12098 dst1 = MASK_OUT_ABOVE_16(dst);\r
12099 dst2 = dst>>16;\r
12100\r
12101\r
12102 r1 = src1 * dst1;\r
12103 r2 = src1 * dst2;\r
12104 r3 = src2 * dst1;\r
12105 r4 = src2 * dst2;\r
12106\r
12107 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
12108 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
12109\r
12110 if(BIT_B(word2) && neg)\r
12111 {\r
12112 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
12113 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
12114 }\r
12115\r
12116 if(BIT_A(word2))\r
12117 {\r
12118 REG_D[word2 & 7] = hi;\r
12119 REG_D[(word2 >> 12) & 7] = lo;\r
12120 FLAG_N = NFLAG_32(hi);\r
12121 FLAG_Z = hi | lo;\r
12122 FLAG_V = VFLAG_CLEAR;\r
12123 return;\r
12124 }\r
12125\r
12126 REG_D[(word2 >> 12) & 7] = lo;\r
12127 FLAG_N = NFLAG_32(lo);\r
12128 FLAG_Z = lo;\r
12129 if(BIT_B(word2))\r
12130 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
12131 else\r
12132 FLAG_V = (hi != 0) << 7;\r
12133 return;\r
12134 }\r
12135 m68ki_exception_illegal();\r
12136\r
12137#endif\r
12138}\r
12139\r
12140\r
12141void m68k_op_mull_32_ai(void)\r
12142{\r
12143#if M68K_USE_64_BIT\r
12144\r
12145 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12146 {\r
12147 uint word2 = OPER_I_16();\r
12148 uint64 src = OPER_AY_AI_32();\r
12149 uint64 dst = REG_D[(word2 >> 12) & 7];\r
12150 uint64 res;\r
12151\r
12152 FLAG_C = CFLAG_CLEAR;\r
12153\r
12154 if(BIT_B(word2)) /* signed */\r
12155 {\r
12156 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
12157 if(!BIT_A(word2))\r
12158 {\r
12159 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12160 FLAG_N = NFLAG_32(res);\r
12161 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
12162 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12163 return;\r
12164 }\r
12165 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12166 FLAG_N = NFLAG_64(res);\r
12167 FLAG_V = VFLAG_CLEAR;\r
12168 REG_D[word2 & 7] = (res >> 32);\r
12169 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12170 return;\r
12171 }\r
12172\r
12173 res = src * dst;\r
12174 if(!BIT_A(word2))\r
12175 {\r
12176 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12177 FLAG_N = NFLAG_32(res);\r
12178 FLAG_V = (res > 0xffffffff)<<7;\r
12179 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12180 return;\r
12181 }\r
12182 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12183 FLAG_N = NFLAG_64(res);\r
12184 FLAG_V = VFLAG_CLEAR;\r
12185 REG_D[word2 & 7] = (res >> 32);\r
12186 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12187 return;\r
12188 }\r
12189 m68ki_exception_illegal();\r
12190\r
12191#else\r
12192\r
12193 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12194 {\r
12195 uint word2 = OPER_I_16();\r
12196 uint src = OPER_AY_AI_32();\r
12197 uint dst = REG_D[(word2 >> 12) & 7];\r
12198 uint neg = GET_MSB_32(src ^ dst);\r
12199 uint src1;\r
12200 uint src2;\r
12201 uint dst1;\r
12202 uint dst2;\r
12203 uint r1;\r
12204 uint r2;\r
12205 uint r3;\r
12206 uint r4;\r
12207 uint lo;\r
12208 uint hi;\r
12209\r
12210 FLAG_C = CFLAG_CLEAR;\r
12211\r
12212 if(BIT_B(word2)) /* signed */\r
12213 {\r
12214 if(GET_MSB_32(src))\r
12215 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
12216 if(GET_MSB_32(dst))\r
12217 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
12218 }\r
12219\r
12220 src1 = MASK_OUT_ABOVE_16(src);\r
12221 src2 = src>>16;\r
12222 dst1 = MASK_OUT_ABOVE_16(dst);\r
12223 dst2 = dst>>16;\r
12224\r
12225\r
12226 r1 = src1 * dst1;\r
12227 r2 = src1 * dst2;\r
12228 r3 = src2 * dst1;\r
12229 r4 = src2 * dst2;\r
12230\r
12231 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
12232 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
12233\r
12234 if(BIT_B(word2) && neg)\r
12235 {\r
12236 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
12237 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
12238 }\r
12239\r
12240 if(BIT_A(word2))\r
12241 {\r
12242 REG_D[word2 & 7] = hi;\r
12243 REG_D[(word2 >> 12) & 7] = lo;\r
12244 FLAG_N = NFLAG_32(hi);\r
12245 FLAG_Z = hi | lo;\r
12246 FLAG_V = VFLAG_CLEAR;\r
12247 return;\r
12248 }\r
12249\r
12250 REG_D[(word2 >> 12) & 7] = lo;\r
12251 FLAG_N = NFLAG_32(lo);\r
12252 FLAG_Z = lo;\r
12253 if(BIT_B(word2))\r
12254 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
12255 else\r
12256 FLAG_V = (hi != 0) << 7;\r
12257 return;\r
12258 }\r
12259 m68ki_exception_illegal();\r
12260\r
12261#endif\r
12262}\r
12263\r
12264\r
12265void m68k_op_mull_32_pi(void)\r
12266{\r
12267#if M68K_USE_64_BIT\r
12268\r
12269 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12270 {\r
12271 uint word2 = OPER_I_16();\r
12272 uint64 src = OPER_AY_PI_32();\r
12273 uint64 dst = REG_D[(word2 >> 12) & 7];\r
12274 uint64 res;\r
12275\r
12276 FLAG_C = CFLAG_CLEAR;\r
12277\r
12278 if(BIT_B(word2)) /* signed */\r
12279 {\r
12280 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
12281 if(!BIT_A(word2))\r
12282 {\r
12283 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12284 FLAG_N = NFLAG_32(res);\r
12285 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
12286 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12287 return;\r
12288 }\r
12289 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12290 FLAG_N = NFLAG_64(res);\r
12291 FLAG_V = VFLAG_CLEAR;\r
12292 REG_D[word2 & 7] = (res >> 32);\r
12293 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12294 return;\r
12295 }\r
12296\r
12297 res = src * dst;\r
12298 if(!BIT_A(word2))\r
12299 {\r
12300 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12301 FLAG_N = NFLAG_32(res);\r
12302 FLAG_V = (res > 0xffffffff)<<7;\r
12303 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12304 return;\r
12305 }\r
12306 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12307 FLAG_N = NFLAG_64(res);\r
12308 FLAG_V = VFLAG_CLEAR;\r
12309 REG_D[word2 & 7] = (res >> 32);\r
12310 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12311 return;\r
12312 }\r
12313 m68ki_exception_illegal();\r
12314\r
12315#else\r
12316\r
12317 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12318 {\r
12319 uint word2 = OPER_I_16();\r
12320 uint src = OPER_AY_PI_32();\r
12321 uint dst = REG_D[(word2 >> 12) & 7];\r
12322 uint neg = GET_MSB_32(src ^ dst);\r
12323 uint src1;\r
12324 uint src2;\r
12325 uint dst1;\r
12326 uint dst2;\r
12327 uint r1;\r
12328 uint r2;\r
12329 uint r3;\r
12330 uint r4;\r
12331 uint lo;\r
12332 uint hi;\r
12333\r
12334 FLAG_C = CFLAG_CLEAR;\r
12335\r
12336 if(BIT_B(word2)) /* signed */\r
12337 {\r
12338 if(GET_MSB_32(src))\r
12339 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
12340 if(GET_MSB_32(dst))\r
12341 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
12342 }\r
12343\r
12344 src1 = MASK_OUT_ABOVE_16(src);\r
12345 src2 = src>>16;\r
12346 dst1 = MASK_OUT_ABOVE_16(dst);\r
12347 dst2 = dst>>16;\r
12348\r
12349\r
12350 r1 = src1 * dst1;\r
12351 r2 = src1 * dst2;\r
12352 r3 = src2 * dst1;\r
12353 r4 = src2 * dst2;\r
12354\r
12355 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
12356 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
12357\r
12358 if(BIT_B(word2) && neg)\r
12359 {\r
12360 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
12361 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
12362 }\r
12363\r
12364 if(BIT_A(word2))\r
12365 {\r
12366 REG_D[word2 & 7] = hi;\r
12367 REG_D[(word2 >> 12) & 7] = lo;\r
12368 FLAG_N = NFLAG_32(hi);\r
12369 FLAG_Z = hi | lo;\r
12370 FLAG_V = VFLAG_CLEAR;\r
12371 return;\r
12372 }\r
12373\r
12374 REG_D[(word2 >> 12) & 7] = lo;\r
12375 FLAG_N = NFLAG_32(lo);\r
12376 FLAG_Z = lo;\r
12377 if(BIT_B(word2))\r
12378 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
12379 else\r
12380 FLAG_V = (hi != 0) << 7;\r
12381 return;\r
12382 }\r
12383 m68ki_exception_illegal();\r
12384\r
12385#endif\r
12386}\r
12387\r
12388\r
12389void m68k_op_mull_32_pd(void)\r
12390{\r
12391#if M68K_USE_64_BIT\r
12392\r
12393 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12394 {\r
12395 uint word2 = OPER_I_16();\r
12396 uint64 src = OPER_AY_PD_32();\r
12397 uint64 dst = REG_D[(word2 >> 12) & 7];\r
12398 uint64 res;\r
12399\r
12400 FLAG_C = CFLAG_CLEAR;\r
12401\r
12402 if(BIT_B(word2)) /* signed */\r
12403 {\r
12404 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
12405 if(!BIT_A(word2))\r
12406 {\r
12407 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12408 FLAG_N = NFLAG_32(res);\r
12409 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
12410 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12411 return;\r
12412 }\r
12413 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12414 FLAG_N = NFLAG_64(res);\r
12415 FLAG_V = VFLAG_CLEAR;\r
12416 REG_D[word2 & 7] = (res >> 32);\r
12417 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12418 return;\r
12419 }\r
12420\r
12421 res = src * dst;\r
12422 if(!BIT_A(word2))\r
12423 {\r
12424 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12425 FLAG_N = NFLAG_32(res);\r
12426 FLAG_V = (res > 0xffffffff)<<7;\r
12427 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12428 return;\r
12429 }\r
12430 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12431 FLAG_N = NFLAG_64(res);\r
12432 FLAG_V = VFLAG_CLEAR;\r
12433 REG_D[word2 & 7] = (res >> 32);\r
12434 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12435 return;\r
12436 }\r
12437 m68ki_exception_illegal();\r
12438\r
12439#else\r
12440\r
12441 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12442 {\r
12443 uint word2 = OPER_I_16();\r
12444 uint src = OPER_AY_PD_32();\r
12445 uint dst = REG_D[(word2 >> 12) & 7];\r
12446 uint neg = GET_MSB_32(src ^ dst);\r
12447 uint src1;\r
12448 uint src2;\r
12449 uint dst1;\r
12450 uint dst2;\r
12451 uint r1;\r
12452 uint r2;\r
12453 uint r3;\r
12454 uint r4;\r
12455 uint lo;\r
12456 uint hi;\r
12457\r
12458 FLAG_C = CFLAG_CLEAR;\r
12459\r
12460 if(BIT_B(word2)) /* signed */\r
12461 {\r
12462 if(GET_MSB_32(src))\r
12463 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
12464 if(GET_MSB_32(dst))\r
12465 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
12466 }\r
12467\r
12468 src1 = MASK_OUT_ABOVE_16(src);\r
12469 src2 = src>>16;\r
12470 dst1 = MASK_OUT_ABOVE_16(dst);\r
12471 dst2 = dst>>16;\r
12472\r
12473\r
12474 r1 = src1 * dst1;\r
12475 r2 = src1 * dst2;\r
12476 r3 = src2 * dst1;\r
12477 r4 = src2 * dst2;\r
12478\r
12479 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
12480 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
12481\r
12482 if(BIT_B(word2) && neg)\r
12483 {\r
12484 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
12485 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
12486 }\r
12487\r
12488 if(BIT_A(word2))\r
12489 {\r
12490 REG_D[word2 & 7] = hi;\r
12491 REG_D[(word2 >> 12) & 7] = lo;\r
12492 FLAG_N = NFLAG_32(hi);\r
12493 FLAG_Z = hi | lo;\r
12494 FLAG_V = VFLAG_CLEAR;\r
12495 return;\r
12496 }\r
12497\r
12498 REG_D[(word2 >> 12) & 7] = lo;\r
12499 FLAG_N = NFLAG_32(lo);\r
12500 FLAG_Z = lo;\r
12501 if(BIT_B(word2))\r
12502 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
12503 else\r
12504 FLAG_V = (hi != 0) << 7;\r
12505 return;\r
12506 }\r
12507 m68ki_exception_illegal();\r
12508\r
12509#endif\r
12510}\r
12511\r
12512\r
12513void m68k_op_mull_32_di(void)\r
12514{\r
12515#if M68K_USE_64_BIT\r
12516\r
12517 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12518 {\r
12519 uint word2 = OPER_I_16();\r
12520 uint64 src = OPER_AY_DI_32();\r
12521 uint64 dst = REG_D[(word2 >> 12) & 7];\r
12522 uint64 res;\r
12523\r
12524 FLAG_C = CFLAG_CLEAR;\r
12525\r
12526 if(BIT_B(word2)) /* signed */\r
12527 {\r
12528 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
12529 if(!BIT_A(word2))\r
12530 {\r
12531 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12532 FLAG_N = NFLAG_32(res);\r
12533 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
12534 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12535 return;\r
12536 }\r
12537 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12538 FLAG_N = NFLAG_64(res);\r
12539 FLAG_V = VFLAG_CLEAR;\r
12540 REG_D[word2 & 7] = (res >> 32);\r
12541 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12542 return;\r
12543 }\r
12544\r
12545 res = src * dst;\r
12546 if(!BIT_A(word2))\r
12547 {\r
12548 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12549 FLAG_N = NFLAG_32(res);\r
12550 FLAG_V = (res > 0xffffffff)<<7;\r
12551 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12552 return;\r
12553 }\r
12554 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12555 FLAG_N = NFLAG_64(res);\r
12556 FLAG_V = VFLAG_CLEAR;\r
12557 REG_D[word2 & 7] = (res >> 32);\r
12558 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12559 return;\r
12560 }\r
12561 m68ki_exception_illegal();\r
12562\r
12563#else\r
12564\r
12565 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12566 {\r
12567 uint word2 = OPER_I_16();\r
12568 uint src = OPER_AY_DI_32();\r
12569 uint dst = REG_D[(word2 >> 12) & 7];\r
12570 uint neg = GET_MSB_32(src ^ dst);\r
12571 uint src1;\r
12572 uint src2;\r
12573 uint dst1;\r
12574 uint dst2;\r
12575 uint r1;\r
12576 uint r2;\r
12577 uint r3;\r
12578 uint r4;\r
12579 uint lo;\r
12580 uint hi;\r
12581\r
12582 FLAG_C = CFLAG_CLEAR;\r
12583\r
12584 if(BIT_B(word2)) /* signed */\r
12585 {\r
12586 if(GET_MSB_32(src))\r
12587 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
12588 if(GET_MSB_32(dst))\r
12589 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
12590 }\r
12591\r
12592 src1 = MASK_OUT_ABOVE_16(src);\r
12593 src2 = src>>16;\r
12594 dst1 = MASK_OUT_ABOVE_16(dst);\r
12595 dst2 = dst>>16;\r
12596\r
12597\r
12598 r1 = src1 * dst1;\r
12599 r2 = src1 * dst2;\r
12600 r3 = src2 * dst1;\r
12601 r4 = src2 * dst2;\r
12602\r
12603 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
12604 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
12605\r
12606 if(BIT_B(word2) && neg)\r
12607 {\r
12608 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
12609 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
12610 }\r
12611\r
12612 if(BIT_A(word2))\r
12613 {\r
12614 REG_D[word2 & 7] = hi;\r
12615 REG_D[(word2 >> 12) & 7] = lo;\r
12616 FLAG_N = NFLAG_32(hi);\r
12617 FLAG_Z = hi | lo;\r
12618 FLAG_V = VFLAG_CLEAR;\r
12619 return;\r
12620 }\r
12621\r
12622 REG_D[(word2 >> 12) & 7] = lo;\r
12623 FLAG_N = NFLAG_32(lo);\r
12624 FLAG_Z = lo;\r
12625 if(BIT_B(word2))\r
12626 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
12627 else\r
12628 FLAG_V = (hi != 0) << 7;\r
12629 return;\r
12630 }\r
12631 m68ki_exception_illegal();\r
12632\r
12633#endif\r
12634}\r
12635\r
12636\r
12637void m68k_op_mull_32_ix(void)\r
12638{\r
12639#if M68K_USE_64_BIT\r
12640\r
12641 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12642 {\r
12643 uint word2 = OPER_I_16();\r
12644 uint64 src = OPER_AY_IX_32();\r
12645 uint64 dst = REG_D[(word2 >> 12) & 7];\r
12646 uint64 res;\r
12647\r
12648 FLAG_C = CFLAG_CLEAR;\r
12649\r
12650 if(BIT_B(word2)) /* signed */\r
12651 {\r
12652 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
12653 if(!BIT_A(word2))\r
12654 {\r
12655 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12656 FLAG_N = NFLAG_32(res);\r
12657 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
12658 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12659 return;\r
12660 }\r
12661 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12662 FLAG_N = NFLAG_64(res);\r
12663 FLAG_V = VFLAG_CLEAR;\r
12664 REG_D[word2 & 7] = (res >> 32);\r
12665 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12666 return;\r
12667 }\r
12668\r
12669 res = src * dst;\r
12670 if(!BIT_A(word2))\r
12671 {\r
12672 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12673 FLAG_N = NFLAG_32(res);\r
12674 FLAG_V = (res > 0xffffffff)<<7;\r
12675 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12676 return;\r
12677 }\r
12678 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12679 FLAG_N = NFLAG_64(res);\r
12680 FLAG_V = VFLAG_CLEAR;\r
12681 REG_D[word2 & 7] = (res >> 32);\r
12682 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12683 return;\r
12684 }\r
12685 m68ki_exception_illegal();\r
12686\r
12687#else\r
12688\r
12689 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12690 {\r
12691 uint word2 = OPER_I_16();\r
12692 uint src = OPER_AY_IX_32();\r
12693 uint dst = REG_D[(word2 >> 12) & 7];\r
12694 uint neg = GET_MSB_32(src ^ dst);\r
12695 uint src1;\r
12696 uint src2;\r
12697 uint dst1;\r
12698 uint dst2;\r
12699 uint r1;\r
12700 uint r2;\r
12701 uint r3;\r
12702 uint r4;\r
12703 uint lo;\r
12704 uint hi;\r
12705\r
12706 FLAG_C = CFLAG_CLEAR;\r
12707\r
12708 if(BIT_B(word2)) /* signed */\r
12709 {\r
12710 if(GET_MSB_32(src))\r
12711 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
12712 if(GET_MSB_32(dst))\r
12713 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
12714 }\r
12715\r
12716 src1 = MASK_OUT_ABOVE_16(src);\r
12717 src2 = src>>16;\r
12718 dst1 = MASK_OUT_ABOVE_16(dst);\r
12719 dst2 = dst>>16;\r
12720\r
12721\r
12722 r1 = src1 * dst1;\r
12723 r2 = src1 * dst2;\r
12724 r3 = src2 * dst1;\r
12725 r4 = src2 * dst2;\r
12726\r
12727 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
12728 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
12729\r
12730 if(BIT_B(word2) && neg)\r
12731 {\r
12732 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
12733 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
12734 }\r
12735\r
12736 if(BIT_A(word2))\r
12737 {\r
12738 REG_D[word2 & 7] = hi;\r
12739 REG_D[(word2 >> 12) & 7] = lo;\r
12740 FLAG_N = NFLAG_32(hi);\r
12741 FLAG_Z = hi | lo;\r
12742 FLAG_V = VFLAG_CLEAR;\r
12743 return;\r
12744 }\r
12745\r
12746 REG_D[(word2 >> 12) & 7] = lo;\r
12747 FLAG_N = NFLAG_32(lo);\r
12748 FLAG_Z = lo;\r
12749 if(BIT_B(word2))\r
12750 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
12751 else\r
12752 FLAG_V = (hi != 0) << 7;\r
12753 return;\r
12754 }\r
12755 m68ki_exception_illegal();\r
12756\r
12757#endif\r
12758}\r
12759\r
12760\r
12761void m68k_op_mull_32_aw(void)\r
12762{\r
12763#if M68K_USE_64_BIT\r
12764\r
12765 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12766 {\r
12767 uint word2 = OPER_I_16();\r
12768 uint64 src = OPER_AW_32();\r
12769 uint64 dst = REG_D[(word2 >> 12) & 7];\r
12770 uint64 res;\r
12771\r
12772 FLAG_C = CFLAG_CLEAR;\r
12773\r
12774 if(BIT_B(word2)) /* signed */\r
12775 {\r
12776 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
12777 if(!BIT_A(word2))\r
12778 {\r
12779 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12780 FLAG_N = NFLAG_32(res);\r
12781 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
12782 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12783 return;\r
12784 }\r
12785 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12786 FLAG_N = NFLAG_64(res);\r
12787 FLAG_V = VFLAG_CLEAR;\r
12788 REG_D[word2 & 7] = (res >> 32);\r
12789 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12790 return;\r
12791 }\r
12792\r
12793 res = src * dst;\r
12794 if(!BIT_A(word2))\r
12795 {\r
12796 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12797 FLAG_N = NFLAG_32(res);\r
12798 FLAG_V = (res > 0xffffffff)<<7;\r
12799 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12800 return;\r
12801 }\r
12802 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12803 FLAG_N = NFLAG_64(res);\r
12804 FLAG_V = VFLAG_CLEAR;\r
12805 REG_D[word2 & 7] = (res >> 32);\r
12806 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12807 return;\r
12808 }\r
12809 m68ki_exception_illegal();\r
12810\r
12811#else\r
12812\r
12813 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12814 {\r
12815 uint word2 = OPER_I_16();\r
12816 uint src = OPER_AW_32();\r
12817 uint dst = REG_D[(word2 >> 12) & 7];\r
12818 uint neg = GET_MSB_32(src ^ dst);\r
12819 uint src1;\r
12820 uint src2;\r
12821 uint dst1;\r
12822 uint dst2;\r
12823 uint r1;\r
12824 uint r2;\r
12825 uint r3;\r
12826 uint r4;\r
12827 uint lo;\r
12828 uint hi;\r
12829\r
12830 FLAG_C = CFLAG_CLEAR;\r
12831\r
12832 if(BIT_B(word2)) /* signed */\r
12833 {\r
12834 if(GET_MSB_32(src))\r
12835 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
12836 if(GET_MSB_32(dst))\r
12837 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
12838 }\r
12839\r
12840 src1 = MASK_OUT_ABOVE_16(src);\r
12841 src2 = src>>16;\r
12842 dst1 = MASK_OUT_ABOVE_16(dst);\r
12843 dst2 = dst>>16;\r
12844\r
12845\r
12846 r1 = src1 * dst1;\r
12847 r2 = src1 * dst2;\r
12848 r3 = src2 * dst1;\r
12849 r4 = src2 * dst2;\r
12850\r
12851 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
12852 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
12853\r
12854 if(BIT_B(word2) && neg)\r
12855 {\r
12856 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
12857 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
12858 }\r
12859\r
12860 if(BIT_A(word2))\r
12861 {\r
12862 REG_D[word2 & 7] = hi;\r
12863 REG_D[(word2 >> 12) & 7] = lo;\r
12864 FLAG_N = NFLAG_32(hi);\r
12865 FLAG_Z = hi | lo;\r
12866 FLAG_V = VFLAG_CLEAR;\r
12867 return;\r
12868 }\r
12869\r
12870 REG_D[(word2 >> 12) & 7] = lo;\r
12871 FLAG_N = NFLAG_32(lo);\r
12872 FLAG_Z = lo;\r
12873 if(BIT_B(word2))\r
12874 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
12875 else\r
12876 FLAG_V = (hi != 0) << 7;\r
12877 return;\r
12878 }\r
12879 m68ki_exception_illegal();\r
12880\r
12881#endif\r
12882}\r
12883\r
12884\r
12885void m68k_op_mull_32_al(void)\r
12886{\r
12887#if M68K_USE_64_BIT\r
12888\r
12889 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12890 {\r
12891 uint word2 = OPER_I_16();\r
12892 uint64 src = OPER_AL_32();\r
12893 uint64 dst = REG_D[(word2 >> 12) & 7];\r
12894 uint64 res;\r
12895\r
12896 FLAG_C = CFLAG_CLEAR;\r
12897\r
12898 if(BIT_B(word2)) /* signed */\r
12899 {\r
12900 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
12901 if(!BIT_A(word2))\r
12902 {\r
12903 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12904 FLAG_N = NFLAG_32(res);\r
12905 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
12906 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12907 return;\r
12908 }\r
12909 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12910 FLAG_N = NFLAG_64(res);\r
12911 FLAG_V = VFLAG_CLEAR;\r
12912 REG_D[word2 & 7] = (res >> 32);\r
12913 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12914 return;\r
12915 }\r
12916\r
12917 res = src * dst;\r
12918 if(!BIT_A(word2))\r
12919 {\r
12920 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
12921 FLAG_N = NFLAG_32(res);\r
12922 FLAG_V = (res > 0xffffffff)<<7;\r
12923 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
12924 return;\r
12925 }\r
12926 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
12927 FLAG_N = NFLAG_64(res);\r
12928 FLAG_V = VFLAG_CLEAR;\r
12929 REG_D[word2 & 7] = (res >> 32);\r
12930 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
12931 return;\r
12932 }\r
12933 m68ki_exception_illegal();\r
12934\r
12935#else\r
12936\r
12937 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
12938 {\r
12939 uint word2 = OPER_I_16();\r
12940 uint src = OPER_AL_32();\r
12941 uint dst = REG_D[(word2 >> 12) & 7];\r
12942 uint neg = GET_MSB_32(src ^ dst);\r
12943 uint src1;\r
12944 uint src2;\r
12945 uint dst1;\r
12946 uint dst2;\r
12947 uint r1;\r
12948 uint r2;\r
12949 uint r3;\r
12950 uint r4;\r
12951 uint lo;\r
12952 uint hi;\r
12953\r
12954 FLAG_C = CFLAG_CLEAR;\r
12955\r
12956 if(BIT_B(word2)) /* signed */\r
12957 {\r
12958 if(GET_MSB_32(src))\r
12959 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
12960 if(GET_MSB_32(dst))\r
12961 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
12962 }\r
12963\r
12964 src1 = MASK_OUT_ABOVE_16(src);\r
12965 src2 = src>>16;\r
12966 dst1 = MASK_OUT_ABOVE_16(dst);\r
12967 dst2 = dst>>16;\r
12968\r
12969\r
12970 r1 = src1 * dst1;\r
12971 r2 = src1 * dst2;\r
12972 r3 = src2 * dst1;\r
12973 r4 = src2 * dst2;\r
12974\r
12975 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
12976 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
12977\r
12978 if(BIT_B(word2) && neg)\r
12979 {\r
12980 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
12981 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
12982 }\r
12983\r
12984 if(BIT_A(word2))\r
12985 {\r
12986 REG_D[word2 & 7] = hi;\r
12987 REG_D[(word2 >> 12) & 7] = lo;\r
12988 FLAG_N = NFLAG_32(hi);\r
12989 FLAG_Z = hi | lo;\r
12990 FLAG_V = VFLAG_CLEAR;\r
12991 return;\r
12992 }\r
12993\r
12994 REG_D[(word2 >> 12) & 7] = lo;\r
12995 FLAG_N = NFLAG_32(lo);\r
12996 FLAG_Z = lo;\r
12997 if(BIT_B(word2))\r
12998 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
12999 else\r
13000 FLAG_V = (hi != 0) << 7;\r
13001 return;\r
13002 }\r
13003 m68ki_exception_illegal();\r
13004\r
13005#endif\r
13006}\r
13007\r
13008\r
13009void m68k_op_mull_32_pcdi(void)\r
13010{\r
13011#if M68K_USE_64_BIT\r
13012\r
13013 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
13014 {\r
13015 uint word2 = OPER_I_16();\r
13016 uint64 src = OPER_PCDI_32();\r
13017 uint64 dst = REG_D[(word2 >> 12) & 7];\r
13018 uint64 res;\r
13019\r
13020 FLAG_C = CFLAG_CLEAR;\r
13021\r
13022 if(BIT_B(word2)) /* signed */\r
13023 {\r
13024 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
13025 if(!BIT_A(word2))\r
13026 {\r
13027 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
13028 FLAG_N = NFLAG_32(res);\r
13029 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
13030 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
13031 return;\r
13032 }\r
13033 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
13034 FLAG_N = NFLAG_64(res);\r
13035 FLAG_V = VFLAG_CLEAR;\r
13036 REG_D[word2 & 7] = (res >> 32);\r
13037 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
13038 return;\r
13039 }\r
13040\r
13041 res = src * dst;\r
13042 if(!BIT_A(word2))\r
13043 {\r
13044 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
13045 FLAG_N = NFLAG_32(res);\r
13046 FLAG_V = (res > 0xffffffff)<<7;\r
13047 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
13048 return;\r
13049 }\r
13050 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
13051 FLAG_N = NFLAG_64(res);\r
13052 FLAG_V = VFLAG_CLEAR;\r
13053 REG_D[word2 & 7] = (res >> 32);\r
13054 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
13055 return;\r
13056 }\r
13057 m68ki_exception_illegal();\r
13058\r
13059#else\r
13060\r
13061 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
13062 {\r
13063 uint word2 = OPER_I_16();\r
13064 uint src = OPER_PCDI_32();\r
13065 uint dst = REG_D[(word2 >> 12) & 7];\r
13066 uint neg = GET_MSB_32(src ^ dst);\r
13067 uint src1;\r
13068 uint src2;\r
13069 uint dst1;\r
13070 uint dst2;\r
13071 uint r1;\r
13072 uint r2;\r
13073 uint r3;\r
13074 uint r4;\r
13075 uint lo;\r
13076 uint hi;\r
13077\r
13078 FLAG_C = CFLAG_CLEAR;\r
13079\r
13080 if(BIT_B(word2)) /* signed */\r
13081 {\r
13082 if(GET_MSB_32(src))\r
13083 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
13084 if(GET_MSB_32(dst))\r
13085 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
13086 }\r
13087\r
13088 src1 = MASK_OUT_ABOVE_16(src);\r
13089 src2 = src>>16;\r
13090 dst1 = MASK_OUT_ABOVE_16(dst);\r
13091 dst2 = dst>>16;\r
13092\r
13093\r
13094 r1 = src1 * dst1;\r
13095 r2 = src1 * dst2;\r
13096 r3 = src2 * dst1;\r
13097 r4 = src2 * dst2;\r
13098\r
13099 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
13100 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
13101\r
13102 if(BIT_B(word2) && neg)\r
13103 {\r
13104 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
13105 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
13106 }\r
13107\r
13108 if(BIT_A(word2))\r
13109 {\r
13110 REG_D[word2 & 7] = hi;\r
13111 REG_D[(word2 >> 12) & 7] = lo;\r
13112 FLAG_N = NFLAG_32(hi);\r
13113 FLAG_Z = hi | lo;\r
13114 FLAG_V = VFLAG_CLEAR;\r
13115 return;\r
13116 }\r
13117\r
13118 REG_D[(word2 >> 12) & 7] = lo;\r
13119 FLAG_N = NFLAG_32(lo);\r
13120 FLAG_Z = lo;\r
13121 if(BIT_B(word2))\r
13122 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
13123 else\r
13124 FLAG_V = (hi != 0) << 7;\r
13125 return;\r
13126 }\r
13127 m68ki_exception_illegal();\r
13128\r
13129#endif\r
13130}\r
13131\r
13132\r
13133void m68k_op_mull_32_pcix(void)\r
13134{\r
13135#if M68K_USE_64_BIT\r
13136\r
13137 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
13138 {\r
13139 uint word2 = OPER_I_16();\r
13140 uint64 src = OPER_PCIX_32();\r
13141 uint64 dst = REG_D[(word2 >> 12) & 7];\r
13142 uint64 res;\r
13143\r
13144 FLAG_C = CFLAG_CLEAR;\r
13145\r
13146 if(BIT_B(word2)) /* signed */\r
13147 {\r
13148 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
13149 if(!BIT_A(word2))\r
13150 {\r
13151 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
13152 FLAG_N = NFLAG_32(res);\r
13153 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
13154 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
13155 return;\r
13156 }\r
13157 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
13158 FLAG_N = NFLAG_64(res);\r
13159 FLAG_V = VFLAG_CLEAR;\r
13160 REG_D[word2 & 7] = (res >> 32);\r
13161 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
13162 return;\r
13163 }\r
13164\r
13165 res = src * dst;\r
13166 if(!BIT_A(word2))\r
13167 {\r
13168 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
13169 FLAG_N = NFLAG_32(res);\r
13170 FLAG_V = (res > 0xffffffff)<<7;\r
13171 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
13172 return;\r
13173 }\r
13174 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
13175 FLAG_N = NFLAG_64(res);\r
13176 FLAG_V = VFLAG_CLEAR;\r
13177 REG_D[word2 & 7] = (res >> 32);\r
13178 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
13179 return;\r
13180 }\r
13181 m68ki_exception_illegal();\r
13182\r
13183#else\r
13184\r
13185 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
13186 {\r
13187 uint word2 = OPER_I_16();\r
13188 uint src = OPER_PCIX_32();\r
13189 uint dst = REG_D[(word2 >> 12) & 7];\r
13190 uint neg = GET_MSB_32(src ^ dst);\r
13191 uint src1;\r
13192 uint src2;\r
13193 uint dst1;\r
13194 uint dst2;\r
13195 uint r1;\r
13196 uint r2;\r
13197 uint r3;\r
13198 uint r4;\r
13199 uint lo;\r
13200 uint hi;\r
13201\r
13202 FLAG_C = CFLAG_CLEAR;\r
13203\r
13204 if(BIT_B(word2)) /* signed */\r
13205 {\r
13206 if(GET_MSB_32(src))\r
13207 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
13208 if(GET_MSB_32(dst))\r
13209 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
13210 }\r
13211\r
13212 src1 = MASK_OUT_ABOVE_16(src);\r
13213 src2 = src>>16;\r
13214 dst1 = MASK_OUT_ABOVE_16(dst);\r
13215 dst2 = dst>>16;\r
13216\r
13217\r
13218 r1 = src1 * dst1;\r
13219 r2 = src1 * dst2;\r
13220 r3 = src2 * dst1;\r
13221 r4 = src2 * dst2;\r
13222\r
13223 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
13224 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
13225\r
13226 if(BIT_B(word2) && neg)\r
13227 {\r
13228 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
13229 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
13230 }\r
13231\r
13232 if(BIT_A(word2))\r
13233 {\r
13234 REG_D[word2 & 7] = hi;\r
13235 REG_D[(word2 >> 12) & 7] = lo;\r
13236 FLAG_N = NFLAG_32(hi);\r
13237 FLAG_Z = hi | lo;\r
13238 FLAG_V = VFLAG_CLEAR;\r
13239 return;\r
13240 }\r
13241\r
13242 REG_D[(word2 >> 12) & 7] = lo;\r
13243 FLAG_N = NFLAG_32(lo);\r
13244 FLAG_Z = lo;\r
13245 if(BIT_B(word2))\r
13246 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
13247 else\r
13248 FLAG_V = (hi != 0) << 7;\r
13249 return;\r
13250 }\r
13251 m68ki_exception_illegal();\r
13252\r
13253#endif\r
13254}\r
13255\r
13256\r
13257void m68k_op_mull_32_i(void)\r
13258{\r
13259#if M68K_USE_64_BIT\r
13260\r
13261 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
13262 {\r
13263 uint word2 = OPER_I_16();\r
13264 uint64 src = OPER_I_32();\r
13265 uint64 dst = REG_D[(word2 >> 12) & 7];\r
13266 uint64 res;\r
13267\r
13268 FLAG_C = CFLAG_CLEAR;\r
13269\r
13270 if(BIT_B(word2)) /* signed */\r
13271 {\r
13272 res = (sint64)((sint32)src) * (sint64)((sint32)dst);\r
13273 if(!BIT_A(word2))\r
13274 {\r
13275 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
13276 FLAG_N = NFLAG_32(res);\r
13277 FLAG_V = ((sint64)res != (sint32)res)<<7;\r
13278 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
13279 return;\r
13280 }\r
13281 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
13282 FLAG_N = NFLAG_64(res);\r
13283 FLAG_V = VFLAG_CLEAR;\r
13284 REG_D[word2 & 7] = (res >> 32);\r
13285 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
13286 return;\r
13287 }\r
13288\r
13289 res = src * dst;\r
13290 if(!BIT_A(word2))\r
13291 {\r
13292 FLAG_Z = MASK_OUT_ABOVE_32(res);\r
13293 FLAG_N = NFLAG_32(res);\r
13294 FLAG_V = (res > 0xffffffff)<<7;\r
13295 REG_D[(word2 >> 12) & 7] = FLAG_Z;\r
13296 return;\r
13297 }\r
13298 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);\r
13299 FLAG_N = NFLAG_64(res);\r
13300 FLAG_V = VFLAG_CLEAR;\r
13301 REG_D[word2 & 7] = (res >> 32);\r
13302 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);\r
13303 return;\r
13304 }\r
13305 m68ki_exception_illegal();\r
13306\r
13307#else\r
13308\r
13309 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))\r
13310 {\r
13311 uint word2 = OPER_I_16();\r
13312 uint src = OPER_I_32();\r
13313 uint dst = REG_D[(word2 >> 12) & 7];\r
13314 uint neg = GET_MSB_32(src ^ dst);\r
13315 uint src1;\r
13316 uint src2;\r
13317 uint dst1;\r
13318 uint dst2;\r
13319 uint r1;\r
13320 uint r2;\r
13321 uint r3;\r
13322 uint r4;\r
13323 uint lo;\r
13324 uint hi;\r
13325\r
13326 FLAG_C = CFLAG_CLEAR;\r
13327\r
13328 if(BIT_B(word2)) /* signed */\r
13329 {\r
13330 if(GET_MSB_32(src))\r
13331 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);\r
13332 if(GET_MSB_32(dst))\r
13333 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);\r
13334 }\r
13335\r
13336 src1 = MASK_OUT_ABOVE_16(src);\r
13337 src2 = src>>16;\r
13338 dst1 = MASK_OUT_ABOVE_16(dst);\r
13339 dst2 = dst>>16;\r
13340\r
13341\r
13342 r1 = src1 * dst1;\r
13343 r2 = src1 * dst2;\r
13344 r3 = src2 * dst1;\r
13345 r4 = src2 * dst2;\r
13346\r
13347 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);\r
13348 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);\r
13349\r
13350 if(BIT_B(word2) && neg)\r
13351 {\r
13352 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));\r
13353 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);\r
13354 }\r
13355\r
13356 if(BIT_A(word2))\r
13357 {\r
13358 REG_D[word2 & 7] = hi;\r
13359 REG_D[(word2 >> 12) & 7] = lo;\r
13360 FLAG_N = NFLAG_32(hi);\r
13361 FLAG_Z = hi | lo;\r
13362 FLAG_V = VFLAG_CLEAR;\r
13363 return;\r
13364 }\r
13365\r
13366 REG_D[(word2 >> 12) & 7] = lo;\r
13367 FLAG_N = NFLAG_32(lo);\r
13368 FLAG_Z = lo;\r
13369 if(BIT_B(word2))\r
13370 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;\r
13371 else\r
13372 FLAG_V = (hi != 0) << 7;\r
13373 return;\r
13374 }\r
13375 m68ki_exception_illegal();\r
13376\r
13377#endif\r
13378}\r
13379\r
13380\r
13381/* ======================================================================== */\r
13382/* ============================== END OF FILE ============================= */\r
13383/* ======================================================================== */\r
13384\r
13385\r