comparison musashi/m68kops.c @ 1506:ded16f3d7eb4 mame_interp

Super hacky integration of the version of Musashi from MAME
author Michael Pavone <pavone@retrodev.com>
date Wed, 27 Dec 2017 13:46:52 -0800
parents
children
comparison
equal deleted inserted replaced
1471:2e6320d261ff 1506:ded16f3d7eb4
1 #include <stddef.h>
2 #include "../util.h"
3 #include "m68kcpu.h"
4 /* ======================================================================== */
5 /* ========================= INSTRUCTION HANDLERS ========================= */
6 /* ======================================================================== */
7
8
9 static void m68k_op_1010(m68000_base_device* mc68kcpu)
10 {
11 m68ki_exception_1010(mc68kcpu);
12 }
13
14
15 static void m68k_op_1111(m68000_base_device* mc68kcpu)
16 {
17 m68ki_exception_1111(mc68kcpu);
18 }
19
20
21 static void m68k_op_040fpu0_32(m68000_base_device* mc68kcpu)
22 {
23 m68ki_exception_1111(mc68kcpu);
24 }
25
26
27 static void m68k_op_040fpu1_32(m68000_base_device* mc68kcpu)
28 {
29 m68ki_exception_1111(mc68kcpu);
30 }
31
32
33 static void m68k_op_abcd_8_rr(m68000_base_device* mc68kcpu)
34 {
35 uint32_t* r_dst = &DX(mc68kcpu);
36 uint32_t src = DY(mc68kcpu);
37 uint32_t dst = *r_dst;
38 uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu);
39
40 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
41
42 if(res > 9)
43 res += 6;
44 res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
45 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8;
46 if((mc68kcpu)->c_flag)
47 res -= 0xa0;
48
49 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
50 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
51
52 res = MASK_OUT_ABOVE_8(res);
53 (mc68kcpu)->not_z_flag |= res;
54
55 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
56 }
57
58
59 static void m68k_op_abcd_8_mm_ax7(m68000_base_device* mc68kcpu)
60 {
61 uint32_t src = OPER_AY_PD_8(mc68kcpu);
62 uint32_t ea = EA_A7_PD_8(mc68kcpu);
63 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
64 uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu);
65
66 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
67
68 if(res > 9)
69 res += 6;
70 res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
71 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8;
72 if((mc68kcpu)->c_flag)
73 res -= 0xa0;
74
75 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
76 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
77
78 res = MASK_OUT_ABOVE_8(res);
79 (mc68kcpu)->not_z_flag |= res;
80
81 m68ki_write_8((mc68kcpu), ea, res);
82 }
83
84
85 static void m68k_op_abcd_8_mm_ay7(m68000_base_device* mc68kcpu)
86 {
87 uint32_t src = OPER_A7_PD_8(mc68kcpu);
88 uint32_t ea = EA_AX_PD_8(mc68kcpu);
89 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
90 uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu);
91
92 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
93
94 if(res > 9)
95 res += 6;
96 res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
97 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8;
98 if((mc68kcpu)->c_flag)
99 res -= 0xa0;
100
101 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
102 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
103
104 res = MASK_OUT_ABOVE_8(res);
105 (mc68kcpu)->not_z_flag |= res;
106
107 m68ki_write_8((mc68kcpu), ea, res);
108 }
109
110
111 static void m68k_op_abcd_8_mm_axy7(m68000_base_device* mc68kcpu)
112 {
113 uint32_t src = OPER_A7_PD_8(mc68kcpu);
114 uint32_t ea = EA_A7_PD_8(mc68kcpu);
115 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
116 uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu);
117
118 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
119
120 if(res > 9)
121 res += 6;
122 res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
123 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8;
124 if((mc68kcpu)->c_flag)
125 res -= 0xa0;
126
127 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
128 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
129
130 res = MASK_OUT_ABOVE_8(res);
131 (mc68kcpu)->not_z_flag |= res;
132
133 m68ki_write_8((mc68kcpu), ea, res);
134 }
135
136
137 static void m68k_op_abcd_8_mm(m68000_base_device* mc68kcpu)
138 {
139 uint32_t src = OPER_AY_PD_8(mc68kcpu);
140 uint32_t ea = EA_AX_PD_8(mc68kcpu);
141 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
142 uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu);
143
144 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
145
146 if(res > 9)
147 res += 6;
148 res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
149 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8;
150 if((mc68kcpu)->c_flag)
151 res -= 0xa0;
152
153 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
154 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
155
156 res = MASK_OUT_ABOVE_8(res);
157 (mc68kcpu)->not_z_flag |= res;
158
159 m68ki_write_8((mc68kcpu), ea, res);
160 }
161
162
163 static void m68k_op_add_8_er_d(m68000_base_device* mc68kcpu)
164 {
165 uint32_t* r_dst = &DX(mc68kcpu);
166 uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu));
167 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
168 uint32_t res = src + dst;
169
170 (mc68kcpu)->n_flag = NFLAG_8(res);
171 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
172 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
173 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
174
175 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
176 }
177
178
179 static void m68k_op_add_8_er_ai(m68000_base_device* mc68kcpu)
180 {
181 uint32_t* r_dst = &DX(mc68kcpu);
182 uint32_t src = OPER_AY_AI_8(mc68kcpu);
183 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
184 uint32_t res = src + dst;
185
186 (mc68kcpu)->n_flag = NFLAG_8(res);
187 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
188 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
189 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
190
191 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
192 }
193
194
195 static void m68k_op_add_8_er_pi(m68000_base_device* mc68kcpu)
196 {
197 uint32_t* r_dst = &DX(mc68kcpu);
198 uint32_t src = OPER_AY_PI_8(mc68kcpu);
199 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
200 uint32_t res = src + dst;
201
202 (mc68kcpu)->n_flag = NFLAG_8(res);
203 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
204 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
205 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
206
207 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
208 }
209
210
211 static void m68k_op_add_8_er_pi7(m68000_base_device* mc68kcpu)
212 {
213 uint32_t* r_dst = &DX(mc68kcpu);
214 uint32_t src = OPER_A7_PI_8(mc68kcpu);
215 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
216 uint32_t res = src + dst;
217
218 (mc68kcpu)->n_flag = NFLAG_8(res);
219 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
220 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
221 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
222
223 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
224 }
225
226
227 static void m68k_op_add_8_er_pd(m68000_base_device* mc68kcpu)
228 {
229 uint32_t* r_dst = &DX(mc68kcpu);
230 uint32_t src = OPER_AY_PD_8(mc68kcpu);
231 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
232 uint32_t res = src + dst;
233
234 (mc68kcpu)->n_flag = NFLAG_8(res);
235 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
236 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
237 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
238
239 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
240 }
241
242
243 static void m68k_op_add_8_er_pd7(m68000_base_device* mc68kcpu)
244 {
245 uint32_t* r_dst = &DX(mc68kcpu);
246 uint32_t src = OPER_A7_PD_8(mc68kcpu);
247 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
248 uint32_t res = src + dst;
249
250 (mc68kcpu)->n_flag = NFLAG_8(res);
251 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
252 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
253 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
254
255 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
256 }
257
258
259 static void m68k_op_add_8_er_di(m68000_base_device* mc68kcpu)
260 {
261 uint32_t* r_dst = &DX(mc68kcpu);
262 uint32_t src = OPER_AY_DI_8(mc68kcpu);
263 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
264 uint32_t res = src + dst;
265
266 (mc68kcpu)->n_flag = NFLAG_8(res);
267 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
268 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
269 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
270
271 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
272 }
273
274
275 static void m68k_op_add_8_er_ix(m68000_base_device* mc68kcpu)
276 {
277 uint32_t* r_dst = &DX(mc68kcpu);
278 uint32_t src = OPER_AY_IX_8(mc68kcpu);
279 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
280 uint32_t res = src + dst;
281
282 (mc68kcpu)->n_flag = NFLAG_8(res);
283 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
284 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
285 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
286
287 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
288 }
289
290
291 static void m68k_op_add_8_er_aw(m68000_base_device* mc68kcpu)
292 {
293 uint32_t* r_dst = &DX(mc68kcpu);
294 uint32_t src = OPER_AW_8(mc68kcpu);
295 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
296 uint32_t res = src + dst;
297
298 (mc68kcpu)->n_flag = NFLAG_8(res);
299 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
300 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
301 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
302
303 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
304 }
305
306
307 static void m68k_op_add_8_er_al(m68000_base_device* mc68kcpu)
308 {
309 uint32_t* r_dst = &DX(mc68kcpu);
310 uint32_t src = OPER_AL_8(mc68kcpu);
311 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
312 uint32_t res = src + dst;
313
314 (mc68kcpu)->n_flag = NFLAG_8(res);
315 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
316 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
317 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
318
319 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
320 }
321
322
323 static void m68k_op_add_8_er_pcdi(m68000_base_device* mc68kcpu)
324 {
325 uint32_t* r_dst = &DX(mc68kcpu);
326 uint32_t src = OPER_PCDI_8(mc68kcpu);
327 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
328 uint32_t res = src + dst;
329
330 (mc68kcpu)->n_flag = NFLAG_8(res);
331 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
332 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
333 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
334
335 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
336 }
337
338
339 static void m68k_op_add_8_er_pcix(m68000_base_device* mc68kcpu)
340 {
341 uint32_t* r_dst = &DX(mc68kcpu);
342 uint32_t src = OPER_PCIX_8(mc68kcpu);
343 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
344 uint32_t res = src + dst;
345
346 (mc68kcpu)->n_flag = NFLAG_8(res);
347 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
348 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
349 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
350
351 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
352 }
353
354
355 static void m68k_op_add_8_er_i(m68000_base_device* mc68kcpu)
356 {
357 uint32_t* r_dst = &DX(mc68kcpu);
358 uint32_t src = OPER_I_8(mc68kcpu);
359 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
360 uint32_t res = src + dst;
361
362 (mc68kcpu)->n_flag = NFLAG_8(res);
363 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
364 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
365 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
366
367 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
368 }
369
370
371 static void m68k_op_add_16_er_d(m68000_base_device* mc68kcpu)
372 {
373 uint32_t* r_dst = &DX(mc68kcpu);
374 uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu));
375 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
376 uint32_t res = src + dst;
377
378 (mc68kcpu)->n_flag = NFLAG_16(res);
379 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
380 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
381 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
382
383 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
384 }
385
386
387 static void m68k_op_add_16_er_a(m68000_base_device* mc68kcpu)
388 {
389 uint32_t* r_dst = &DX(mc68kcpu);
390 uint32_t src = MASK_OUT_ABOVE_16(AY(mc68kcpu));
391 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
392 uint32_t res = src + dst;
393
394 (mc68kcpu)->n_flag = NFLAG_16(res);
395 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
396 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
397 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
398
399 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
400 }
401
402
403 static void m68k_op_add_16_er_ai(m68000_base_device* mc68kcpu)
404 {
405 uint32_t* r_dst = &DX(mc68kcpu);
406 uint32_t src = OPER_AY_AI_16(mc68kcpu);
407 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
408 uint32_t res = src + dst;
409
410 (mc68kcpu)->n_flag = NFLAG_16(res);
411 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
412 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
413 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
414
415 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
416 }
417
418
419 static void m68k_op_add_16_er_pi(m68000_base_device* mc68kcpu)
420 {
421 uint32_t* r_dst = &DX(mc68kcpu);
422 uint32_t src = OPER_AY_PI_16(mc68kcpu);
423 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
424 uint32_t res = src + dst;
425
426 (mc68kcpu)->n_flag = NFLAG_16(res);
427 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
428 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
429 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
430
431 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
432 }
433
434
435 static void m68k_op_add_16_er_pd(m68000_base_device* mc68kcpu)
436 {
437 uint32_t* r_dst = &DX(mc68kcpu);
438 uint32_t src = OPER_AY_PD_16(mc68kcpu);
439 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
440 uint32_t res = src + dst;
441
442 (mc68kcpu)->n_flag = NFLAG_16(res);
443 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
444 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
445 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
446
447 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
448 }
449
450
451 static void m68k_op_add_16_er_di(m68000_base_device* mc68kcpu)
452 {
453 uint32_t* r_dst = &DX(mc68kcpu);
454 uint32_t src = OPER_AY_DI_16(mc68kcpu);
455 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
456 uint32_t res = src + dst;
457
458 (mc68kcpu)->n_flag = NFLAG_16(res);
459 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
460 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
461 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
462
463 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
464 }
465
466
467 static void m68k_op_add_16_er_ix(m68000_base_device* mc68kcpu)
468 {
469 uint32_t* r_dst = &DX(mc68kcpu);
470 uint32_t src = OPER_AY_IX_16(mc68kcpu);
471 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
472 uint32_t res = src + dst;
473
474 (mc68kcpu)->n_flag = NFLAG_16(res);
475 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
476 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
477 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
478
479 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
480 }
481
482
483 static void m68k_op_add_16_er_aw(m68000_base_device* mc68kcpu)
484 {
485 uint32_t* r_dst = &DX(mc68kcpu);
486 uint32_t src = OPER_AW_16(mc68kcpu);
487 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
488 uint32_t res = src + dst;
489
490 (mc68kcpu)->n_flag = NFLAG_16(res);
491 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
492 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
493 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
494
495 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
496 }
497
498
499 static void m68k_op_add_16_er_al(m68000_base_device* mc68kcpu)
500 {
501 uint32_t* r_dst = &DX(mc68kcpu);
502 uint32_t src = OPER_AL_16(mc68kcpu);
503 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
504 uint32_t res = src + dst;
505
506 (mc68kcpu)->n_flag = NFLAG_16(res);
507 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
508 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
509 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
510
511 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
512 }
513
514
515 static void m68k_op_add_16_er_pcdi(m68000_base_device* mc68kcpu)
516 {
517 uint32_t* r_dst = &DX(mc68kcpu);
518 uint32_t src = OPER_PCDI_16(mc68kcpu);
519 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
520 uint32_t res = src + dst;
521
522 (mc68kcpu)->n_flag = NFLAG_16(res);
523 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
524 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
525 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
526
527 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
528 }
529
530
531 static void m68k_op_add_16_er_pcix(m68000_base_device* mc68kcpu)
532 {
533 uint32_t* r_dst = &DX(mc68kcpu);
534 uint32_t src = OPER_PCIX_16(mc68kcpu);
535 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
536 uint32_t res = src + dst;
537
538 (mc68kcpu)->n_flag = NFLAG_16(res);
539 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
540 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
541 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
542
543 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
544 }
545
546
547 static void m68k_op_add_16_er_i(m68000_base_device* mc68kcpu)
548 {
549 uint32_t* r_dst = &DX(mc68kcpu);
550 uint32_t src = OPER_I_16(mc68kcpu);
551 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
552 uint32_t res = src + dst;
553
554 (mc68kcpu)->n_flag = NFLAG_16(res);
555 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
556 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
557 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
558
559 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
560 }
561
562
563 static void m68k_op_add_32_er_d(m68000_base_device* mc68kcpu)
564 {
565 uint32_t* r_dst = &DX(mc68kcpu);
566 uint32_t src = DY(mc68kcpu);
567 uint32_t dst = *r_dst;
568 uint32_t res = src + dst;
569
570 (mc68kcpu)->n_flag = NFLAG_32(res);
571 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
572 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
573 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
574
575 *r_dst = (mc68kcpu)->not_z_flag;
576 }
577
578
579 static void m68k_op_add_32_er_a(m68000_base_device* mc68kcpu)
580 {
581 uint32_t* r_dst = &DX(mc68kcpu);
582 uint32_t src = AY(mc68kcpu);
583 uint32_t dst = *r_dst;
584 uint32_t res = src + dst;
585
586 (mc68kcpu)->n_flag = NFLAG_32(res);
587 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
588 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
589 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
590
591 *r_dst = (mc68kcpu)->not_z_flag;
592 }
593
594
595 static void m68k_op_add_32_er_ai(m68000_base_device* mc68kcpu)
596 {
597 uint32_t* r_dst = &DX(mc68kcpu);
598 uint32_t src = OPER_AY_AI_32(mc68kcpu);
599 uint32_t dst = *r_dst;
600 uint32_t res = src + dst;
601
602 (mc68kcpu)->n_flag = NFLAG_32(res);
603 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
604 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
605 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
606
607 *r_dst = (mc68kcpu)->not_z_flag;
608 }
609
610
611 static void m68k_op_add_32_er_pi(m68000_base_device* mc68kcpu)
612 {
613 uint32_t* r_dst = &DX(mc68kcpu);
614 uint32_t src = OPER_AY_PI_32(mc68kcpu);
615 uint32_t dst = *r_dst;
616 uint32_t res = src + dst;
617
618 (mc68kcpu)->n_flag = NFLAG_32(res);
619 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
620 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
621 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
622
623 *r_dst = (mc68kcpu)->not_z_flag;
624 }
625
626
627 static void m68k_op_add_32_er_pd(m68000_base_device* mc68kcpu)
628 {
629 uint32_t* r_dst = &DX(mc68kcpu);
630 uint32_t src = OPER_AY_PD_32(mc68kcpu);
631 uint32_t dst = *r_dst;
632 uint32_t res = src + dst;
633
634 (mc68kcpu)->n_flag = NFLAG_32(res);
635 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
636 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
637 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
638
639 *r_dst = (mc68kcpu)->not_z_flag;
640 }
641
642
643 static void m68k_op_add_32_er_di(m68000_base_device* mc68kcpu)
644 {
645 uint32_t* r_dst = &DX(mc68kcpu);
646 uint32_t src = OPER_AY_DI_32(mc68kcpu);
647 uint32_t dst = *r_dst;
648 uint32_t res = src + dst;
649
650 (mc68kcpu)->n_flag = NFLAG_32(res);
651 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
652 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
653 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
654
655 *r_dst = (mc68kcpu)->not_z_flag;
656 }
657
658
659 static void m68k_op_add_32_er_ix(m68000_base_device* mc68kcpu)
660 {
661 uint32_t* r_dst = &DX(mc68kcpu);
662 uint32_t src = OPER_AY_IX_32(mc68kcpu);
663 uint32_t dst = *r_dst;
664 uint32_t res = src + dst;
665
666 (mc68kcpu)->n_flag = NFLAG_32(res);
667 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
668 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
669 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
670
671 *r_dst = (mc68kcpu)->not_z_flag;
672 }
673
674
675 static void m68k_op_add_32_er_aw(m68000_base_device* mc68kcpu)
676 {
677 uint32_t* r_dst = &DX(mc68kcpu);
678 uint32_t src = OPER_AW_32(mc68kcpu);
679 uint32_t dst = *r_dst;
680 uint32_t res = src + dst;
681
682 (mc68kcpu)->n_flag = NFLAG_32(res);
683 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
684 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
685 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
686
687 *r_dst = (mc68kcpu)->not_z_flag;
688 }
689
690
691 static void m68k_op_add_32_er_al(m68000_base_device* mc68kcpu)
692 {
693 uint32_t* r_dst = &DX(mc68kcpu);
694 uint32_t src = OPER_AL_32(mc68kcpu);
695 uint32_t dst = *r_dst;
696 uint32_t res = src + dst;
697
698 (mc68kcpu)->n_flag = NFLAG_32(res);
699 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
700 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
701 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
702
703 *r_dst = (mc68kcpu)->not_z_flag;
704 }
705
706
707 static void m68k_op_add_32_er_pcdi(m68000_base_device* mc68kcpu)
708 {
709 uint32_t* r_dst = &DX(mc68kcpu);
710 uint32_t src = OPER_PCDI_32(mc68kcpu);
711 uint32_t dst = *r_dst;
712 uint32_t res = src + dst;
713
714 (mc68kcpu)->n_flag = NFLAG_32(res);
715 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
716 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
717 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
718
719 *r_dst = (mc68kcpu)->not_z_flag;
720 }
721
722
723 static void m68k_op_add_32_er_pcix(m68000_base_device* mc68kcpu)
724 {
725 uint32_t* r_dst = &DX(mc68kcpu);
726 uint32_t src = OPER_PCIX_32(mc68kcpu);
727 uint32_t dst = *r_dst;
728 uint32_t res = src + dst;
729
730 (mc68kcpu)->n_flag = NFLAG_32(res);
731 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
732 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
733 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
734
735 *r_dst = (mc68kcpu)->not_z_flag;
736 }
737
738
739 static void m68k_op_add_32_er_i(m68000_base_device* mc68kcpu)
740 {
741 uint32_t* r_dst = &DX(mc68kcpu);
742 uint32_t src = OPER_I_32(mc68kcpu);
743 uint32_t dst = *r_dst;
744 uint32_t res = src + dst;
745
746 (mc68kcpu)->n_flag = NFLAG_32(res);
747 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
748 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
749 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
750
751 *r_dst = (mc68kcpu)->not_z_flag;
752 }
753
754
755 static void m68k_op_add_8_re_ai(m68000_base_device* mc68kcpu)
756 {
757 uint32_t ea = EA_AY_AI_8(mc68kcpu);
758 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
759 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
760 uint32_t res = src + dst;
761
762 (mc68kcpu)->n_flag = NFLAG_8(res);
763 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
764 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
765 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
766
767 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
768 }
769
770
771 static void m68k_op_add_8_re_pi(m68000_base_device* mc68kcpu)
772 {
773 uint32_t ea = EA_AY_PI_8(mc68kcpu);
774 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
775 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
776 uint32_t res = src + dst;
777
778 (mc68kcpu)->n_flag = NFLAG_8(res);
779 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
780 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
781 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
782
783 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
784 }
785
786
787 static void m68k_op_add_8_re_pi7(m68000_base_device* mc68kcpu)
788 {
789 uint32_t ea = EA_A7_PI_8(mc68kcpu);
790 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
791 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
792 uint32_t res = src + dst;
793
794 (mc68kcpu)->n_flag = NFLAG_8(res);
795 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
796 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
797 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
798
799 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
800 }
801
802
803 static void m68k_op_add_8_re_pd(m68000_base_device* mc68kcpu)
804 {
805 uint32_t ea = EA_AY_PD_8(mc68kcpu);
806 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
807 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
808 uint32_t res = src + dst;
809
810 (mc68kcpu)->n_flag = NFLAG_8(res);
811 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
812 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
813 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
814
815 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
816 }
817
818
819 static void m68k_op_add_8_re_pd7(m68000_base_device* mc68kcpu)
820 {
821 uint32_t ea = EA_A7_PD_8(mc68kcpu);
822 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
823 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
824 uint32_t res = src + dst;
825
826 (mc68kcpu)->n_flag = NFLAG_8(res);
827 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
828 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
829 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
830
831 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
832 }
833
834
835 static void m68k_op_add_8_re_di(m68000_base_device* mc68kcpu)
836 {
837 uint32_t ea = EA_AY_DI_8(mc68kcpu);
838 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
839 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
840 uint32_t res = src + dst;
841
842 (mc68kcpu)->n_flag = NFLAG_8(res);
843 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
844 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
845 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
846
847 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
848 }
849
850
851 static void m68k_op_add_8_re_ix(m68000_base_device* mc68kcpu)
852 {
853 uint32_t ea = EA_AY_IX_8(mc68kcpu);
854 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
855 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
856 uint32_t res = src + dst;
857
858 (mc68kcpu)->n_flag = NFLAG_8(res);
859 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
860 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
861 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
862
863 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
864 }
865
866
867 static void m68k_op_add_8_re_aw(m68000_base_device* mc68kcpu)
868 {
869 uint32_t ea = EA_AW_8(mc68kcpu);
870 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
871 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
872 uint32_t res = src + dst;
873
874 (mc68kcpu)->n_flag = NFLAG_8(res);
875 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
876 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
877 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
878
879 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
880 }
881
882
883 static void m68k_op_add_8_re_al(m68000_base_device* mc68kcpu)
884 {
885 uint32_t ea = EA_AL_8(mc68kcpu);
886 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
887 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
888 uint32_t res = src + dst;
889
890 (mc68kcpu)->n_flag = NFLAG_8(res);
891 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
892 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
893 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
894
895 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
896 }
897
898
899 static void m68k_op_add_16_re_ai(m68000_base_device* mc68kcpu)
900 {
901 uint32_t ea = EA_AY_AI_16(mc68kcpu);
902 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
903 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
904 uint32_t res = src + dst;
905
906 (mc68kcpu)->n_flag = NFLAG_16(res);
907 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
908 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
909 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
910
911 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
912 }
913
914
915 static void m68k_op_add_16_re_pi(m68000_base_device* mc68kcpu)
916 {
917 uint32_t ea = EA_AY_PI_16(mc68kcpu);
918 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
919 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
920 uint32_t res = src + dst;
921
922 (mc68kcpu)->n_flag = NFLAG_16(res);
923 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
924 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
925 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
926
927 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
928 }
929
930
931 static void m68k_op_add_16_re_pd(m68000_base_device* mc68kcpu)
932 {
933 uint32_t ea = EA_AY_PD_16(mc68kcpu);
934 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
935 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
936 uint32_t res = src + dst;
937
938 (mc68kcpu)->n_flag = NFLAG_16(res);
939 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
940 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
941 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
942
943 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
944 }
945
946
947 static void m68k_op_add_16_re_di(m68000_base_device* mc68kcpu)
948 {
949 uint32_t ea = EA_AY_DI_16(mc68kcpu);
950 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
951 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
952 uint32_t res = src + dst;
953
954 (mc68kcpu)->n_flag = NFLAG_16(res);
955 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
956 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
957 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
958
959 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
960 }
961
962
963 static void m68k_op_add_16_re_ix(m68000_base_device* mc68kcpu)
964 {
965 uint32_t ea = EA_AY_IX_16(mc68kcpu);
966 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
967 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
968 uint32_t res = src + dst;
969
970 (mc68kcpu)->n_flag = NFLAG_16(res);
971 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
972 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
973 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
974
975 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
976 }
977
978
979 static void m68k_op_add_16_re_aw(m68000_base_device* mc68kcpu)
980 {
981 uint32_t ea = EA_AW_16(mc68kcpu);
982 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
983 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
984 uint32_t res = src + dst;
985
986 (mc68kcpu)->n_flag = NFLAG_16(res);
987 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
988 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
989 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
990
991 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
992 }
993
994
995 static void m68k_op_add_16_re_al(m68000_base_device* mc68kcpu)
996 {
997 uint32_t ea = EA_AL_16(mc68kcpu);
998 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
999 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1000 uint32_t res = src + dst;
1001
1002 (mc68kcpu)->n_flag = NFLAG_16(res);
1003 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1004 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1005 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1006
1007 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1008 }
1009
1010
1011 static void m68k_op_add_32_re_ai(m68000_base_device* mc68kcpu)
1012 {
1013 uint32_t ea = EA_AY_AI_32(mc68kcpu);
1014 uint32_t src = DX(mc68kcpu);
1015 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1016 uint32_t res = src + dst;
1017
1018 (mc68kcpu)->n_flag = NFLAG_32(res);
1019 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1020 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1021 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1022
1023 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1024 }
1025
1026
1027 static void m68k_op_add_32_re_pi(m68000_base_device* mc68kcpu)
1028 {
1029 uint32_t ea = EA_AY_PI_32(mc68kcpu);
1030 uint32_t src = DX(mc68kcpu);
1031 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1032 uint32_t res = src + dst;
1033
1034 (mc68kcpu)->n_flag = NFLAG_32(res);
1035 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1036 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1037 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1038
1039 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1040 }
1041
1042
1043 static void m68k_op_add_32_re_pd(m68000_base_device* mc68kcpu)
1044 {
1045 uint32_t ea = EA_AY_PD_32(mc68kcpu);
1046 uint32_t src = DX(mc68kcpu);
1047 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1048 uint32_t res = src + dst;
1049
1050 (mc68kcpu)->n_flag = NFLAG_32(res);
1051 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1052 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1053 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1054
1055 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1056 }
1057
1058
1059 static void m68k_op_add_32_re_di(m68000_base_device* mc68kcpu)
1060 {
1061 uint32_t ea = EA_AY_DI_32(mc68kcpu);
1062 uint32_t src = DX(mc68kcpu);
1063 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1064 uint32_t res = src + dst;
1065
1066 (mc68kcpu)->n_flag = NFLAG_32(res);
1067 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1068 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1069 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1070
1071 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1072 }
1073
1074
1075 static void m68k_op_add_32_re_ix(m68000_base_device* mc68kcpu)
1076 {
1077 uint32_t ea = EA_AY_IX_32(mc68kcpu);
1078 uint32_t src = DX(mc68kcpu);
1079 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1080 uint32_t res = src + dst;
1081
1082 (mc68kcpu)->n_flag = NFLAG_32(res);
1083 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1084 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1085 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1086
1087 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1088 }
1089
1090
1091 static void m68k_op_add_32_re_aw(m68000_base_device* mc68kcpu)
1092 {
1093 uint32_t ea = EA_AW_32(mc68kcpu);
1094 uint32_t src = DX(mc68kcpu);
1095 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1096 uint32_t res = src + dst;
1097
1098 (mc68kcpu)->n_flag = NFLAG_32(res);
1099 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1100 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1101 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1102
1103 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1104 }
1105
1106
1107 static void m68k_op_add_32_re_al(m68000_base_device* mc68kcpu)
1108 {
1109 uint32_t ea = EA_AL_32(mc68kcpu);
1110 uint32_t src = DX(mc68kcpu);
1111 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1112 uint32_t res = src + dst;
1113
1114 (mc68kcpu)->n_flag = NFLAG_32(res);
1115 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1116 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1117 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1118
1119 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1120 }
1121
1122
1123 static void m68k_op_adda_16_d(m68000_base_device* mc68kcpu)
1124 {
1125 uint32_t* r_dst = &AX(mc68kcpu);
1126
1127 *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(DY(mc68kcpu)));
1128 }
1129
1130
1131 static void m68k_op_adda_16_a(m68000_base_device* mc68kcpu)
1132 {
1133 uint32_t* r_dst = &AX(mc68kcpu);
1134
1135 *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(AY(mc68kcpu)));
1136 }
1137
1138
1139 static void m68k_op_adda_16_ai(m68000_base_device* mc68kcpu)
1140 {
1141 uint32_t* r_dst = &AX(mc68kcpu);
1142 uint32_t src = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu));
1143
1144 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1145 }
1146
1147
1148 static void m68k_op_adda_16_pi(m68000_base_device* mc68kcpu)
1149 {
1150 uint32_t* r_dst = &AX(mc68kcpu);
1151 uint32_t src = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu));
1152
1153 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1154 }
1155
1156
1157 static void m68k_op_adda_16_pd(m68000_base_device* mc68kcpu)
1158 {
1159 uint32_t* r_dst = &AX(mc68kcpu);
1160 uint32_t src = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu));
1161
1162 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1163 }
1164
1165
1166 static void m68k_op_adda_16_di(m68000_base_device* mc68kcpu)
1167 {
1168 uint32_t* r_dst = &AX(mc68kcpu);
1169 uint32_t src = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu));
1170
1171 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1172 }
1173
1174
1175 static void m68k_op_adda_16_ix(m68000_base_device* mc68kcpu)
1176 {
1177 uint32_t* r_dst = &AX(mc68kcpu);
1178 uint32_t src = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu));
1179
1180 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1181 }
1182
1183
1184 static void m68k_op_adda_16_aw(m68000_base_device* mc68kcpu)
1185 {
1186 uint32_t* r_dst = &AX(mc68kcpu);
1187 uint32_t src = MAKE_INT_16(OPER_AW_16(mc68kcpu));
1188
1189 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1190 }
1191
1192
1193 static void m68k_op_adda_16_al(m68000_base_device* mc68kcpu)
1194 {
1195 uint32_t* r_dst = &AX(mc68kcpu);
1196 uint32_t src = MAKE_INT_16(OPER_AL_16(mc68kcpu));
1197
1198 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1199 }
1200
1201
1202 static void m68k_op_adda_16_pcdi(m68000_base_device* mc68kcpu)
1203 {
1204 uint32_t* r_dst = &AX(mc68kcpu);
1205 uint32_t src = MAKE_INT_16(OPER_PCDI_16(mc68kcpu));
1206
1207 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1208 }
1209
1210
1211 static void m68k_op_adda_16_pcix(m68000_base_device* mc68kcpu)
1212 {
1213 uint32_t* r_dst = &AX(mc68kcpu);
1214 uint32_t src = MAKE_INT_16(OPER_PCIX_16(mc68kcpu));
1215
1216 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1217 }
1218
1219
1220 static void m68k_op_adda_16_i(m68000_base_device* mc68kcpu)
1221 {
1222 uint32_t* r_dst = &AX(mc68kcpu);
1223 uint32_t src = MAKE_INT_16(OPER_I_16(mc68kcpu));
1224
1225 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1226 }
1227
1228
1229 static void m68k_op_adda_32_d(m68000_base_device* mc68kcpu)
1230 {
1231 uint32_t* r_dst = &AX(mc68kcpu);
1232
1233 *r_dst = MASK_OUT_ABOVE_32(*r_dst + DY(mc68kcpu));
1234 }
1235
1236
1237 static void m68k_op_adda_32_a(m68000_base_device* mc68kcpu)
1238 {
1239 uint32_t* r_dst = &AX(mc68kcpu);
1240
1241 *r_dst = MASK_OUT_ABOVE_32(*r_dst + AY(mc68kcpu));
1242 }
1243
1244
1245 static void m68k_op_adda_32_ai(m68000_base_device* mc68kcpu)
1246 {
1247 uint32_t* r_dst = &AX(mc68kcpu);
1248 uint32_t src = OPER_AY_AI_32(mc68kcpu);
1249
1250 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1251 }
1252
1253
1254 static void m68k_op_adda_32_pi(m68000_base_device* mc68kcpu)
1255 {
1256 uint32_t* r_dst = &AX(mc68kcpu);
1257 uint32_t src = OPER_AY_PI_32(mc68kcpu);
1258
1259 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1260 }
1261
1262
1263 static void m68k_op_adda_32_pd(m68000_base_device* mc68kcpu)
1264 {
1265 uint32_t* r_dst = &AX(mc68kcpu);
1266 uint32_t src = OPER_AY_PD_32(mc68kcpu);
1267
1268 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1269 }
1270
1271
1272 static void m68k_op_adda_32_di(m68000_base_device* mc68kcpu)
1273 {
1274 uint32_t* r_dst = &AX(mc68kcpu);
1275 uint32_t src = OPER_AY_DI_32(mc68kcpu);
1276
1277 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1278 }
1279
1280
1281 static void m68k_op_adda_32_ix(m68000_base_device* mc68kcpu)
1282 {
1283 uint32_t* r_dst = &AX(mc68kcpu);
1284 uint32_t src = OPER_AY_IX_32(mc68kcpu);
1285
1286 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1287 }
1288
1289
1290 static void m68k_op_adda_32_aw(m68000_base_device* mc68kcpu)
1291 {
1292 uint32_t* r_dst = &AX(mc68kcpu);
1293 uint32_t src = OPER_AW_32(mc68kcpu);
1294
1295 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1296 }
1297
1298
1299 static void m68k_op_adda_32_al(m68000_base_device* mc68kcpu)
1300 {
1301 uint32_t* r_dst = &AX(mc68kcpu);
1302 uint32_t src = OPER_AL_32(mc68kcpu);
1303
1304 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1305 }
1306
1307
1308 static void m68k_op_adda_32_pcdi(m68000_base_device* mc68kcpu)
1309 {
1310 uint32_t* r_dst = &AX(mc68kcpu);
1311 uint32_t src = OPER_PCDI_32(mc68kcpu);
1312
1313 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1314 }
1315
1316
1317 static void m68k_op_adda_32_pcix(m68000_base_device* mc68kcpu)
1318 {
1319 uint32_t* r_dst = &AX(mc68kcpu);
1320 uint32_t src = OPER_PCIX_32(mc68kcpu);
1321
1322 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1323 }
1324
1325
1326 static void m68k_op_adda_32_i(m68000_base_device* mc68kcpu)
1327 {
1328 uint32_t* r_dst = &AX(mc68kcpu);
1329 uint32_t src = OPER_I_32(mc68kcpu);
1330
1331 *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
1332 }
1333
1334
1335 static void m68k_op_addi_8_d(m68000_base_device* mc68kcpu)
1336 {
1337 uint32_t* r_dst = &DY(mc68kcpu);
1338 uint32_t src = OPER_I_8(mc68kcpu);
1339 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
1340 uint32_t res = src + dst;
1341
1342 (mc68kcpu)->n_flag = NFLAG_8(res);
1343 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1344 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1345 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1346
1347 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
1348 }
1349
1350
1351 static void m68k_op_addi_8_ai(m68000_base_device* mc68kcpu)
1352 {
1353 uint32_t src = OPER_I_8(mc68kcpu);
1354 uint32_t ea = EA_AY_AI_8(mc68kcpu);
1355 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1356 uint32_t res = src + dst;
1357
1358 (mc68kcpu)->n_flag = NFLAG_8(res);
1359 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1360 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1361 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1362
1363 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1364 }
1365
1366
1367 static void m68k_op_addi_8_pi(m68000_base_device* mc68kcpu)
1368 {
1369 uint32_t src = OPER_I_8(mc68kcpu);
1370 uint32_t ea = EA_AY_PI_8(mc68kcpu);
1371 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1372 uint32_t res = src + dst;
1373
1374 (mc68kcpu)->n_flag = NFLAG_8(res);
1375 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1376 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1377 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1378
1379 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1380 }
1381
1382
1383 static void m68k_op_addi_8_pi7(m68000_base_device* mc68kcpu)
1384 {
1385 uint32_t src = OPER_I_8(mc68kcpu);
1386 uint32_t ea = EA_A7_PI_8(mc68kcpu);
1387 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1388 uint32_t res = src + dst;
1389
1390 (mc68kcpu)->n_flag = NFLAG_8(res);
1391 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1392 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1393 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1394
1395 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1396 }
1397
1398
1399 static void m68k_op_addi_8_pd(m68000_base_device* mc68kcpu)
1400 {
1401 uint32_t src = OPER_I_8(mc68kcpu);
1402 uint32_t ea = EA_AY_PD_8(mc68kcpu);
1403 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1404 uint32_t res = src + dst;
1405
1406 (mc68kcpu)->n_flag = NFLAG_8(res);
1407 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1408 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1409 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1410
1411 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1412 }
1413
1414
1415 static void m68k_op_addi_8_pd7(m68000_base_device* mc68kcpu)
1416 {
1417 uint32_t src = OPER_I_8(mc68kcpu);
1418 uint32_t ea = EA_A7_PD_8(mc68kcpu);
1419 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1420 uint32_t res = src + dst;
1421
1422 (mc68kcpu)->n_flag = NFLAG_8(res);
1423 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1424 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1425 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1426
1427 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1428 }
1429
1430
1431 static void m68k_op_addi_8_di(m68000_base_device* mc68kcpu)
1432 {
1433 uint32_t src = OPER_I_8(mc68kcpu);
1434 uint32_t ea = EA_AY_DI_8(mc68kcpu);
1435 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1436 uint32_t res = src + dst;
1437
1438 (mc68kcpu)->n_flag = NFLAG_8(res);
1439 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1440 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1441 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1442
1443 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1444 }
1445
1446
1447 static void m68k_op_addi_8_ix(m68000_base_device* mc68kcpu)
1448 {
1449 uint32_t src = OPER_I_8(mc68kcpu);
1450 uint32_t ea = EA_AY_IX_8(mc68kcpu);
1451 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1452 uint32_t res = src + dst;
1453
1454 (mc68kcpu)->n_flag = NFLAG_8(res);
1455 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1456 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1457 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1458
1459 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1460 }
1461
1462
1463 static void m68k_op_addi_8_aw(m68000_base_device* mc68kcpu)
1464 {
1465 uint32_t src = OPER_I_8(mc68kcpu);
1466 uint32_t ea = EA_AW_8(mc68kcpu);
1467 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1468 uint32_t res = src + dst;
1469
1470 (mc68kcpu)->n_flag = NFLAG_8(res);
1471 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1472 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1473 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1474
1475 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1476 }
1477
1478
1479 static void m68k_op_addi_8_al(m68000_base_device* mc68kcpu)
1480 {
1481 uint32_t src = OPER_I_8(mc68kcpu);
1482 uint32_t ea = EA_AL_8(mc68kcpu);
1483 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1484 uint32_t res = src + dst;
1485
1486 (mc68kcpu)->n_flag = NFLAG_8(res);
1487 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1488 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1489 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1490
1491 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1492 }
1493
1494
1495 static void m68k_op_addi_16_d(m68000_base_device* mc68kcpu)
1496 {
1497 uint32_t* r_dst = &DY(mc68kcpu);
1498 uint32_t src = OPER_I_16(mc68kcpu);
1499 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
1500 uint32_t res = src + dst;
1501
1502 (mc68kcpu)->n_flag = NFLAG_16(res);
1503 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1504 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1505 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1506
1507 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
1508 }
1509
1510
1511 static void m68k_op_addi_16_ai(m68000_base_device* mc68kcpu)
1512 {
1513 uint32_t src = OPER_I_16(mc68kcpu);
1514 uint32_t ea = EA_AY_AI_16(mc68kcpu);
1515 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1516 uint32_t res = src + dst;
1517
1518 (mc68kcpu)->n_flag = NFLAG_16(res);
1519 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1520 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1521 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1522
1523 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1524 }
1525
1526
1527 static void m68k_op_addi_16_pi(m68000_base_device* mc68kcpu)
1528 {
1529 uint32_t src = OPER_I_16(mc68kcpu);
1530 uint32_t ea = EA_AY_PI_16(mc68kcpu);
1531 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1532 uint32_t res = src + dst;
1533
1534 (mc68kcpu)->n_flag = NFLAG_16(res);
1535 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1536 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1537 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1538
1539 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1540 }
1541
1542
1543 static void m68k_op_addi_16_pd(m68000_base_device* mc68kcpu)
1544 {
1545 uint32_t src = OPER_I_16(mc68kcpu);
1546 uint32_t ea = EA_AY_PD_16(mc68kcpu);
1547 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1548 uint32_t res = src + dst;
1549
1550 (mc68kcpu)->n_flag = NFLAG_16(res);
1551 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1552 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1553 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1554
1555 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1556 }
1557
1558
1559 static void m68k_op_addi_16_di(m68000_base_device* mc68kcpu)
1560 {
1561 uint32_t src = OPER_I_16(mc68kcpu);
1562 uint32_t ea = EA_AY_DI_16(mc68kcpu);
1563 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1564 uint32_t res = src + dst;
1565
1566 (mc68kcpu)->n_flag = NFLAG_16(res);
1567 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1568 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1569 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1570
1571 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1572 }
1573
1574
1575 static void m68k_op_addi_16_ix(m68000_base_device* mc68kcpu)
1576 {
1577 uint32_t src = OPER_I_16(mc68kcpu);
1578 uint32_t ea = EA_AY_IX_16(mc68kcpu);
1579 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1580 uint32_t res = src + dst;
1581
1582 (mc68kcpu)->n_flag = NFLAG_16(res);
1583 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1584 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1585 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1586
1587 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1588 }
1589
1590
1591 static void m68k_op_addi_16_aw(m68000_base_device* mc68kcpu)
1592 {
1593 uint32_t src = OPER_I_16(mc68kcpu);
1594 uint32_t ea = EA_AW_16(mc68kcpu);
1595 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1596 uint32_t res = src + dst;
1597
1598 (mc68kcpu)->n_flag = NFLAG_16(res);
1599 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1600 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1601 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1602
1603 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1604 }
1605
1606
1607 static void m68k_op_addi_16_al(m68000_base_device* mc68kcpu)
1608 {
1609 uint32_t src = OPER_I_16(mc68kcpu);
1610 uint32_t ea = EA_AL_16(mc68kcpu);
1611 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1612 uint32_t res = src + dst;
1613
1614 (mc68kcpu)->n_flag = NFLAG_16(res);
1615 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1616 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1617 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1618
1619 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1620 }
1621
1622
1623 static void m68k_op_addi_32_d(m68000_base_device* mc68kcpu)
1624 {
1625 uint32_t* r_dst = &DY(mc68kcpu);
1626 uint32_t src = OPER_I_32(mc68kcpu);
1627 uint32_t dst = *r_dst;
1628 uint32_t res = src + dst;
1629
1630 (mc68kcpu)->n_flag = NFLAG_32(res);
1631 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1632 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1633 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1634
1635 *r_dst = (mc68kcpu)->not_z_flag;
1636 }
1637
1638
1639 static void m68k_op_addi_32_ai(m68000_base_device* mc68kcpu)
1640 {
1641 uint32_t src = OPER_I_32(mc68kcpu);
1642 uint32_t ea = EA_AY_AI_32(mc68kcpu);
1643 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1644 uint32_t res = src + dst;
1645
1646 (mc68kcpu)->n_flag = NFLAG_32(res);
1647 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1648 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1649 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1650
1651 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1652 }
1653
1654
1655 static void m68k_op_addi_32_pi(m68000_base_device* mc68kcpu)
1656 {
1657 uint32_t src = OPER_I_32(mc68kcpu);
1658 uint32_t ea = EA_AY_PI_32(mc68kcpu);
1659 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1660 uint32_t res = src + dst;
1661
1662 (mc68kcpu)->n_flag = NFLAG_32(res);
1663 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1664 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1665 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1666
1667 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1668 }
1669
1670
1671 static void m68k_op_addi_32_pd(m68000_base_device* mc68kcpu)
1672 {
1673 uint32_t src = OPER_I_32(mc68kcpu);
1674 uint32_t ea = EA_AY_PD_32(mc68kcpu);
1675 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1676 uint32_t res = src + dst;
1677
1678 (mc68kcpu)->n_flag = NFLAG_32(res);
1679 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1680 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1681 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1682
1683 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1684 }
1685
1686
1687 static void m68k_op_addi_32_di(m68000_base_device* mc68kcpu)
1688 {
1689 uint32_t src = OPER_I_32(mc68kcpu);
1690 uint32_t ea = EA_AY_DI_32(mc68kcpu);
1691 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1692 uint32_t res = src + dst;
1693
1694 (mc68kcpu)->n_flag = NFLAG_32(res);
1695 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1696 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1697 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1698
1699 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1700 }
1701
1702
1703 static void m68k_op_addi_32_ix(m68000_base_device* mc68kcpu)
1704 {
1705 uint32_t src = OPER_I_32(mc68kcpu);
1706 uint32_t ea = EA_AY_IX_32(mc68kcpu);
1707 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1708 uint32_t res = src + dst;
1709
1710 (mc68kcpu)->n_flag = NFLAG_32(res);
1711 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1712 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1713 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1714
1715 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1716 }
1717
1718
1719 static void m68k_op_addi_32_aw(m68000_base_device* mc68kcpu)
1720 {
1721 uint32_t src = OPER_I_32(mc68kcpu);
1722 uint32_t ea = EA_AW_32(mc68kcpu);
1723 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1724 uint32_t res = src + dst;
1725
1726 (mc68kcpu)->n_flag = NFLAG_32(res);
1727 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1728 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1729 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1730
1731 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1732 }
1733
1734
1735 static void m68k_op_addi_32_al(m68000_base_device* mc68kcpu)
1736 {
1737 uint32_t src = OPER_I_32(mc68kcpu);
1738 uint32_t ea = EA_AL_32(mc68kcpu);
1739 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
1740 uint32_t res = src + dst;
1741
1742 (mc68kcpu)->n_flag = NFLAG_32(res);
1743 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
1744 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
1745 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
1746
1747 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1748 }
1749
1750
1751 static void m68k_op_addq_8_d(m68000_base_device* mc68kcpu)
1752 {
1753 uint32_t* r_dst = &DY(mc68kcpu);
1754 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1755 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
1756 uint32_t res = src + dst;
1757
1758 (mc68kcpu)->n_flag = NFLAG_8(res);
1759 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1760 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1761 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1762
1763 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
1764 }
1765
1766
1767 static void m68k_op_addq_8_ai(m68000_base_device* mc68kcpu)
1768 {
1769 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1770 uint32_t ea = EA_AY_AI_8(mc68kcpu);
1771 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1772 uint32_t res = src + dst;
1773
1774 (mc68kcpu)->n_flag = NFLAG_8(res);
1775 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1776 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1777 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1778
1779 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1780 }
1781
1782
1783 static void m68k_op_addq_8_pi(m68000_base_device* mc68kcpu)
1784 {
1785 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1786 uint32_t ea = EA_AY_PI_8(mc68kcpu);
1787 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1788 uint32_t res = src + dst;
1789
1790 (mc68kcpu)->n_flag = NFLAG_8(res);
1791 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1792 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1793 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1794
1795 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1796 }
1797
1798
1799 static void m68k_op_addq_8_pi7(m68000_base_device* mc68kcpu)
1800 {
1801 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1802 uint32_t ea = EA_A7_PI_8(mc68kcpu);
1803 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1804 uint32_t res = src + dst;
1805
1806 (mc68kcpu)->n_flag = NFLAG_8(res);
1807 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1808 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1809 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1810
1811 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1812 }
1813
1814
1815 static void m68k_op_addq_8_pd(m68000_base_device* mc68kcpu)
1816 {
1817 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1818 uint32_t ea = EA_AY_PD_8(mc68kcpu);
1819 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1820 uint32_t res = src + dst;
1821
1822 (mc68kcpu)->n_flag = NFLAG_8(res);
1823 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1824 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1825 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1826
1827 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1828 }
1829
1830
1831 static void m68k_op_addq_8_pd7(m68000_base_device* mc68kcpu)
1832 {
1833 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1834 uint32_t ea = EA_A7_PD_8(mc68kcpu);
1835 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1836 uint32_t res = src + dst;
1837
1838 (mc68kcpu)->n_flag = NFLAG_8(res);
1839 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1840 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1841 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1842
1843 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1844 }
1845
1846
1847 static void m68k_op_addq_8_di(m68000_base_device* mc68kcpu)
1848 {
1849 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1850 uint32_t ea = EA_AY_DI_8(mc68kcpu);
1851 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1852 uint32_t res = src + dst;
1853
1854 (mc68kcpu)->n_flag = NFLAG_8(res);
1855 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1856 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1857 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1858
1859 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1860 }
1861
1862
1863 static void m68k_op_addq_8_ix(m68000_base_device* mc68kcpu)
1864 {
1865 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1866 uint32_t ea = EA_AY_IX_8(mc68kcpu);
1867 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1868 uint32_t res = src + dst;
1869
1870 (mc68kcpu)->n_flag = NFLAG_8(res);
1871 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1872 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1873 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1874
1875 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1876 }
1877
1878
1879 static void m68k_op_addq_8_aw(m68000_base_device* mc68kcpu)
1880 {
1881 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1882 uint32_t ea = EA_AW_8(mc68kcpu);
1883 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1884 uint32_t res = src + dst;
1885
1886 (mc68kcpu)->n_flag = NFLAG_8(res);
1887 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1888 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1889 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1890
1891 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1892 }
1893
1894
1895 static void m68k_op_addq_8_al(m68000_base_device* mc68kcpu)
1896 {
1897 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1898 uint32_t ea = EA_AL_8(mc68kcpu);
1899 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
1900 uint32_t res = src + dst;
1901
1902 (mc68kcpu)->n_flag = NFLAG_8(res);
1903 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
1904 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
1905 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
1906
1907 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1908 }
1909
1910
1911 static void m68k_op_addq_16_d(m68000_base_device* mc68kcpu)
1912 {
1913 uint32_t* r_dst = &DY(mc68kcpu);
1914 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1915 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
1916 uint32_t res = src + dst;
1917
1918 (mc68kcpu)->n_flag = NFLAG_16(res);
1919 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1920 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1921 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1922
1923 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
1924 }
1925
1926
1927 static void m68k_op_addq_16_a(m68000_base_device* mc68kcpu)
1928 {
1929 uint32_t* r_dst = &AY(mc68kcpu);
1930
1931 *r_dst = MASK_OUT_ABOVE_32(*r_dst + ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1);
1932 }
1933
1934
1935 static void m68k_op_addq_16_ai(m68000_base_device* mc68kcpu)
1936 {
1937 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1938 uint32_t ea = EA_AY_AI_16(mc68kcpu);
1939 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1940 uint32_t res = src + dst;
1941
1942 (mc68kcpu)->n_flag = NFLAG_16(res);
1943 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1944 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1945 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1946
1947 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1948 }
1949
1950
1951 static void m68k_op_addq_16_pi(m68000_base_device* mc68kcpu)
1952 {
1953 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1954 uint32_t ea = EA_AY_PI_16(mc68kcpu);
1955 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1956 uint32_t res = src + dst;
1957
1958 (mc68kcpu)->n_flag = NFLAG_16(res);
1959 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1960 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1961 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1962
1963 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1964 }
1965
1966
1967 static void m68k_op_addq_16_pd(m68000_base_device* mc68kcpu)
1968 {
1969 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1970 uint32_t ea = EA_AY_PD_16(mc68kcpu);
1971 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1972 uint32_t res = src + dst;
1973
1974 (mc68kcpu)->n_flag = NFLAG_16(res);
1975 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1976 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1977 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1978
1979 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1980 }
1981
1982
1983 static void m68k_op_addq_16_di(m68000_base_device* mc68kcpu)
1984 {
1985 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
1986 uint32_t ea = EA_AY_DI_16(mc68kcpu);
1987 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
1988 uint32_t res = src + dst;
1989
1990 (mc68kcpu)->n_flag = NFLAG_16(res);
1991 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
1992 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
1993 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
1994
1995 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
1996 }
1997
1998
1999 static void m68k_op_addq_16_ix(m68000_base_device* mc68kcpu)
2000 {
2001 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2002 uint32_t ea = EA_AY_IX_16(mc68kcpu);
2003 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
2004 uint32_t res = src + dst;
2005
2006 (mc68kcpu)->n_flag = NFLAG_16(res);
2007 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
2008 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
2009 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2010
2011 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2012 }
2013
2014
2015 static void m68k_op_addq_16_aw(m68000_base_device* mc68kcpu)
2016 {
2017 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2018 uint32_t ea = EA_AW_16(mc68kcpu);
2019 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
2020 uint32_t res = src + dst;
2021
2022 (mc68kcpu)->n_flag = NFLAG_16(res);
2023 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
2024 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
2025 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2026
2027 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2028 }
2029
2030
2031 static void m68k_op_addq_16_al(m68000_base_device* mc68kcpu)
2032 {
2033 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2034 uint32_t ea = EA_AL_16(mc68kcpu);
2035 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
2036 uint32_t res = src + dst;
2037
2038 (mc68kcpu)->n_flag = NFLAG_16(res);
2039 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
2040 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
2041 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2042
2043 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2044 }
2045
2046
2047 static void m68k_op_addq_32_d(m68000_base_device* mc68kcpu)
2048 {
2049 uint32_t* r_dst = &DY(mc68kcpu);
2050 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2051 uint32_t dst = *r_dst;
2052 uint32_t res = src + dst;
2053
2054 (mc68kcpu)->n_flag = NFLAG_32(res);
2055 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2056 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2057 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
2058
2059 *r_dst = (mc68kcpu)->not_z_flag;
2060 }
2061
2062
2063 static void m68k_op_addq_32_a(m68000_base_device* mc68kcpu)
2064 {
2065 uint32_t* r_dst = &AY(mc68kcpu);
2066
2067 *r_dst = MASK_OUT_ABOVE_32(*r_dst + ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1);
2068 }
2069
2070
2071 static void m68k_op_addq_32_ai(m68000_base_device* mc68kcpu)
2072 {
2073 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2074 uint32_t ea = EA_AY_AI_32(mc68kcpu);
2075 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
2076 uint32_t res = src + dst;
2077
2078
2079 (mc68kcpu)->n_flag = NFLAG_32(res);
2080 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2081 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2082 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
2083
2084 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2085 }
2086
2087
2088 static void m68k_op_addq_32_pi(m68000_base_device* mc68kcpu)
2089 {
2090 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2091 uint32_t ea = EA_AY_PI_32(mc68kcpu);
2092 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
2093 uint32_t res = src + dst;
2094
2095
2096 (mc68kcpu)->n_flag = NFLAG_32(res);
2097 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2098 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2099 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
2100
2101 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2102 }
2103
2104
2105 static void m68k_op_addq_32_pd(m68000_base_device* mc68kcpu)
2106 {
2107 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2108 uint32_t ea = EA_AY_PD_32(mc68kcpu);
2109 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
2110 uint32_t res = src + dst;
2111
2112
2113 (mc68kcpu)->n_flag = NFLAG_32(res);
2114 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2115 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2116 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
2117
2118 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2119 }
2120
2121
2122 static void m68k_op_addq_32_di(m68000_base_device* mc68kcpu)
2123 {
2124 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2125 uint32_t ea = EA_AY_DI_32(mc68kcpu);
2126 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
2127 uint32_t res = src + dst;
2128
2129
2130 (mc68kcpu)->n_flag = NFLAG_32(res);
2131 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2132 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2133 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
2134
2135 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2136 }
2137
2138
2139 static void m68k_op_addq_32_ix(m68000_base_device* mc68kcpu)
2140 {
2141 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2142 uint32_t ea = EA_AY_IX_32(mc68kcpu);
2143 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
2144 uint32_t res = src + dst;
2145
2146
2147 (mc68kcpu)->n_flag = NFLAG_32(res);
2148 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2149 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2150 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
2151
2152 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2153 }
2154
2155
2156 static void m68k_op_addq_32_aw(m68000_base_device* mc68kcpu)
2157 {
2158 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2159 uint32_t ea = EA_AW_32(mc68kcpu);
2160 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
2161 uint32_t res = src + dst;
2162
2163
2164 (mc68kcpu)->n_flag = NFLAG_32(res);
2165 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2166 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2167 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
2168
2169 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2170 }
2171
2172
2173 static void m68k_op_addq_32_al(m68000_base_device* mc68kcpu)
2174 {
2175 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
2176 uint32_t ea = EA_AL_32(mc68kcpu);
2177 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
2178 uint32_t res = src + dst;
2179
2180
2181 (mc68kcpu)->n_flag = NFLAG_32(res);
2182 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2183 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2184 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
2185
2186 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2187 }
2188
2189
2190 static void m68k_op_addx_8_rr(m68000_base_device* mc68kcpu)
2191 {
2192 uint32_t* r_dst = &DX(mc68kcpu);
2193 uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu));
2194 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
2195 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2196
2197 (mc68kcpu)->n_flag = NFLAG_8(res);
2198 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
2199 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
2200
2201 res = MASK_OUT_ABOVE_8(res);
2202 (mc68kcpu)->not_z_flag |= res;
2203
2204 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
2205 }
2206
2207
2208 static void m68k_op_addx_16_rr(m68000_base_device* mc68kcpu)
2209 {
2210 uint32_t* r_dst = &DX(mc68kcpu);
2211 uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu));
2212 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
2213 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2214
2215 (mc68kcpu)->n_flag = NFLAG_16(res);
2216 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
2217 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
2218
2219 res = MASK_OUT_ABOVE_16(res);
2220 (mc68kcpu)->not_z_flag |= res;
2221
2222 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
2223 }
2224
2225
2226 static void m68k_op_addx_32_rr(m68000_base_device* mc68kcpu)
2227 {
2228 uint32_t* r_dst = &DX(mc68kcpu);
2229 uint32_t src = DY(mc68kcpu);
2230 uint32_t dst = *r_dst;
2231 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2232
2233 (mc68kcpu)->n_flag = NFLAG_32(res);
2234 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2235 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2236
2237 res = MASK_OUT_ABOVE_32(res);
2238 (mc68kcpu)->not_z_flag |= res;
2239
2240 *r_dst = res;
2241 }
2242
2243
2244 static void m68k_op_addx_8_mm_ax7(m68000_base_device* mc68kcpu)
2245 {
2246 uint32_t src = OPER_AY_PD_8(mc68kcpu);
2247 uint32_t ea = EA_A7_PD_8(mc68kcpu);
2248 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
2249 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2250
2251 (mc68kcpu)->n_flag = NFLAG_8(res);
2252 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
2253 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
2254
2255 res = MASK_OUT_ABOVE_8(res);
2256 (mc68kcpu)->not_z_flag |= res;
2257
2258 m68ki_write_8((mc68kcpu), ea, res);
2259 }
2260
2261
2262 static void m68k_op_addx_8_mm_ay7(m68000_base_device* mc68kcpu)
2263 {
2264 uint32_t src = OPER_A7_PD_8(mc68kcpu);
2265 uint32_t ea = EA_AX_PD_8(mc68kcpu);
2266 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
2267 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2268
2269 (mc68kcpu)->n_flag = NFLAG_8(res);
2270 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
2271 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
2272
2273 res = MASK_OUT_ABOVE_8(res);
2274 (mc68kcpu)->not_z_flag |= res;
2275
2276 m68ki_write_8((mc68kcpu), ea, res);
2277 }
2278
2279
2280 static void m68k_op_addx_8_mm_axy7(m68000_base_device* mc68kcpu)
2281 {
2282 uint32_t src = OPER_A7_PD_8(mc68kcpu);
2283 uint32_t ea = EA_A7_PD_8(mc68kcpu);
2284 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
2285 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2286
2287 (mc68kcpu)->n_flag = NFLAG_8(res);
2288 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
2289 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
2290
2291 res = MASK_OUT_ABOVE_8(res);
2292 (mc68kcpu)->not_z_flag |= res;
2293
2294 m68ki_write_8((mc68kcpu), ea, res);
2295 }
2296
2297
2298 static void m68k_op_addx_8_mm(m68000_base_device* mc68kcpu)
2299 {
2300 uint32_t src = OPER_AY_PD_8(mc68kcpu);
2301 uint32_t ea = EA_AX_PD_8(mc68kcpu);
2302 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
2303 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2304
2305 (mc68kcpu)->n_flag = NFLAG_8(res);
2306 (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res);
2307 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
2308
2309 res = MASK_OUT_ABOVE_8(res);
2310 (mc68kcpu)->not_z_flag |= res;
2311
2312 m68ki_write_8((mc68kcpu), ea, res);
2313 }
2314
2315
2316 static void m68k_op_addx_16_mm(m68000_base_device* mc68kcpu)
2317 {
2318 uint32_t src = OPER_AY_PD_16(mc68kcpu);
2319 uint32_t ea = EA_AX_PD_16(mc68kcpu);
2320 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
2321 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2322
2323 (mc68kcpu)->n_flag = NFLAG_16(res);
2324 (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res);
2325 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
2326
2327 res = MASK_OUT_ABOVE_16(res);
2328 (mc68kcpu)->not_z_flag |= res;
2329
2330 m68ki_write_16((mc68kcpu), ea, res);
2331 }
2332
2333
2334 static void m68k_op_addx_32_mm(m68000_base_device* mc68kcpu)
2335 {
2336 uint32_t src = OPER_AY_PD_32(mc68kcpu);
2337 uint32_t ea = EA_AX_PD_32(mc68kcpu);
2338 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
2339 uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu);
2340
2341 (mc68kcpu)->n_flag = NFLAG_32(res);
2342 (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res);
2343 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res);
2344
2345 res = MASK_OUT_ABOVE_32(res);
2346 (mc68kcpu)->not_z_flag |= res;
2347
2348 m68ki_write_32((mc68kcpu), ea, res);
2349 }
2350
2351
2352 static void m68k_op_and_8_er_d(m68000_base_device* mc68kcpu)
2353 {
2354 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (DY(mc68kcpu) | 0xffffff00));
2355
2356 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2357 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2358 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2359 }
2360
2361
2362 static void m68k_op_and_8_er_ai(m68000_base_device* mc68kcpu)
2363 {
2364 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_AI_8(mc68kcpu) | 0xffffff00));
2365
2366 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2367 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2368 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2369 }
2370
2371
2372 static void m68k_op_and_8_er_pi(m68000_base_device* mc68kcpu)
2373 {
2374 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_PI_8(mc68kcpu) | 0xffffff00));
2375
2376 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2377 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2378 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2379 }
2380
2381
2382 static void m68k_op_and_8_er_pi7(m68000_base_device* mc68kcpu)
2383 {
2384 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_A7_PI_8(mc68kcpu) | 0xffffff00));
2385
2386 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2387 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2388 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2389 }
2390
2391
2392 static void m68k_op_and_8_er_pd(m68000_base_device* mc68kcpu)
2393 {
2394 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_PD_8(mc68kcpu) | 0xffffff00));
2395
2396 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2397 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2398 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2399 }
2400
2401
2402 static void m68k_op_and_8_er_pd7(m68000_base_device* mc68kcpu)
2403 {
2404 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_A7_PD_8(mc68kcpu) | 0xffffff00));
2405
2406 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2407 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2408 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2409 }
2410
2411
2412 static void m68k_op_and_8_er_di(m68000_base_device* mc68kcpu)
2413 {
2414 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_DI_8(mc68kcpu) | 0xffffff00));
2415
2416 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2417 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2418 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2419 }
2420
2421
2422 static void m68k_op_and_8_er_ix(m68000_base_device* mc68kcpu)
2423 {
2424 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_IX_8(mc68kcpu) | 0xffffff00));
2425
2426 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2427 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2428 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2429 }
2430
2431
2432 static void m68k_op_and_8_er_aw(m68000_base_device* mc68kcpu)
2433 {
2434 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AW_8(mc68kcpu) | 0xffffff00));
2435
2436 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2437 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2438 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2439 }
2440
2441
2442 static void m68k_op_and_8_er_al(m68000_base_device* mc68kcpu)
2443 {
2444 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AL_8(mc68kcpu) | 0xffffff00));
2445
2446 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2447 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2448 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2449 }
2450
2451
2452 static void m68k_op_and_8_er_pcdi(m68000_base_device* mc68kcpu)
2453 {
2454 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_PCDI_8(mc68kcpu) | 0xffffff00));
2455
2456 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2457 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2458 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2459 }
2460
2461
2462 static void m68k_op_and_8_er_pcix(m68000_base_device* mc68kcpu)
2463 {
2464 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_PCIX_8(mc68kcpu) | 0xffffff00));
2465
2466 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2467 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2468 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2469 }
2470
2471
2472 static void m68k_op_and_8_er_i(m68000_base_device* mc68kcpu)
2473 {
2474 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_I_8(mc68kcpu) | 0xffffff00));
2475
2476 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
2477 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2478 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2479 }
2480
2481
2482 static void m68k_op_and_16_er_d(m68000_base_device* mc68kcpu)
2483 {
2484 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (DY(mc68kcpu) | 0xffff0000));
2485
2486 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2487 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2488 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2489 }
2490
2491
2492 static void m68k_op_and_16_er_ai(m68000_base_device* mc68kcpu)
2493 {
2494 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_AI_16(mc68kcpu) | 0xffff0000));
2495
2496 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2497 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2498 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2499 }
2500
2501
2502 static void m68k_op_and_16_er_pi(m68000_base_device* mc68kcpu)
2503 {
2504 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_PI_16(mc68kcpu) | 0xffff0000));
2505
2506 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2507 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2508 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2509 }
2510
2511
2512 static void m68k_op_and_16_er_pd(m68000_base_device* mc68kcpu)
2513 {
2514 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_PD_16(mc68kcpu) | 0xffff0000));
2515
2516 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2517 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2518 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2519 }
2520
2521
2522 static void m68k_op_and_16_er_di(m68000_base_device* mc68kcpu)
2523 {
2524 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_DI_16(mc68kcpu) | 0xffff0000));
2525
2526 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2527 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2528 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2529 }
2530
2531
2532 static void m68k_op_and_16_er_ix(m68000_base_device* mc68kcpu)
2533 {
2534 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_IX_16(mc68kcpu) | 0xffff0000));
2535
2536 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2537 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2538 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2539 }
2540
2541
2542 static void m68k_op_and_16_er_aw(m68000_base_device* mc68kcpu)
2543 {
2544 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AW_16(mc68kcpu) | 0xffff0000));
2545
2546 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2547 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2548 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2549 }
2550
2551
2552 static void m68k_op_and_16_er_al(m68000_base_device* mc68kcpu)
2553 {
2554 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AL_16(mc68kcpu) | 0xffff0000));
2555
2556 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2557 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2558 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2559 }
2560
2561
2562 static void m68k_op_and_16_er_pcdi(m68000_base_device* mc68kcpu)
2563 {
2564 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_PCDI_16(mc68kcpu) | 0xffff0000));
2565
2566 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2567 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2568 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2569 }
2570
2571
2572 static void m68k_op_and_16_er_pcix(m68000_base_device* mc68kcpu)
2573 {
2574 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_PCIX_16(mc68kcpu) | 0xffff0000));
2575
2576 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2577 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2578 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2579 }
2580
2581
2582 static void m68k_op_and_16_er_i(m68000_base_device* mc68kcpu)
2583 {
2584 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_I_16(mc68kcpu) | 0xffff0000));
2585
2586 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
2587 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2588 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2589 }
2590
2591
2592 static void m68k_op_and_32_er_d(m68000_base_device* mc68kcpu)
2593 {
2594 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= DY(mc68kcpu);
2595
2596 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2597 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2598 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2599 }
2600
2601
2602 static void m68k_op_and_32_er_ai(m68000_base_device* mc68kcpu)
2603 {
2604 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_AI_32(mc68kcpu);
2605
2606 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2607 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2608 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2609 }
2610
2611
2612 static void m68k_op_and_32_er_pi(m68000_base_device* mc68kcpu)
2613 {
2614 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_PI_32(mc68kcpu);
2615
2616 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2617 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2618 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2619 }
2620
2621
2622 static void m68k_op_and_32_er_pd(m68000_base_device* mc68kcpu)
2623 {
2624 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_PD_32(mc68kcpu);
2625
2626 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2627 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2628 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2629 }
2630
2631
2632 static void m68k_op_and_32_er_di(m68000_base_device* mc68kcpu)
2633 {
2634 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_DI_32(mc68kcpu);
2635
2636 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2637 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2638 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2639 }
2640
2641
2642 static void m68k_op_and_32_er_ix(m68000_base_device* mc68kcpu)
2643 {
2644 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_IX_32(mc68kcpu);
2645
2646 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2647 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2648 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2649 }
2650
2651
2652 static void m68k_op_and_32_er_aw(m68000_base_device* mc68kcpu)
2653 {
2654 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AW_32(mc68kcpu);
2655
2656 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2657 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2658 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2659 }
2660
2661
2662 static void m68k_op_and_32_er_al(m68000_base_device* mc68kcpu)
2663 {
2664 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AL_32(mc68kcpu);
2665
2666 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2667 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2668 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2669 }
2670
2671
2672 static void m68k_op_and_32_er_pcdi(m68000_base_device* mc68kcpu)
2673 {
2674 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_PCDI_32(mc68kcpu);
2675
2676 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2677 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2678 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2679 }
2680
2681
2682 static void m68k_op_and_32_er_pcix(m68000_base_device* mc68kcpu)
2683 {
2684 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_PCIX_32(mc68kcpu);
2685
2686 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2687 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2688 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2689 }
2690
2691
2692 static void m68k_op_and_32_er_i(m68000_base_device* mc68kcpu)
2693 {
2694 (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_I_32(mc68kcpu);
2695
2696 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
2697 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2698 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2699 }
2700
2701
2702 static void m68k_op_and_8_re_ai(m68000_base_device* mc68kcpu)
2703 {
2704 uint32_t ea = EA_AY_AI_8(mc68kcpu);
2705 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2706
2707 (mc68kcpu)->n_flag = NFLAG_8(res);
2708 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2709 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2710 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2711
2712 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2713 }
2714
2715
2716 static void m68k_op_and_8_re_pi(m68000_base_device* mc68kcpu)
2717 {
2718 uint32_t ea = EA_AY_PI_8(mc68kcpu);
2719 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2720
2721 (mc68kcpu)->n_flag = NFLAG_8(res);
2722 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2723 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2724 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2725
2726 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2727 }
2728
2729
2730 static void m68k_op_and_8_re_pi7(m68000_base_device* mc68kcpu)
2731 {
2732 uint32_t ea = EA_A7_PI_8(mc68kcpu);
2733 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2734
2735 (mc68kcpu)->n_flag = NFLAG_8(res);
2736 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2737 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2738 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2739
2740 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2741 }
2742
2743
2744 static void m68k_op_and_8_re_pd(m68000_base_device* mc68kcpu)
2745 {
2746 uint32_t ea = EA_AY_PD_8(mc68kcpu);
2747 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2748
2749 (mc68kcpu)->n_flag = NFLAG_8(res);
2750 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2751 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2752 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2753
2754 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2755 }
2756
2757
2758 static void m68k_op_and_8_re_pd7(m68000_base_device* mc68kcpu)
2759 {
2760 uint32_t ea = EA_A7_PD_8(mc68kcpu);
2761 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2762
2763 (mc68kcpu)->n_flag = NFLAG_8(res);
2764 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2765 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2766 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2767
2768 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2769 }
2770
2771
2772 static void m68k_op_and_8_re_di(m68000_base_device* mc68kcpu)
2773 {
2774 uint32_t ea = EA_AY_DI_8(mc68kcpu);
2775 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2776
2777 (mc68kcpu)->n_flag = NFLAG_8(res);
2778 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2779 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2780 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2781
2782 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2783 }
2784
2785
2786 static void m68k_op_and_8_re_ix(m68000_base_device* mc68kcpu)
2787 {
2788 uint32_t ea = EA_AY_IX_8(mc68kcpu);
2789 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2790
2791 (mc68kcpu)->n_flag = NFLAG_8(res);
2792 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2793 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2794 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2795
2796 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2797 }
2798
2799
2800 static void m68k_op_and_8_re_aw(m68000_base_device* mc68kcpu)
2801 {
2802 uint32_t ea = EA_AW_8(mc68kcpu);
2803 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2804
2805 (mc68kcpu)->n_flag = NFLAG_8(res);
2806 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2807 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2808 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2809
2810 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2811 }
2812
2813
2814 static void m68k_op_and_8_re_al(m68000_base_device* mc68kcpu)
2815 {
2816 uint32_t ea = EA_AL_8(mc68kcpu);
2817 uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea);
2818
2819 (mc68kcpu)->n_flag = NFLAG_8(res);
2820 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2821 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2822 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
2823
2824 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2825 }
2826
2827
2828 static void m68k_op_and_16_re_ai(m68000_base_device* mc68kcpu)
2829 {
2830 uint32_t ea = EA_AY_AI_16(mc68kcpu);
2831 uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea);
2832
2833 (mc68kcpu)->n_flag = NFLAG_16(res);
2834 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2835 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2836 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2837
2838 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2839 }
2840
2841
2842 static void m68k_op_and_16_re_pi(m68000_base_device* mc68kcpu)
2843 {
2844 uint32_t ea = EA_AY_PI_16(mc68kcpu);
2845 uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea);
2846
2847 (mc68kcpu)->n_flag = NFLAG_16(res);
2848 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2849 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2850 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2851
2852 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2853 }
2854
2855
2856 static void m68k_op_and_16_re_pd(m68000_base_device* mc68kcpu)
2857 {
2858 uint32_t ea = EA_AY_PD_16(mc68kcpu);
2859 uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea);
2860
2861 (mc68kcpu)->n_flag = NFLAG_16(res);
2862 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2863 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2864 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2865
2866 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2867 }
2868
2869
2870 static void m68k_op_and_16_re_di(m68000_base_device* mc68kcpu)
2871 {
2872 uint32_t ea = EA_AY_DI_16(mc68kcpu);
2873 uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea);
2874
2875 (mc68kcpu)->n_flag = NFLAG_16(res);
2876 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2877 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2878 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2879
2880 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2881 }
2882
2883
2884 static void m68k_op_and_16_re_ix(m68000_base_device* mc68kcpu)
2885 {
2886 uint32_t ea = EA_AY_IX_16(mc68kcpu);
2887 uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea);
2888
2889 (mc68kcpu)->n_flag = NFLAG_16(res);
2890 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2891 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2892 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2893
2894 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2895 }
2896
2897
2898 static void m68k_op_and_16_re_aw(m68000_base_device* mc68kcpu)
2899 {
2900 uint32_t ea = EA_AW_16(mc68kcpu);
2901 uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea);
2902
2903 (mc68kcpu)->n_flag = NFLAG_16(res);
2904 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2905 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2906 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2907
2908 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2909 }
2910
2911
2912 static void m68k_op_and_16_re_al(m68000_base_device* mc68kcpu)
2913 {
2914 uint32_t ea = EA_AL_16(mc68kcpu);
2915 uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea);
2916
2917 (mc68kcpu)->n_flag = NFLAG_16(res);
2918 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2919 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2920 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
2921
2922 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
2923 }
2924
2925
2926 static void m68k_op_and_32_re_ai(m68000_base_device* mc68kcpu)
2927 {
2928 uint32_t ea = EA_AY_AI_32(mc68kcpu);
2929 uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea);
2930
2931 (mc68kcpu)->n_flag = NFLAG_32(res);
2932 (mc68kcpu)->not_z_flag = res;
2933 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2934 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2935
2936 m68ki_write_32((mc68kcpu), ea, res);
2937 }
2938
2939
2940 static void m68k_op_and_32_re_pi(m68000_base_device* mc68kcpu)
2941 {
2942 uint32_t ea = EA_AY_PI_32(mc68kcpu);
2943 uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea);
2944
2945 (mc68kcpu)->n_flag = NFLAG_32(res);
2946 (mc68kcpu)->not_z_flag = res;
2947 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2948 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2949
2950 m68ki_write_32((mc68kcpu), ea, res);
2951 }
2952
2953
2954 static void m68k_op_and_32_re_pd(m68000_base_device* mc68kcpu)
2955 {
2956 uint32_t ea = EA_AY_PD_32(mc68kcpu);
2957 uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea);
2958
2959 (mc68kcpu)->n_flag = NFLAG_32(res);
2960 (mc68kcpu)->not_z_flag = res;
2961 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2962 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2963
2964 m68ki_write_32((mc68kcpu), ea, res);
2965 }
2966
2967
2968 static void m68k_op_and_32_re_di(m68000_base_device* mc68kcpu)
2969 {
2970 uint32_t ea = EA_AY_DI_32(mc68kcpu);
2971 uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea);
2972
2973 (mc68kcpu)->n_flag = NFLAG_32(res);
2974 (mc68kcpu)->not_z_flag = res;
2975 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2976 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2977
2978 m68ki_write_32((mc68kcpu), ea, res);
2979 }
2980
2981
2982 static void m68k_op_and_32_re_ix(m68000_base_device* mc68kcpu)
2983 {
2984 uint32_t ea = EA_AY_IX_32(mc68kcpu);
2985 uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea);
2986
2987 (mc68kcpu)->n_flag = NFLAG_32(res);
2988 (mc68kcpu)->not_z_flag = res;
2989 (mc68kcpu)->c_flag = CFLAG_CLEAR;
2990 (mc68kcpu)->v_flag = VFLAG_CLEAR;
2991
2992 m68ki_write_32((mc68kcpu), ea, res);
2993 }
2994
2995
2996 static void m68k_op_and_32_re_aw(m68000_base_device* mc68kcpu)
2997 {
2998 uint32_t ea = EA_AW_32(mc68kcpu);
2999 uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea);
3000
3001 (mc68kcpu)->n_flag = NFLAG_32(res);
3002 (mc68kcpu)->not_z_flag = res;
3003 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3004 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3005
3006 m68ki_write_32((mc68kcpu), ea, res);
3007 }
3008
3009
3010 static void m68k_op_and_32_re_al(m68000_base_device* mc68kcpu)
3011 {
3012 uint32_t ea = EA_AL_32(mc68kcpu);
3013 uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea);
3014
3015 (mc68kcpu)->n_flag = NFLAG_32(res);
3016 (mc68kcpu)->not_z_flag = res;
3017 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3018 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3019
3020 m68ki_write_32((mc68kcpu), ea, res);
3021 }
3022
3023
3024 static void m68k_op_andi_8_d(m68000_base_device* mc68kcpu)
3025 {
3026 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DY(mc68kcpu) &= (OPER_I_8(mc68kcpu) | 0xffffff00));
3027
3028 (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag);
3029 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3030 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3031 }
3032
3033
3034 static void m68k_op_andi_8_ai(m68000_base_device* mc68kcpu)
3035 {
3036 uint32_t src = OPER_I_8(mc68kcpu);
3037 uint32_t ea = EA_AY_AI_8(mc68kcpu);
3038 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3039
3040 (mc68kcpu)->n_flag = NFLAG_8(res);
3041 (mc68kcpu)->not_z_flag = res;
3042 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3043 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3044
3045 m68ki_write_8((mc68kcpu), ea, res);
3046 }
3047
3048
3049 static void m68k_op_andi_8_pi(m68000_base_device* mc68kcpu)
3050 {
3051 uint32_t src = OPER_I_8(mc68kcpu);
3052 uint32_t ea = EA_AY_PI_8(mc68kcpu);
3053 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3054
3055 (mc68kcpu)->n_flag = NFLAG_8(res);
3056 (mc68kcpu)->not_z_flag = res;
3057 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3058 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3059
3060 m68ki_write_8((mc68kcpu), ea, res);
3061 }
3062
3063
3064 static void m68k_op_andi_8_pi7(m68000_base_device* mc68kcpu)
3065 {
3066 uint32_t src = OPER_I_8(mc68kcpu);
3067 uint32_t ea = EA_A7_PI_8(mc68kcpu);
3068 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3069
3070 (mc68kcpu)->n_flag = NFLAG_8(res);
3071 (mc68kcpu)->not_z_flag = res;
3072 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3073 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3074
3075 m68ki_write_8((mc68kcpu), ea, res);
3076 }
3077
3078
3079 static void m68k_op_andi_8_pd(m68000_base_device* mc68kcpu)
3080 {
3081 uint32_t src = OPER_I_8(mc68kcpu);
3082 uint32_t ea = EA_AY_PD_8(mc68kcpu);
3083 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3084
3085 (mc68kcpu)->n_flag = NFLAG_8(res);
3086 (mc68kcpu)->not_z_flag = res;
3087 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3088 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3089
3090 m68ki_write_8((mc68kcpu), ea, res);
3091 }
3092
3093
3094 static void m68k_op_andi_8_pd7(m68000_base_device* mc68kcpu)
3095 {
3096 uint32_t src = OPER_I_8(mc68kcpu);
3097 uint32_t ea = EA_A7_PD_8(mc68kcpu);
3098 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3099
3100 (mc68kcpu)->n_flag = NFLAG_8(res);
3101 (mc68kcpu)->not_z_flag = res;
3102 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3103 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3104
3105 m68ki_write_8((mc68kcpu), ea, res);
3106 }
3107
3108
3109 static void m68k_op_andi_8_di(m68000_base_device* mc68kcpu)
3110 {
3111 uint32_t src = OPER_I_8(mc68kcpu);
3112 uint32_t ea = EA_AY_DI_8(mc68kcpu);
3113 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3114
3115 (mc68kcpu)->n_flag = NFLAG_8(res);
3116 (mc68kcpu)->not_z_flag = res;
3117 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3118 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3119
3120 m68ki_write_8((mc68kcpu), ea, res);
3121 }
3122
3123
3124 static void m68k_op_andi_8_ix(m68000_base_device* mc68kcpu)
3125 {
3126 uint32_t src = OPER_I_8(mc68kcpu);
3127 uint32_t ea = EA_AY_IX_8(mc68kcpu);
3128 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3129
3130 (mc68kcpu)->n_flag = NFLAG_8(res);
3131 (mc68kcpu)->not_z_flag = res;
3132 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3133 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3134
3135 m68ki_write_8((mc68kcpu), ea, res);
3136 }
3137
3138
3139 static void m68k_op_andi_8_aw(m68000_base_device* mc68kcpu)
3140 {
3141 uint32_t src = OPER_I_8(mc68kcpu);
3142 uint32_t ea = EA_AW_8(mc68kcpu);
3143 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3144
3145 (mc68kcpu)->n_flag = NFLAG_8(res);
3146 (mc68kcpu)->not_z_flag = res;
3147 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3148 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3149
3150 m68ki_write_8((mc68kcpu), ea, res);
3151 }
3152
3153
3154 static void m68k_op_andi_8_al(m68000_base_device* mc68kcpu)
3155 {
3156 uint32_t src = OPER_I_8(mc68kcpu);
3157 uint32_t ea = EA_AL_8(mc68kcpu);
3158 uint32_t res = src & m68ki_read_8((mc68kcpu), ea);
3159
3160 (mc68kcpu)->n_flag = NFLAG_8(res);
3161 (mc68kcpu)->not_z_flag = res;
3162 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3163 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3164
3165 m68ki_write_8((mc68kcpu), ea, res);
3166 }
3167
3168
3169 static void m68k_op_andi_16_d(m68000_base_device* mc68kcpu)
3170 {
3171 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DY(mc68kcpu) &= (OPER_I_16(mc68kcpu) | 0xffff0000));
3172
3173 (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag);
3174 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3175 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3176 }
3177
3178
3179 static void m68k_op_andi_16_ai(m68000_base_device* mc68kcpu)
3180 {
3181 uint32_t src = OPER_I_16(mc68kcpu);
3182 uint32_t ea = EA_AY_AI_16(mc68kcpu);
3183 uint32_t res = src & m68ki_read_16((mc68kcpu), ea);
3184
3185 (mc68kcpu)->n_flag = NFLAG_16(res);
3186 (mc68kcpu)->not_z_flag = res;
3187 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3188 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3189
3190 m68ki_write_16((mc68kcpu), ea, res);
3191 }
3192
3193
3194 static void m68k_op_andi_16_pi(m68000_base_device* mc68kcpu)
3195 {
3196 uint32_t src = OPER_I_16(mc68kcpu);
3197 uint32_t ea = EA_AY_PI_16(mc68kcpu);
3198 uint32_t res = src & m68ki_read_16((mc68kcpu), ea);
3199
3200 (mc68kcpu)->n_flag = NFLAG_16(res);
3201 (mc68kcpu)->not_z_flag = res;
3202 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3203 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3204
3205 m68ki_write_16((mc68kcpu), ea, res);
3206 }
3207
3208
3209 static void m68k_op_andi_16_pd(m68000_base_device* mc68kcpu)
3210 {
3211 uint32_t src = OPER_I_16(mc68kcpu);
3212 uint32_t ea = EA_AY_PD_16(mc68kcpu);
3213 uint32_t res = src & m68ki_read_16((mc68kcpu), ea);
3214
3215 (mc68kcpu)->n_flag = NFLAG_16(res);
3216 (mc68kcpu)->not_z_flag = res;
3217 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3218 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3219
3220 m68ki_write_16((mc68kcpu), ea, res);
3221 }
3222
3223
3224 static void m68k_op_andi_16_di(m68000_base_device* mc68kcpu)
3225 {
3226 uint32_t src = OPER_I_16(mc68kcpu);
3227 uint32_t ea = EA_AY_DI_16(mc68kcpu);
3228 uint32_t res = src & m68ki_read_16((mc68kcpu), ea);
3229
3230 (mc68kcpu)->n_flag = NFLAG_16(res);
3231 (mc68kcpu)->not_z_flag = res;
3232 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3233 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3234
3235 m68ki_write_16((mc68kcpu), ea, res);
3236 }
3237
3238
3239 static void m68k_op_andi_16_ix(m68000_base_device* mc68kcpu)
3240 {
3241 uint32_t src = OPER_I_16(mc68kcpu);
3242 uint32_t ea = EA_AY_IX_16(mc68kcpu);
3243 uint32_t res = src & m68ki_read_16((mc68kcpu), ea);
3244
3245 (mc68kcpu)->n_flag = NFLAG_16(res);
3246 (mc68kcpu)->not_z_flag = res;
3247 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3248 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3249
3250 m68ki_write_16((mc68kcpu), ea, res);
3251 }
3252
3253
3254 static void m68k_op_andi_16_aw(m68000_base_device* mc68kcpu)
3255 {
3256 uint32_t src = OPER_I_16(mc68kcpu);
3257 uint32_t ea = EA_AW_16(mc68kcpu);
3258 uint32_t res = src & m68ki_read_16((mc68kcpu), ea);
3259
3260 (mc68kcpu)->n_flag = NFLAG_16(res);
3261 (mc68kcpu)->not_z_flag = res;
3262 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3263 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3264
3265 m68ki_write_16((mc68kcpu), ea, res);
3266 }
3267
3268
3269 static void m68k_op_andi_16_al(m68000_base_device* mc68kcpu)
3270 {
3271 uint32_t src = OPER_I_16(mc68kcpu);
3272 uint32_t ea = EA_AL_16(mc68kcpu);
3273 uint32_t res = src & m68ki_read_16((mc68kcpu), ea);
3274
3275 (mc68kcpu)->n_flag = NFLAG_16(res);
3276 (mc68kcpu)->not_z_flag = res;
3277 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3278 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3279
3280 m68ki_write_16((mc68kcpu), ea, res);
3281 }
3282
3283
3284 static void m68k_op_andi_32_d(m68000_base_device* mc68kcpu)
3285 {
3286 (mc68kcpu)->not_z_flag = DY(mc68kcpu) &= (OPER_I_32(mc68kcpu));
3287
3288 (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag);
3289 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3290 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3291 }
3292
3293
3294 static void m68k_op_andi_32_ai(m68000_base_device* mc68kcpu)
3295 {
3296 uint32_t src = OPER_I_32(mc68kcpu);
3297 uint32_t ea = EA_AY_AI_32(mc68kcpu);
3298 uint32_t res = src & m68ki_read_32((mc68kcpu), ea);
3299
3300 (mc68kcpu)->n_flag = NFLAG_32(res);
3301 (mc68kcpu)->not_z_flag = res;
3302 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3303 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3304
3305 m68ki_write_32((mc68kcpu), ea, res);
3306 }
3307
3308
3309 static void m68k_op_andi_32_pi(m68000_base_device* mc68kcpu)
3310 {
3311 uint32_t src = OPER_I_32(mc68kcpu);
3312 uint32_t ea = EA_AY_PI_32(mc68kcpu);
3313 uint32_t res = src & m68ki_read_32((mc68kcpu), ea);
3314
3315 (mc68kcpu)->n_flag = NFLAG_32(res);
3316 (mc68kcpu)->not_z_flag = res;
3317 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3318 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3319
3320 m68ki_write_32((mc68kcpu), ea, res);
3321 }
3322
3323
3324 static void m68k_op_andi_32_pd(m68000_base_device* mc68kcpu)
3325 {
3326 uint32_t src = OPER_I_32(mc68kcpu);
3327 uint32_t ea = EA_AY_PD_32(mc68kcpu);
3328 uint32_t res = src & m68ki_read_32((mc68kcpu), ea);
3329
3330 (mc68kcpu)->n_flag = NFLAG_32(res);
3331 (mc68kcpu)->not_z_flag = res;
3332 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3333 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3334
3335 m68ki_write_32((mc68kcpu), ea, res);
3336 }
3337
3338
3339 static void m68k_op_andi_32_di(m68000_base_device* mc68kcpu)
3340 {
3341 uint32_t src = OPER_I_32(mc68kcpu);
3342 uint32_t ea = EA_AY_DI_32(mc68kcpu);
3343 uint32_t res = src & m68ki_read_32((mc68kcpu), ea);
3344
3345 (mc68kcpu)->n_flag = NFLAG_32(res);
3346 (mc68kcpu)->not_z_flag = res;
3347 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3348 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3349
3350 m68ki_write_32((mc68kcpu), ea, res);
3351 }
3352
3353
3354 static void m68k_op_andi_32_ix(m68000_base_device* mc68kcpu)
3355 {
3356 uint32_t src = OPER_I_32(mc68kcpu);
3357 uint32_t ea = EA_AY_IX_32(mc68kcpu);
3358 uint32_t res = src & m68ki_read_32((mc68kcpu), ea);
3359
3360 (mc68kcpu)->n_flag = NFLAG_32(res);
3361 (mc68kcpu)->not_z_flag = res;
3362 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3363 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3364
3365 m68ki_write_32((mc68kcpu), ea, res);
3366 }
3367
3368
3369 static void m68k_op_andi_32_aw(m68000_base_device* mc68kcpu)
3370 {
3371 uint32_t src = OPER_I_32(mc68kcpu);
3372 uint32_t ea = EA_AW_32(mc68kcpu);
3373 uint32_t res = src & m68ki_read_32((mc68kcpu), ea);
3374
3375 (mc68kcpu)->n_flag = NFLAG_32(res);
3376 (mc68kcpu)->not_z_flag = res;
3377 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3378 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3379
3380 m68ki_write_32((mc68kcpu), ea, res);
3381 }
3382
3383
3384 static void m68k_op_andi_32_al(m68000_base_device* mc68kcpu)
3385 {
3386 uint32_t src = OPER_I_32(mc68kcpu);
3387 uint32_t ea = EA_AL_32(mc68kcpu);
3388 uint32_t res = src & m68ki_read_32((mc68kcpu), ea);
3389
3390 (mc68kcpu)->n_flag = NFLAG_32(res);
3391 (mc68kcpu)->not_z_flag = res;
3392 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3393 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3394
3395 m68ki_write_32((mc68kcpu), ea, res);
3396 }
3397
3398
3399 static void m68k_op_andi_16_toc(m68000_base_device* mc68kcpu)
3400 {
3401 m68ki_set_ccr((mc68kcpu), m68ki_get_ccr(mc68kcpu) & OPER_I_16(mc68kcpu));
3402 }
3403
3404
3405 static void m68k_op_andi_16_tos(m68000_base_device* mc68kcpu)
3406 {
3407 if((mc68kcpu)->s_flag)
3408 {
3409 uint32_t src = OPER_I_16(mc68kcpu);
3410 //m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
3411 m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) & src);
3412 return;
3413 }
3414 m68ki_exception_privilege_violation(mc68kcpu);
3415 }
3416
3417
3418 static void m68k_op_asr_8_s(m68000_base_device* mc68kcpu)
3419 {
3420 uint32_t* r_dst = &DY(mc68kcpu);
3421 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
3422 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
3423 uint32_t res = src >> shift;
3424
3425 if(shift != 0)
3426 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3427
3428 if(GET_MSB_8(src))
3429 res |= m68ki_shift_8_table[shift];
3430
3431 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3432
3433 (mc68kcpu)->n_flag = NFLAG_8(res);
3434 (mc68kcpu)->not_z_flag = res;
3435 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3436 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift);
3437 }
3438
3439
3440 static void m68k_op_asr_16_s(m68000_base_device* mc68kcpu)
3441 {
3442 uint32_t* r_dst = &DY(mc68kcpu);
3443 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
3444 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
3445 uint32_t res = src >> shift;
3446
3447 if(shift != 0)
3448 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3449
3450 if(GET_MSB_16(src))
3451 res |= m68ki_shift_16_table[shift];
3452
3453 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3454
3455 (mc68kcpu)->n_flag = NFLAG_16(res);
3456 (mc68kcpu)->not_z_flag = res;
3457 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3458 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift);
3459 }
3460
3461
3462 static void m68k_op_asr_32_s(m68000_base_device* mc68kcpu)
3463 {
3464 uint32_t* r_dst = &DY(mc68kcpu);
3465 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
3466 uint32_t src = *r_dst;
3467 uint32_t res = src >> shift;
3468
3469 if(shift != 0)
3470 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3471
3472 if(GET_MSB_32(src))
3473 res |= m68ki_shift_32_table[shift];
3474
3475 *r_dst = res;
3476
3477 (mc68kcpu)->n_flag = NFLAG_32(res);
3478 (mc68kcpu)->not_z_flag = res;
3479 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3480 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift);
3481 }
3482
3483
3484 static void m68k_op_asr_8_r(m68000_base_device* mc68kcpu)
3485 {
3486 uint32_t* r_dst = &DY(mc68kcpu);
3487 uint32_t shift = DX(mc68kcpu) & 0x3f;
3488 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
3489 uint32_t res = src >> shift;
3490
3491 if(shift != 0)
3492 {
3493 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3494
3495 if(shift < 8)
3496 {
3497 if(GET_MSB_8(src))
3498 res |= m68ki_shift_8_table[shift];
3499
3500 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3501
3502 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift);
3503 (mc68kcpu)->n_flag = NFLAG_8(res);
3504 (mc68kcpu)->not_z_flag = res;
3505 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3506 return;
3507 }
3508
3509 if(GET_MSB_8(src))
3510 {
3511 *r_dst |= 0xff;
3512 (mc68kcpu)->c_flag = CFLAG_SET;
3513 (mc68kcpu)->x_flag = XFLAG_SET;
3514 (mc68kcpu)->n_flag = NFLAG_SET;
3515 (mc68kcpu)->not_z_flag = ZFLAG_CLEAR;
3516 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3517 return;
3518 }
3519
3520 *r_dst &= 0xffffff00;
3521 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3522 (mc68kcpu)->x_flag = XFLAG_CLEAR;
3523 (mc68kcpu)->n_flag = NFLAG_CLEAR;
3524 (mc68kcpu)->not_z_flag = ZFLAG_SET;
3525 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3526 return;
3527 }
3528
3529 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3530 (mc68kcpu)->n_flag = NFLAG_8(src);
3531 (mc68kcpu)->not_z_flag = src;
3532 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3533 }
3534
3535
3536 static void m68k_op_asr_16_r(m68000_base_device* mc68kcpu)
3537 {
3538 uint32_t* r_dst = &DY(mc68kcpu);
3539 uint32_t shift = DX(mc68kcpu) & 0x3f;
3540 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
3541 uint32_t res = src >> shift;
3542
3543 if(shift != 0)
3544 {
3545 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3546
3547 if(shift < 16)
3548 {
3549 if(GET_MSB_16(src))
3550 res |= m68ki_shift_16_table[shift];
3551
3552 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3553
3554 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = (src >> (shift - 1))<<8;
3555 (mc68kcpu)->n_flag = NFLAG_16(res);
3556 (mc68kcpu)->not_z_flag = res;
3557 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3558 return;
3559 }
3560
3561 if(GET_MSB_16(src))
3562 {
3563 *r_dst |= 0xffff;
3564 (mc68kcpu)->c_flag = CFLAG_SET;
3565 (mc68kcpu)->x_flag = XFLAG_SET;
3566 (mc68kcpu)->n_flag = NFLAG_SET;
3567 (mc68kcpu)->not_z_flag = ZFLAG_CLEAR;
3568 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3569 return;
3570 }
3571
3572 *r_dst &= 0xffff0000;
3573 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3574 (mc68kcpu)->x_flag = XFLAG_CLEAR;
3575 (mc68kcpu)->n_flag = NFLAG_CLEAR;
3576 (mc68kcpu)->not_z_flag = ZFLAG_SET;
3577 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3578 return;
3579 }
3580
3581 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3582 (mc68kcpu)->n_flag = NFLAG_16(src);
3583 (mc68kcpu)->not_z_flag = src;
3584 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3585 }
3586
3587
3588 static void m68k_op_asr_32_r(m68000_base_device* mc68kcpu)
3589 {
3590 uint32_t* r_dst = &DY(mc68kcpu);
3591 uint32_t shift = DX(mc68kcpu) & 0x3f;
3592 uint32_t src = *r_dst;
3593 uint32_t res = src >> shift;
3594
3595 if(shift != 0)
3596 {
3597 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3598
3599 if(shift < 32)
3600 {
3601 if(GET_MSB_32(src))
3602 res |= m68ki_shift_32_table[shift];
3603
3604 *r_dst = res;
3605
3606 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = (src >> (shift - 1))<<8;
3607 (mc68kcpu)->n_flag = NFLAG_32(res);
3608 (mc68kcpu)->not_z_flag = res;
3609 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3610 return;
3611 }
3612
3613 if(GET_MSB_32(src))
3614 {
3615 *r_dst = 0xffffffff;
3616 (mc68kcpu)->c_flag = CFLAG_SET;
3617 (mc68kcpu)->x_flag = XFLAG_SET;
3618 (mc68kcpu)->n_flag = NFLAG_SET;
3619 (mc68kcpu)->not_z_flag = ZFLAG_CLEAR;
3620 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3621 return;
3622 }
3623
3624 *r_dst = 0;
3625 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3626 (mc68kcpu)->x_flag = XFLAG_CLEAR;
3627 (mc68kcpu)->n_flag = NFLAG_CLEAR;
3628 (mc68kcpu)->not_z_flag = ZFLAG_SET;
3629 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3630 return;
3631 }
3632
3633 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3634 (mc68kcpu)->n_flag = NFLAG_32(src);
3635 (mc68kcpu)->not_z_flag = src;
3636 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3637 }
3638
3639
3640 static void m68k_op_asr_16_ai(m68000_base_device* mc68kcpu)
3641 {
3642 uint32_t ea = EA_AY_AI_16(mc68kcpu);
3643 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3644 uint32_t res = src >> 1;
3645
3646 if(GET_MSB_16(src))
3647 res |= 0x8000;
3648
3649 m68ki_write_16((mc68kcpu), ea, res);
3650
3651 (mc68kcpu)->n_flag = NFLAG_16(res);
3652 (mc68kcpu)->not_z_flag = res;
3653 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3654 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
3655 }
3656
3657
3658 static void m68k_op_asr_16_pi(m68000_base_device* mc68kcpu)
3659 {
3660 uint32_t ea = EA_AY_PI_16(mc68kcpu);
3661 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3662 uint32_t res = src >> 1;
3663
3664 if(GET_MSB_16(src))
3665 res |= 0x8000;
3666
3667 m68ki_write_16((mc68kcpu), ea, res);
3668
3669 (mc68kcpu)->n_flag = NFLAG_16(res);
3670 (mc68kcpu)->not_z_flag = res;
3671 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3672 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
3673 }
3674
3675
3676 static void m68k_op_asr_16_pd(m68000_base_device* mc68kcpu)
3677 {
3678 uint32_t ea = EA_AY_PD_16(mc68kcpu);
3679 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3680 uint32_t res = src >> 1;
3681
3682 if(GET_MSB_16(src))
3683 res |= 0x8000;
3684
3685 m68ki_write_16((mc68kcpu), ea, res);
3686
3687 (mc68kcpu)->n_flag = NFLAG_16(res);
3688 (mc68kcpu)->not_z_flag = res;
3689 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3690 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
3691 }
3692
3693
3694 static void m68k_op_asr_16_di(m68000_base_device* mc68kcpu)
3695 {
3696 uint32_t ea = EA_AY_DI_16(mc68kcpu);
3697 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3698 uint32_t res = src >> 1;
3699
3700 if(GET_MSB_16(src))
3701 res |= 0x8000;
3702
3703 m68ki_write_16((mc68kcpu), ea, res);
3704
3705 (mc68kcpu)->n_flag = NFLAG_16(res);
3706 (mc68kcpu)->not_z_flag = res;
3707 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3708 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
3709 }
3710
3711
3712 static void m68k_op_asr_16_ix(m68000_base_device* mc68kcpu)
3713 {
3714 uint32_t ea = EA_AY_IX_16(mc68kcpu);
3715 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3716 uint32_t res = src >> 1;
3717
3718 if(GET_MSB_16(src))
3719 res |= 0x8000;
3720
3721 m68ki_write_16((mc68kcpu), ea, res);
3722
3723 (mc68kcpu)->n_flag = NFLAG_16(res);
3724 (mc68kcpu)->not_z_flag = res;
3725 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3726 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
3727 }
3728
3729
3730 static void m68k_op_asr_16_aw(m68000_base_device* mc68kcpu)
3731 {
3732 uint32_t ea = EA_AW_16(mc68kcpu);
3733 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3734 uint32_t res = src >> 1;
3735
3736 if(GET_MSB_16(src))
3737 res |= 0x8000;
3738
3739 m68ki_write_16((mc68kcpu), ea, res);
3740
3741 (mc68kcpu)->n_flag = NFLAG_16(res);
3742 (mc68kcpu)->not_z_flag = res;
3743 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3744 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
3745 }
3746
3747
3748 static void m68k_op_asr_16_al(m68000_base_device* mc68kcpu)
3749 {
3750 uint32_t ea = EA_AL_16(mc68kcpu);
3751 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3752 uint32_t res = src >> 1;
3753
3754 if(GET_MSB_16(src))
3755 res |= 0x8000;
3756
3757 m68ki_write_16((mc68kcpu), ea, res);
3758
3759 (mc68kcpu)->n_flag = NFLAG_16(res);
3760 (mc68kcpu)->not_z_flag = res;
3761 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3762 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
3763 }
3764
3765
3766 static void m68k_op_asl_8_s(m68000_base_device* mc68kcpu)
3767 {
3768 uint32_t* r_dst = &DY(mc68kcpu);
3769 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
3770 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
3771 uint32_t res = MASK_OUT_ABOVE_8(src << shift);
3772
3773 if(shift != 0)
3774 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3775
3776 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3777
3778 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << shift;
3779 (mc68kcpu)->n_flag = NFLAG_8(res);
3780 (mc68kcpu)->not_z_flag = res;
3781 src &= m68ki_shift_8_table[shift + 1];
3782 (mc68kcpu)->v_flag = (!(src == 0 || (src == m68ki_shift_8_table[shift + 1] && shift < 8)))<<7;
3783 }
3784
3785
3786 static void m68k_op_asl_16_s(m68000_base_device* mc68kcpu)
3787 {
3788 uint32_t* r_dst = &DY(mc68kcpu);
3789 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
3790 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
3791 uint32_t res = MASK_OUT_ABOVE_16(src << shift);
3792
3793 if(shift != 0)
3794 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3795
3796 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3797
3798 (mc68kcpu)->n_flag = NFLAG_16(res);
3799 (mc68kcpu)->not_z_flag = res;
3800 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> (8-shift);
3801 src &= m68ki_shift_16_table[shift + 1];
3802 (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7;
3803 }
3804
3805
3806 static void m68k_op_asl_32_s(m68000_base_device* mc68kcpu)
3807 {
3808 uint32_t* r_dst = &DY(mc68kcpu);
3809 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
3810 uint32_t src = *r_dst;
3811 uint32_t res = MASK_OUT_ABOVE_32(src << shift);
3812
3813 if(shift != 0)
3814 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3815
3816 *r_dst = res;
3817
3818 (mc68kcpu)->n_flag = NFLAG_32(res);
3819 (mc68kcpu)->not_z_flag = res;
3820 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> (24-shift);
3821 src &= m68ki_shift_32_table[shift + 1];
3822 (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7;
3823 }
3824
3825
3826 static void m68k_op_asl_8_r(m68000_base_device* mc68kcpu)
3827 {
3828 uint32_t* r_dst = &DY(mc68kcpu);
3829 uint32_t shift = DX(mc68kcpu) & 0x3f;
3830 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
3831 uint32_t res = MASK_OUT_ABOVE_8(src << shift);
3832
3833 if(shift != 0)
3834 {
3835 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3836
3837 if(shift < 8)
3838 {
3839 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3840 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << shift;
3841 (mc68kcpu)->n_flag = NFLAG_8(res);
3842 (mc68kcpu)->not_z_flag = res;
3843 src &= m68ki_shift_8_table[shift + 1];
3844 (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_8_table[shift + 1]))<<7;
3845 return;
3846 }
3847
3848 *r_dst &= 0xffffff00;
3849 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = ((shift == 8 ? src & 1 : 0))<<8;
3850 (mc68kcpu)->n_flag = NFLAG_CLEAR;
3851 (mc68kcpu)->not_z_flag = ZFLAG_SET;
3852 (mc68kcpu)->v_flag = (!(src == 0))<<7;
3853 return;
3854 }
3855
3856 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3857 (mc68kcpu)->n_flag = NFLAG_8(src);
3858 (mc68kcpu)->not_z_flag = src;
3859 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3860 }
3861
3862
3863 static void m68k_op_asl_16_r(m68000_base_device* mc68kcpu)
3864 {
3865 uint32_t* r_dst = &DY(mc68kcpu);
3866 uint32_t shift = DX(mc68kcpu) & 0x3f;
3867 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
3868 uint32_t res = MASK_OUT_ABOVE_16(src << shift);
3869
3870 if(shift != 0)
3871 {
3872 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3873
3874 if(shift < 16)
3875 {
3876 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3877 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (src << shift) >> 8;
3878 (mc68kcpu)->n_flag = NFLAG_16(res);
3879 (mc68kcpu)->not_z_flag = res;
3880 src &= m68ki_shift_16_table[shift + 1];
3881 (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7;
3882 return;
3883 }
3884
3885 *r_dst &= 0xffff0000;
3886 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = ((shift == 16 ? src & 1 : 0))<<8;
3887 (mc68kcpu)->n_flag = NFLAG_CLEAR;
3888 (mc68kcpu)->not_z_flag = ZFLAG_SET;
3889 (mc68kcpu)->v_flag = (!(src == 0))<<7;
3890 return;
3891 }
3892
3893 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3894 (mc68kcpu)->n_flag = NFLAG_16(src);
3895 (mc68kcpu)->not_z_flag = src;
3896 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3897 }
3898
3899
3900 static void m68k_op_asl_32_r(m68000_base_device* mc68kcpu)
3901 {
3902 uint32_t* r_dst = &DY(mc68kcpu);
3903 uint32_t shift = DX(mc68kcpu) & 0x3f;
3904 uint32_t src = *r_dst;
3905 uint32_t res = MASK_OUT_ABOVE_32(src << shift);
3906
3907 if(shift != 0)
3908 {
3909 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
3910
3911 if(shift < 32)
3912 {
3913 *r_dst = res;
3914 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (src >> (32 - shift)) << 8;
3915 (mc68kcpu)->n_flag = NFLAG_32(res);
3916 (mc68kcpu)->not_z_flag = res;
3917 src &= m68ki_shift_32_table[shift + 1];
3918 (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7;
3919 return;
3920 }
3921
3922 *r_dst = 0;
3923 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = ((shift == 32 ? src & 1 : 0))<<8;
3924 (mc68kcpu)->n_flag = NFLAG_CLEAR;
3925 (mc68kcpu)->not_z_flag = ZFLAG_SET;
3926 (mc68kcpu)->v_flag = (!(src == 0))<<7;
3927 return;
3928 }
3929
3930 (mc68kcpu)->c_flag = CFLAG_CLEAR;
3931 (mc68kcpu)->n_flag = NFLAG_32(src);
3932 (mc68kcpu)->not_z_flag = src;
3933 (mc68kcpu)->v_flag = VFLAG_CLEAR;
3934 }
3935
3936
3937 static void m68k_op_asl_16_ai(m68000_base_device* mc68kcpu)
3938 {
3939 uint32_t ea = EA_AY_AI_16(mc68kcpu);
3940 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3941 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
3942
3943 m68ki_write_16((mc68kcpu), ea, res);
3944
3945 (mc68kcpu)->n_flag = NFLAG_16(res);
3946 (mc68kcpu)->not_z_flag = res;
3947 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
3948 src &= 0xc000;
3949 (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7;
3950 }
3951
3952
3953 static void m68k_op_asl_16_pi(m68000_base_device* mc68kcpu)
3954 {
3955 uint32_t ea = EA_AY_PI_16(mc68kcpu);
3956 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3957 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
3958
3959 m68ki_write_16((mc68kcpu), ea, res);
3960
3961 (mc68kcpu)->n_flag = NFLAG_16(res);
3962 (mc68kcpu)->not_z_flag = res;
3963 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
3964 src &= 0xc000;
3965 (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7;
3966 }
3967
3968
3969 static void m68k_op_asl_16_pd(m68000_base_device* mc68kcpu)
3970 {
3971 uint32_t ea = EA_AY_PD_16(mc68kcpu);
3972 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3973 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
3974
3975 m68ki_write_16((mc68kcpu), ea, res);
3976
3977 (mc68kcpu)->n_flag = NFLAG_16(res);
3978 (mc68kcpu)->not_z_flag = res;
3979 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
3980 src &= 0xc000;
3981 (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7;
3982 }
3983
3984
3985 static void m68k_op_asl_16_di(m68000_base_device* mc68kcpu)
3986 {
3987 uint32_t ea = EA_AY_DI_16(mc68kcpu);
3988 uint32_t src = m68ki_read_16((mc68kcpu), ea);
3989 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
3990
3991 m68ki_write_16((mc68kcpu), ea, res);
3992
3993 (mc68kcpu)->n_flag = NFLAG_16(res);
3994 (mc68kcpu)->not_z_flag = res;
3995 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
3996 src &= 0xc000;
3997 (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7;
3998 }
3999
4000
4001 static void m68k_op_asl_16_ix(m68000_base_device* mc68kcpu)
4002 {
4003 uint32_t ea = EA_AY_IX_16(mc68kcpu);
4004 uint32_t src = m68ki_read_16((mc68kcpu), ea);
4005 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
4006
4007 m68ki_write_16((mc68kcpu), ea, res);
4008
4009 (mc68kcpu)->n_flag = NFLAG_16(res);
4010 (mc68kcpu)->not_z_flag = res;
4011 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
4012 src &= 0xc000;
4013 (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7;
4014 }
4015
4016
4017 static void m68k_op_asl_16_aw(m68000_base_device* mc68kcpu)
4018 {
4019 uint32_t ea = EA_AW_16(mc68kcpu);
4020 uint32_t src = m68ki_read_16((mc68kcpu), ea);
4021 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
4022
4023 m68ki_write_16((mc68kcpu), ea, res);
4024
4025 (mc68kcpu)->n_flag = NFLAG_16(res);
4026 (mc68kcpu)->not_z_flag = res;
4027 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
4028 src &= 0xc000;
4029 (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7;
4030 }
4031
4032
4033 static void m68k_op_asl_16_al(m68000_base_device* mc68kcpu)
4034 {
4035 uint32_t ea = EA_AL_16(mc68kcpu);
4036 uint32_t src = m68ki_read_16((mc68kcpu), ea);
4037 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
4038
4039 m68ki_write_16((mc68kcpu), ea, res);
4040
4041 (mc68kcpu)->n_flag = NFLAG_16(res);
4042 (mc68kcpu)->not_z_flag = res;
4043 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
4044 src &= 0xc000;
4045 (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7;
4046 }
4047
4048
4049 static void m68k_op_bhi_8(m68000_base_device* mc68kcpu)
4050 {
4051 if(COND_HI(mc68kcpu))
4052 {
4053 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4054 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4055 return;
4056 }
4057 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4058 }
4059
4060
4061 static void m68k_op_bls_8(m68000_base_device* mc68kcpu)
4062 {
4063 if(COND_LS(mc68kcpu))
4064 {
4065 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4066 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4067 return;
4068 }
4069 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4070 }
4071
4072
4073 static void m68k_op_bcc_8(m68000_base_device* mc68kcpu)
4074 {
4075 if(COND_CC(mc68kcpu))
4076 {
4077 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4078 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4079 return;
4080 }
4081 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4082 }
4083
4084
4085 static void m68k_op_bcs_8(m68000_base_device* mc68kcpu)
4086 {
4087 if(COND_CS(mc68kcpu))
4088 {
4089 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4090 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4091 return;
4092 }
4093 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4094 }
4095
4096
4097 static void m68k_op_bne_8(m68000_base_device* mc68kcpu)
4098 {
4099 if(COND_NE(mc68kcpu))
4100 {
4101 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4102 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4103 return;
4104 }
4105 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4106 }
4107
4108
4109 static void m68k_op_beq_8(m68000_base_device* mc68kcpu)
4110 {
4111 if(COND_EQ(mc68kcpu))
4112 {
4113 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4114 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4115 return;
4116 }
4117 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4118 }
4119
4120
4121 static void m68k_op_bvc_8(m68000_base_device* mc68kcpu)
4122 {
4123 if(COND_VC(mc68kcpu))
4124 {
4125 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4126 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4127 return;
4128 }
4129 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4130 }
4131
4132
4133 static void m68k_op_bvs_8(m68000_base_device* mc68kcpu)
4134 {
4135 if(COND_VS(mc68kcpu))
4136 {
4137 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4138 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4139 return;
4140 }
4141 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4142 }
4143
4144
4145 static void m68k_op_bpl_8(m68000_base_device* mc68kcpu)
4146 {
4147 if(COND_PL(mc68kcpu))
4148 {
4149 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4150 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4151 return;
4152 }
4153 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4154 }
4155
4156
4157 static void m68k_op_bmi_8(m68000_base_device* mc68kcpu)
4158 {
4159 if(COND_MI(mc68kcpu))
4160 {
4161 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4162 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4163 return;
4164 }
4165 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4166 }
4167
4168
4169 static void m68k_op_bge_8(m68000_base_device* mc68kcpu)
4170 {
4171 if(COND_GE(mc68kcpu))
4172 {
4173 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4174 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4175 return;
4176 }
4177 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4178 }
4179
4180
4181 static void m68k_op_blt_8(m68000_base_device* mc68kcpu)
4182 {
4183 if(COND_LT(mc68kcpu))
4184 {
4185 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4186 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4187 return;
4188 }
4189 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4190 }
4191
4192
4193 static void m68k_op_bgt_8(m68000_base_device* mc68kcpu)
4194 {
4195 if(COND_GT(mc68kcpu))
4196 {
4197 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4198 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4199 return;
4200 }
4201 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4202 }
4203
4204
4205 static void m68k_op_ble_8(m68000_base_device* mc68kcpu)
4206 {
4207 if(COND_LE(mc68kcpu))
4208 {
4209 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4210 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4211 return;
4212 }
4213 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4214 }
4215
4216
4217 static void m68k_op_bhi_16(m68000_base_device* mc68kcpu)
4218 {
4219 if(COND_HI(mc68kcpu))
4220 {
4221 uint32_t offset = OPER_I_16(mc68kcpu);
4222 REG_PC(mc68kcpu) -= 2;
4223 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4224 m68ki_branch_16((mc68kcpu), offset);
4225 return;
4226 }
4227 REG_PC(mc68kcpu) += 2;
4228 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4229 }
4230
4231
4232 static void m68k_op_bls_16(m68000_base_device* mc68kcpu)
4233 {
4234 if(COND_LS(mc68kcpu))
4235 {
4236 uint32_t offset = OPER_I_16(mc68kcpu);
4237 REG_PC(mc68kcpu) -= 2;
4238 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4239 m68ki_branch_16((mc68kcpu), offset);
4240 return;
4241 }
4242 REG_PC(mc68kcpu) += 2;
4243 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4244 }
4245
4246
4247 static void m68k_op_bcc_16(m68000_base_device* mc68kcpu)
4248 {
4249 if(COND_CC(mc68kcpu))
4250 {
4251 uint32_t offset = OPER_I_16(mc68kcpu);
4252 REG_PC(mc68kcpu) -= 2;
4253 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4254 m68ki_branch_16((mc68kcpu), offset);
4255 return;
4256 }
4257 REG_PC(mc68kcpu) += 2;
4258 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4259 }
4260
4261
4262 static void m68k_op_bcs_16(m68000_base_device* mc68kcpu)
4263 {
4264 if(COND_CS(mc68kcpu))
4265 {
4266 uint32_t offset = OPER_I_16(mc68kcpu);
4267 REG_PC(mc68kcpu) -= 2;
4268 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4269 m68ki_branch_16((mc68kcpu), offset);
4270 return;
4271 }
4272 REG_PC(mc68kcpu) += 2;
4273 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4274 }
4275
4276
4277 static void m68k_op_bne_16(m68000_base_device* mc68kcpu)
4278 {
4279 if(COND_NE(mc68kcpu))
4280 {
4281 uint32_t offset = OPER_I_16(mc68kcpu);
4282 REG_PC(mc68kcpu) -= 2;
4283 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4284 m68ki_branch_16((mc68kcpu), offset);
4285 return;
4286 }
4287 REG_PC(mc68kcpu) += 2;
4288 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4289 }
4290
4291
4292 static void m68k_op_beq_16(m68000_base_device* mc68kcpu)
4293 {
4294 if(COND_EQ(mc68kcpu))
4295 {
4296 uint32_t offset = OPER_I_16(mc68kcpu);
4297 REG_PC(mc68kcpu) -= 2;
4298 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4299 m68ki_branch_16((mc68kcpu), offset);
4300 return;
4301 }
4302 REG_PC(mc68kcpu) += 2;
4303 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4304 }
4305
4306
4307 static void m68k_op_bvc_16(m68000_base_device* mc68kcpu)
4308 {
4309 if(COND_VC(mc68kcpu))
4310 {
4311 uint32_t offset = OPER_I_16(mc68kcpu);
4312 REG_PC(mc68kcpu) -= 2;
4313 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4314 m68ki_branch_16((mc68kcpu), offset);
4315 return;
4316 }
4317 REG_PC(mc68kcpu) += 2;
4318 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4319 }
4320
4321
4322 static void m68k_op_bvs_16(m68000_base_device* mc68kcpu)
4323 {
4324 if(COND_VS(mc68kcpu))
4325 {
4326 uint32_t offset = OPER_I_16(mc68kcpu);
4327 REG_PC(mc68kcpu) -= 2;
4328 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4329 m68ki_branch_16((mc68kcpu), offset);
4330 return;
4331 }
4332 REG_PC(mc68kcpu) += 2;
4333 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4334 }
4335
4336
4337 static void m68k_op_bpl_16(m68000_base_device* mc68kcpu)
4338 {
4339 if(COND_PL(mc68kcpu))
4340 {
4341 uint32_t offset = OPER_I_16(mc68kcpu);
4342 REG_PC(mc68kcpu) -= 2;
4343 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4344 m68ki_branch_16((mc68kcpu), offset);
4345 return;
4346 }
4347 REG_PC(mc68kcpu) += 2;
4348 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4349 }
4350
4351
4352 static void m68k_op_bmi_16(m68000_base_device* mc68kcpu)
4353 {
4354 if(COND_MI(mc68kcpu))
4355 {
4356 uint32_t offset = OPER_I_16(mc68kcpu);
4357 REG_PC(mc68kcpu) -= 2;
4358 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4359 m68ki_branch_16((mc68kcpu), offset);
4360 return;
4361 }
4362 REG_PC(mc68kcpu) += 2;
4363 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4364 }
4365
4366
4367 static void m68k_op_bge_16(m68000_base_device* mc68kcpu)
4368 {
4369 if(COND_GE(mc68kcpu))
4370 {
4371 uint32_t offset = OPER_I_16(mc68kcpu);
4372 REG_PC(mc68kcpu) -= 2;
4373 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4374 m68ki_branch_16((mc68kcpu), offset);
4375 return;
4376 }
4377 REG_PC(mc68kcpu) += 2;
4378 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4379 }
4380
4381
4382 static void m68k_op_blt_16(m68000_base_device* mc68kcpu)
4383 {
4384 if(COND_LT(mc68kcpu))
4385 {
4386 uint32_t offset = OPER_I_16(mc68kcpu);
4387 REG_PC(mc68kcpu) -= 2;
4388 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4389 m68ki_branch_16((mc68kcpu), offset);
4390 return;
4391 }
4392 REG_PC(mc68kcpu) += 2;
4393 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4394 }
4395
4396
4397 static void m68k_op_bgt_16(m68000_base_device* mc68kcpu)
4398 {
4399 if(COND_GT(mc68kcpu))
4400 {
4401 uint32_t offset = OPER_I_16(mc68kcpu);
4402 REG_PC(mc68kcpu) -= 2;
4403 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4404 m68ki_branch_16((mc68kcpu), offset);
4405 return;
4406 }
4407 REG_PC(mc68kcpu) += 2;
4408 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4409 }
4410
4411
4412 static void m68k_op_ble_16(m68000_base_device* mc68kcpu)
4413 {
4414 if(COND_LE(mc68kcpu))
4415 {
4416 uint32_t offset = OPER_I_16(mc68kcpu);
4417 REG_PC(mc68kcpu) -= 2;
4418 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4419 m68ki_branch_16((mc68kcpu), offset);
4420 return;
4421 }
4422 REG_PC(mc68kcpu) += 2;
4423 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w;
4424 }
4425
4426
4427 static void m68k_op_bhi_32(m68000_base_device* mc68kcpu)
4428 {
4429 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4430 {
4431 if(COND_HI(mc68kcpu))
4432 {
4433 uint32_t offset = OPER_I_32(mc68kcpu);
4434 REG_PC(mc68kcpu) -= 4;
4435 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4436 m68ki_branch_32((mc68kcpu), offset);
4437 return;
4438 }
4439 REG_PC(mc68kcpu) += 4;
4440 return;
4441 }
4442 else
4443 {
4444 if(COND_HI(mc68kcpu))
4445 {
4446 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4447 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4448 return;
4449 }
4450 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4451 }
4452 }
4453
4454
4455 static void m68k_op_bls_32(m68000_base_device* mc68kcpu)
4456 {
4457 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4458 {
4459 if(COND_LS(mc68kcpu))
4460 {
4461 uint32_t offset = OPER_I_32(mc68kcpu);
4462 REG_PC(mc68kcpu) -= 4;
4463 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4464 m68ki_branch_32((mc68kcpu), offset);
4465 return;
4466 }
4467 REG_PC(mc68kcpu) += 4;
4468 return;
4469 }
4470 else
4471 {
4472 if(COND_LS(mc68kcpu))
4473 {
4474 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4475 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4476 return;
4477 }
4478 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4479 }
4480 }
4481
4482
4483 static void m68k_op_bcc_32(m68000_base_device* mc68kcpu)
4484 {
4485 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4486 {
4487 if(COND_CC(mc68kcpu))
4488 {
4489 uint32_t offset = OPER_I_32(mc68kcpu);
4490 REG_PC(mc68kcpu) -= 4;
4491 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4492 m68ki_branch_32((mc68kcpu), offset);
4493 return;
4494 }
4495 REG_PC(mc68kcpu) += 4;
4496 return;
4497 }
4498 else
4499 {
4500 if(COND_CC(mc68kcpu))
4501 {
4502 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4503 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4504 return;
4505 }
4506 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4507 }
4508 }
4509
4510
4511 static void m68k_op_bcs_32(m68000_base_device* mc68kcpu)
4512 {
4513 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4514 {
4515 if(COND_CS(mc68kcpu))
4516 {
4517 uint32_t offset = OPER_I_32(mc68kcpu);
4518 REG_PC(mc68kcpu) -= 4;
4519 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4520 m68ki_branch_32((mc68kcpu), offset);
4521 return;
4522 }
4523 REG_PC(mc68kcpu) += 4;
4524 return;
4525 }
4526 else
4527 {
4528 if(COND_CS(mc68kcpu))
4529 {
4530 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4531 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4532 return;
4533 }
4534 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4535 }
4536 }
4537
4538
4539 static void m68k_op_bne_32(m68000_base_device* mc68kcpu)
4540 {
4541 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4542 {
4543 if(COND_NE(mc68kcpu))
4544 {
4545 uint32_t offset = OPER_I_32(mc68kcpu);
4546 REG_PC(mc68kcpu) -= 4;
4547 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4548 m68ki_branch_32((mc68kcpu), offset);
4549 return;
4550 }
4551 REG_PC(mc68kcpu) += 4;
4552 return;
4553 }
4554 else
4555 {
4556 if(COND_NE(mc68kcpu))
4557 {
4558 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4559 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4560 return;
4561 }
4562 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4563 }
4564 }
4565
4566
4567 static void m68k_op_beq_32(m68000_base_device* mc68kcpu)
4568 {
4569 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4570 {
4571 if(COND_EQ(mc68kcpu))
4572 {
4573 uint32_t offset = OPER_I_32(mc68kcpu);
4574 REG_PC(mc68kcpu) -= 4;
4575 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4576 m68ki_branch_32((mc68kcpu), offset);
4577 return;
4578 }
4579 REG_PC(mc68kcpu) += 4;
4580 return;
4581 }
4582 else
4583 {
4584 if(COND_EQ(mc68kcpu))
4585 {
4586 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4587 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4588 return;
4589 }
4590 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4591 }
4592 }
4593
4594
4595 static void m68k_op_bvc_32(m68000_base_device* mc68kcpu)
4596 {
4597 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4598 {
4599 if(COND_VC(mc68kcpu))
4600 {
4601 uint32_t offset = OPER_I_32(mc68kcpu);
4602 REG_PC(mc68kcpu) -= 4;
4603 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4604 m68ki_branch_32((mc68kcpu), offset);
4605 return;
4606 }
4607 REG_PC(mc68kcpu) += 4;
4608 return;
4609 }
4610 else
4611 {
4612 if(COND_VC(mc68kcpu))
4613 {
4614 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4615 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4616 return;
4617 }
4618 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4619 }
4620 }
4621
4622
4623 static void m68k_op_bvs_32(m68000_base_device* mc68kcpu)
4624 {
4625 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4626 {
4627 if(COND_VS(mc68kcpu))
4628 {
4629 uint32_t offset = OPER_I_32(mc68kcpu);
4630 REG_PC(mc68kcpu) -= 4;
4631 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4632 m68ki_branch_32((mc68kcpu), offset);
4633 return;
4634 }
4635 REG_PC(mc68kcpu) += 4;
4636 return;
4637 }
4638 else
4639 {
4640 if(COND_VS(mc68kcpu))
4641 {
4642 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4643 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4644 return;
4645 }
4646 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4647 }
4648 }
4649
4650
4651 static void m68k_op_bpl_32(m68000_base_device* mc68kcpu)
4652 {
4653 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4654 {
4655 if(COND_PL(mc68kcpu))
4656 {
4657 uint32_t offset = OPER_I_32(mc68kcpu);
4658 REG_PC(mc68kcpu) -= 4;
4659 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4660 m68ki_branch_32((mc68kcpu), offset);
4661 return;
4662 }
4663 REG_PC(mc68kcpu) += 4;
4664 return;
4665 }
4666 else
4667 {
4668 if(COND_PL(mc68kcpu))
4669 {
4670 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4671 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4672 return;
4673 }
4674 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4675 }
4676 }
4677
4678
4679 static void m68k_op_bmi_32(m68000_base_device* mc68kcpu)
4680 {
4681 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4682 {
4683 if(COND_MI(mc68kcpu))
4684 {
4685 uint32_t offset = OPER_I_32(mc68kcpu);
4686 REG_PC(mc68kcpu) -= 4;
4687 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4688 m68ki_branch_32((mc68kcpu), offset);
4689 return;
4690 }
4691 REG_PC(mc68kcpu) += 4;
4692 return;
4693 }
4694 else
4695 {
4696 if(COND_MI(mc68kcpu))
4697 {
4698 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4699 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4700 return;
4701 }
4702 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4703 }
4704 }
4705
4706
4707 static void m68k_op_bge_32(m68000_base_device* mc68kcpu)
4708 {
4709 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4710 {
4711 if(COND_GE(mc68kcpu))
4712 {
4713 uint32_t offset = OPER_I_32(mc68kcpu);
4714 REG_PC(mc68kcpu) -= 4;
4715 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4716 m68ki_branch_32((mc68kcpu), offset);
4717 return;
4718 }
4719 REG_PC(mc68kcpu) += 4;
4720 return;
4721 }
4722 else
4723 {
4724 if(COND_GE(mc68kcpu))
4725 {
4726 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4727 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4728 return;
4729 }
4730 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4731 }
4732 }
4733
4734
4735 static void m68k_op_blt_32(m68000_base_device* mc68kcpu)
4736 {
4737 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4738 {
4739 if(COND_LT(mc68kcpu))
4740 {
4741 uint32_t offset = OPER_I_32(mc68kcpu);
4742 REG_PC(mc68kcpu) -= 4;
4743 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4744 m68ki_branch_32((mc68kcpu), offset);
4745 return;
4746 }
4747 REG_PC(mc68kcpu) += 4;
4748 return;
4749 }
4750 else
4751 {
4752 if(COND_LT(mc68kcpu))
4753 {
4754 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4755 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4756 return;
4757 }
4758 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4759 }
4760 }
4761
4762
4763 static void m68k_op_bgt_32(m68000_base_device* mc68kcpu)
4764 {
4765 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4766 {
4767 if(COND_GT(mc68kcpu))
4768 {
4769 uint32_t offset = OPER_I_32(mc68kcpu);
4770 REG_PC(mc68kcpu) -= 4;
4771 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4772 m68ki_branch_32((mc68kcpu), offset);
4773 return;
4774 }
4775 REG_PC(mc68kcpu) += 4;
4776 return;
4777 }
4778 else
4779 {
4780 if(COND_GT(mc68kcpu))
4781 {
4782 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4783 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4784 return;
4785 }
4786 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4787 }
4788 }
4789
4790
4791 static void m68k_op_ble_32(m68000_base_device* mc68kcpu)
4792 {
4793 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
4794 {
4795 if(COND_LE(mc68kcpu))
4796 {
4797 uint32_t offset = OPER_I_32(mc68kcpu);
4798 REG_PC(mc68kcpu) -= 4;
4799 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4800 m68ki_branch_32((mc68kcpu), offset);
4801 return;
4802 }
4803 REG_PC(mc68kcpu) += 4;
4804 return;
4805 }
4806 else
4807 {
4808 if(COND_LE(mc68kcpu))
4809 {
4810 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
4811 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
4812 return;
4813 }
4814 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b;
4815 }
4816 }
4817
4818
4819 static void m68k_op_bchg_32_r_d(m68000_base_device* mc68kcpu)
4820 {
4821 uint32_t* r_dst = &DY(mc68kcpu);
4822 uint32_t mask = 1 << (DX(mc68kcpu) & 0x1f);
4823
4824 (mc68kcpu)->not_z_flag = *r_dst & mask;
4825 *r_dst ^= mask;
4826 }
4827
4828
4829 static void m68k_op_bchg_8_r_ai(m68000_base_device* mc68kcpu)
4830 {
4831 uint32_t ea = EA_AY_AI_8(mc68kcpu);
4832 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4833 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4834
4835 (mc68kcpu)->not_z_flag = src & mask;
4836 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4837 }
4838
4839
4840 static void m68k_op_bchg_8_r_pi(m68000_base_device* mc68kcpu)
4841 {
4842 uint32_t ea = EA_AY_PI_8(mc68kcpu);
4843 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4844 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4845
4846 (mc68kcpu)->not_z_flag = src & mask;
4847 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4848 }
4849
4850
4851 static void m68k_op_bchg_8_r_pi7(m68000_base_device* mc68kcpu)
4852 {
4853 uint32_t ea = EA_A7_PI_8(mc68kcpu);
4854 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4855 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4856
4857 (mc68kcpu)->not_z_flag = src & mask;
4858 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4859 }
4860
4861
4862 static void m68k_op_bchg_8_r_pd(m68000_base_device* mc68kcpu)
4863 {
4864 uint32_t ea = EA_AY_PD_8(mc68kcpu);
4865 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4866 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4867
4868 (mc68kcpu)->not_z_flag = src & mask;
4869 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4870 }
4871
4872
4873 static void m68k_op_bchg_8_r_pd7(m68000_base_device* mc68kcpu)
4874 {
4875 uint32_t ea = EA_A7_PD_8(mc68kcpu);
4876 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4877 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4878
4879 (mc68kcpu)->not_z_flag = src & mask;
4880 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4881 }
4882
4883
4884 static void m68k_op_bchg_8_r_di(m68000_base_device* mc68kcpu)
4885 {
4886 uint32_t ea = EA_AY_DI_8(mc68kcpu);
4887 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4888 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4889
4890 (mc68kcpu)->not_z_flag = src & mask;
4891 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4892 }
4893
4894
4895 static void m68k_op_bchg_8_r_ix(m68000_base_device* mc68kcpu)
4896 {
4897 uint32_t ea = EA_AY_IX_8(mc68kcpu);
4898 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4899 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4900
4901 (mc68kcpu)->not_z_flag = src & mask;
4902 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4903 }
4904
4905
4906 static void m68k_op_bchg_8_r_aw(m68000_base_device* mc68kcpu)
4907 {
4908 uint32_t ea = EA_AW_8(mc68kcpu);
4909 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4910 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4911
4912 (mc68kcpu)->not_z_flag = src & mask;
4913 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4914 }
4915
4916
4917 static void m68k_op_bchg_8_r_al(m68000_base_device* mc68kcpu)
4918 {
4919 uint32_t ea = EA_AL_8(mc68kcpu);
4920 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4921 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
4922
4923 (mc68kcpu)->not_z_flag = src & mask;
4924 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4925 }
4926
4927
4928 static void m68k_op_bchg_32_s_d(m68000_base_device* mc68kcpu)
4929 {
4930 uint32_t* r_dst = &DY(mc68kcpu);
4931 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 0x1f);
4932
4933 (mc68kcpu)->not_z_flag = *r_dst & mask;
4934 *r_dst ^= mask;
4935 }
4936
4937
4938 static void m68k_op_bchg_8_s_ai(m68000_base_device* mc68kcpu)
4939 {
4940 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
4941 uint32_t ea = EA_AY_AI_8(mc68kcpu);
4942 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4943
4944 (mc68kcpu)->not_z_flag = src & mask;
4945 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4946 }
4947
4948
4949 static void m68k_op_bchg_8_s_pi(m68000_base_device* mc68kcpu)
4950 {
4951 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
4952 uint32_t ea = EA_AY_PI_8(mc68kcpu);
4953 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4954
4955 (mc68kcpu)->not_z_flag = src & mask;
4956 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4957 }
4958
4959
4960 static void m68k_op_bchg_8_s_pi7(m68000_base_device* mc68kcpu)
4961 {
4962 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
4963 uint32_t ea = EA_A7_PI_8(mc68kcpu);
4964 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4965
4966 (mc68kcpu)->not_z_flag = src & mask;
4967 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4968 }
4969
4970
4971 static void m68k_op_bchg_8_s_pd(m68000_base_device* mc68kcpu)
4972 {
4973 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
4974 uint32_t ea = EA_AY_PD_8(mc68kcpu);
4975 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4976
4977 (mc68kcpu)->not_z_flag = src & mask;
4978 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4979 }
4980
4981
4982 static void m68k_op_bchg_8_s_pd7(m68000_base_device* mc68kcpu)
4983 {
4984 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
4985 uint32_t ea = EA_A7_PD_8(mc68kcpu);
4986 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4987
4988 (mc68kcpu)->not_z_flag = src & mask;
4989 m68ki_write_8((mc68kcpu), ea, src ^ mask);
4990 }
4991
4992
4993 static void m68k_op_bchg_8_s_di(m68000_base_device* mc68kcpu)
4994 {
4995 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
4996 uint32_t ea = EA_AY_DI_8(mc68kcpu);
4997 uint32_t src = m68ki_read_8((mc68kcpu), ea);
4998
4999 (mc68kcpu)->not_z_flag = src & mask;
5000 m68ki_write_8((mc68kcpu), ea, src ^ mask);
5001 }
5002
5003
5004 static void m68k_op_bchg_8_s_ix(m68000_base_device* mc68kcpu)
5005 {
5006 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5007 uint32_t ea = EA_AY_IX_8(mc68kcpu);
5008 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5009
5010 (mc68kcpu)->not_z_flag = src & mask;
5011 m68ki_write_8((mc68kcpu), ea, src ^ mask);
5012 }
5013
5014
5015 static void m68k_op_bchg_8_s_aw(m68000_base_device* mc68kcpu)
5016 {
5017 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5018 uint32_t ea = EA_AW_8(mc68kcpu);
5019 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5020
5021 (mc68kcpu)->not_z_flag = src & mask;
5022 m68ki_write_8((mc68kcpu), ea, src ^ mask);
5023 }
5024
5025
5026 static void m68k_op_bchg_8_s_al(m68000_base_device* mc68kcpu)
5027 {
5028 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5029 uint32_t ea = EA_AL_8(mc68kcpu);
5030 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5031
5032 (mc68kcpu)->not_z_flag = src & mask;
5033 m68ki_write_8((mc68kcpu), ea, src ^ mask);
5034 }
5035
5036
5037 static void m68k_op_bclr_32_r_d(m68000_base_device* mc68kcpu)
5038 {
5039 uint32_t* r_dst = &DY(mc68kcpu);
5040 uint32_t mask = 1 << (DX(mc68kcpu) & 0x1f);
5041
5042 (mc68kcpu)->not_z_flag = *r_dst & mask;
5043 *r_dst &= ~mask;
5044 }
5045
5046
5047 static void m68k_op_bclr_8_r_ai(m68000_base_device* mc68kcpu)
5048 {
5049 uint32_t ea = EA_AY_AI_8(mc68kcpu);
5050 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5051 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5052
5053 (mc68kcpu)->not_z_flag = src & mask;
5054 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5055 }
5056
5057
5058 static void m68k_op_bclr_8_r_pi(m68000_base_device* mc68kcpu)
5059 {
5060 uint32_t ea = EA_AY_PI_8(mc68kcpu);
5061 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5062 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5063
5064 (mc68kcpu)->not_z_flag = src & mask;
5065 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5066 }
5067
5068
5069 static void m68k_op_bclr_8_r_pi7(m68000_base_device* mc68kcpu)
5070 {
5071 uint32_t ea = EA_A7_PI_8(mc68kcpu);
5072 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5073 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5074
5075 (mc68kcpu)->not_z_flag = src & mask;
5076 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5077 }
5078
5079
5080 static void m68k_op_bclr_8_r_pd(m68000_base_device* mc68kcpu)
5081 {
5082 uint32_t ea = EA_AY_PD_8(mc68kcpu);
5083 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5084 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5085
5086 (mc68kcpu)->not_z_flag = src & mask;
5087 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5088 }
5089
5090
5091 static void m68k_op_bclr_8_r_pd7(m68000_base_device* mc68kcpu)
5092 {
5093 uint32_t ea = EA_A7_PD_8(mc68kcpu);
5094 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5095 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5096
5097 (mc68kcpu)->not_z_flag = src & mask;
5098 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5099 }
5100
5101
5102 static void m68k_op_bclr_8_r_di(m68000_base_device* mc68kcpu)
5103 {
5104 uint32_t ea = EA_AY_DI_8(mc68kcpu);
5105 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5106 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5107
5108 (mc68kcpu)->not_z_flag = src & mask;
5109 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5110 }
5111
5112
5113 static void m68k_op_bclr_8_r_ix(m68000_base_device* mc68kcpu)
5114 {
5115 uint32_t ea = EA_AY_IX_8(mc68kcpu);
5116 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5117 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5118
5119 (mc68kcpu)->not_z_flag = src & mask;
5120 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5121 }
5122
5123
5124 static void m68k_op_bclr_8_r_aw(m68000_base_device* mc68kcpu)
5125 {
5126 uint32_t ea = EA_AW_8(mc68kcpu);
5127 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5128 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5129
5130 (mc68kcpu)->not_z_flag = src & mask;
5131 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5132 }
5133
5134
5135 static void m68k_op_bclr_8_r_al(m68000_base_device* mc68kcpu)
5136 {
5137 uint32_t ea = EA_AL_8(mc68kcpu);
5138 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5139 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
5140
5141 (mc68kcpu)->not_z_flag = src & mask;
5142 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5143 }
5144
5145
5146 static void m68k_op_bclr_32_s_d(m68000_base_device* mc68kcpu)
5147 {
5148 uint32_t* r_dst = &DY(mc68kcpu);
5149 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 0x1f);
5150
5151 (mc68kcpu)->not_z_flag = *r_dst & mask;
5152 *r_dst &= ~mask;
5153 }
5154
5155
5156 static void m68k_op_bclr_8_s_ai(m68000_base_device* mc68kcpu)
5157 {
5158 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5159 uint32_t ea = EA_AY_AI_8(mc68kcpu);
5160 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5161
5162 (mc68kcpu)->not_z_flag = src & mask;
5163 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5164 }
5165
5166
5167 static void m68k_op_bclr_8_s_pi(m68000_base_device* mc68kcpu)
5168 {
5169 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5170 uint32_t ea = EA_AY_PI_8(mc68kcpu);
5171 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5172
5173 (mc68kcpu)->not_z_flag = src & mask;
5174 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5175 }
5176
5177
5178 static void m68k_op_bclr_8_s_pi7(m68000_base_device* mc68kcpu)
5179 {
5180 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5181 uint32_t ea = EA_A7_PI_8(mc68kcpu);
5182 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5183
5184 (mc68kcpu)->not_z_flag = src & mask;
5185 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5186 }
5187
5188
5189 static void m68k_op_bclr_8_s_pd(m68000_base_device* mc68kcpu)
5190 {
5191 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5192 uint32_t ea = EA_AY_PD_8(mc68kcpu);
5193 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5194
5195 (mc68kcpu)->not_z_flag = src & mask;
5196 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5197 }
5198
5199
5200 static void m68k_op_bclr_8_s_pd7(m68000_base_device* mc68kcpu)
5201 {
5202 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5203 uint32_t ea = EA_A7_PD_8(mc68kcpu);
5204 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5205
5206 (mc68kcpu)->not_z_flag = src & mask;
5207 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5208 }
5209
5210
5211 static void m68k_op_bclr_8_s_di(m68000_base_device* mc68kcpu)
5212 {
5213 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5214 uint32_t ea = EA_AY_DI_8(mc68kcpu);
5215 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5216
5217 (mc68kcpu)->not_z_flag = src & mask;
5218 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5219 }
5220
5221
5222 static void m68k_op_bclr_8_s_ix(m68000_base_device* mc68kcpu)
5223 {
5224 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5225 uint32_t ea = EA_AY_IX_8(mc68kcpu);
5226 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5227
5228 (mc68kcpu)->not_z_flag = src & mask;
5229 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5230 }
5231
5232
5233 static void m68k_op_bclr_8_s_aw(m68000_base_device* mc68kcpu)
5234 {
5235 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5236 uint32_t ea = EA_AW_8(mc68kcpu);
5237 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5238
5239 (mc68kcpu)->not_z_flag = src & mask;
5240 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5241 }
5242
5243
5244 static void m68k_op_bclr_8_s_al(m68000_base_device* mc68kcpu)
5245 {
5246 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
5247 uint32_t ea = EA_AL_8(mc68kcpu);
5248 uint32_t src = m68ki_read_8((mc68kcpu), ea);
5249
5250 (mc68kcpu)->not_z_flag = src & mask;
5251 m68ki_write_8((mc68kcpu), ea, src & ~mask);
5252 }
5253
5254
5255 static void m68k_op_bfchg_32_d(m68000_base_device* mc68kcpu)
5256 {
5257 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5258 {
5259 uint32_t word2 = OPER_I_16(mc68kcpu);
5260 uint32_t offset = (word2>>6)&31;
5261 uint32_t width = word2;
5262 uint32_t* data = &DY(mc68kcpu);
5263 uint64_t mask;
5264
5265
5266 if(BIT_B(word2))
5267 offset = REG_D(mc68kcpu)[offset&7];
5268 if(BIT_5(word2))
5269 width = REG_D(mc68kcpu)[width&7];
5270
5271 offset &= 31;
5272 width = ((width-1) & 31) + 1;
5273
5274 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5275 mask = ROR_32(mask, offset);
5276
5277 (mc68kcpu)->n_flag = NFLAG_32(*data<<offset);
5278 (mc68kcpu)->not_z_flag = *data & mask;
5279 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5280 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5281
5282 *data ^= mask;
5283
5284 return;
5285 }
5286 m68ki_exception_illegal(mc68kcpu);
5287 }
5288
5289
5290 static void m68k_op_bfchg_32_ai(m68000_base_device* mc68kcpu)
5291 {
5292 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5293 {
5294 uint32_t word2 = OPER_I_16(mc68kcpu);
5295 int32_t offset = (word2>>6)&31;
5296 uint32_t width = word2;
5297 uint32_t mask_base;
5298 uint32_t data_long;
5299 uint32_t mask_long;
5300 uint32_t data_byte = 0;
5301 uint32_t mask_byte = 0;
5302 uint32_t ea = EA_AY_AI_8(mc68kcpu);
5303
5304
5305 if(BIT_B(word2))
5306 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5307 if(BIT_5(word2))
5308 width = REG_D(mc68kcpu)[width&7];
5309
5310 /* Offset is signed so we have to use ugly math =( */
5311 ea += offset / 8;
5312 offset %= 8;
5313 if(offset < 0)
5314 {
5315 offset += 8;
5316 ea--;
5317 }
5318 width = ((width-1) & 31) + 1;
5319
5320 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5321 mask_long = mask_base >> offset;
5322
5323 data_long = m68ki_read_32((mc68kcpu), ea);
5324 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5325 (mc68kcpu)->not_z_flag = data_long & mask_long;
5326 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5327 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5328
5329 m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long);
5330
5331 if((width + offset) > 32)
5332 {
5333 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5334 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5335 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5336 m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte);
5337 }
5338 return;
5339 }
5340 m68ki_exception_illegal(mc68kcpu);
5341 }
5342
5343
5344 static void m68k_op_bfchg_32_di(m68000_base_device* mc68kcpu)
5345 {
5346 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5347 {
5348 uint32_t word2 = OPER_I_16(mc68kcpu);
5349 int32_t offset = (word2>>6)&31;
5350 uint32_t width = word2;
5351 uint32_t mask_base;
5352 uint32_t data_long;
5353 uint32_t mask_long;
5354 uint32_t data_byte = 0;
5355 uint32_t mask_byte = 0;
5356 uint32_t ea = EA_AY_DI_8(mc68kcpu);
5357
5358
5359 if(BIT_B(word2))
5360 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5361 if(BIT_5(word2))
5362 width = REG_D(mc68kcpu)[width&7];
5363
5364 /* Offset is signed so we have to use ugly math =( */
5365 ea += offset / 8;
5366 offset %= 8;
5367 if(offset < 0)
5368 {
5369 offset += 8;
5370 ea--;
5371 }
5372 width = ((width-1) & 31) + 1;
5373
5374 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5375 mask_long = mask_base >> offset;
5376
5377 data_long = m68ki_read_32((mc68kcpu), ea);
5378 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5379 (mc68kcpu)->not_z_flag = data_long & mask_long;
5380 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5381 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5382
5383 m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long);
5384
5385 if((width + offset) > 32)
5386 {
5387 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5388 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5389 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5390 m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte);
5391 }
5392 return;
5393 }
5394 m68ki_exception_illegal(mc68kcpu);
5395 }
5396
5397
5398 static void m68k_op_bfchg_32_ix(m68000_base_device* mc68kcpu)
5399 {
5400 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5401 {
5402 uint32_t word2 = OPER_I_16(mc68kcpu);
5403 int32_t offset = (word2>>6)&31;
5404 uint32_t width = word2;
5405 uint32_t mask_base;
5406 uint32_t data_long;
5407 uint32_t mask_long;
5408 uint32_t data_byte = 0;
5409 uint32_t mask_byte = 0;
5410 uint32_t ea = EA_AY_IX_8(mc68kcpu);
5411
5412
5413 if(BIT_B(word2))
5414 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5415 if(BIT_5(word2))
5416 width = REG_D(mc68kcpu)[width&7];
5417
5418 /* Offset is signed so we have to use ugly math =( */
5419 ea += offset / 8;
5420 offset %= 8;
5421 if(offset < 0)
5422 {
5423 offset += 8;
5424 ea--;
5425 }
5426 width = ((width-1) & 31) + 1;
5427
5428 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5429 mask_long = mask_base >> offset;
5430
5431 data_long = m68ki_read_32((mc68kcpu), ea);
5432 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5433 (mc68kcpu)->not_z_flag = data_long & mask_long;
5434 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5435 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5436
5437 m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long);
5438
5439 if((width + offset) > 32)
5440 {
5441 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5442 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5443 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5444 m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte);
5445 }
5446 return;
5447 }
5448 m68ki_exception_illegal(mc68kcpu);
5449 }
5450
5451
5452 static void m68k_op_bfchg_32_aw(m68000_base_device* mc68kcpu)
5453 {
5454 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5455 {
5456 uint32_t word2 = OPER_I_16(mc68kcpu);
5457 int32_t offset = (word2>>6)&31;
5458 uint32_t width = word2;
5459 uint32_t mask_base;
5460 uint32_t data_long;
5461 uint32_t mask_long;
5462 uint32_t data_byte = 0;
5463 uint32_t mask_byte = 0;
5464 uint32_t ea = EA_AW_8(mc68kcpu);
5465
5466
5467 if(BIT_B(word2))
5468 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5469 if(BIT_5(word2))
5470 width = REG_D(mc68kcpu)[width&7];
5471
5472 /* Offset is signed so we have to use ugly math =( */
5473 ea += offset / 8;
5474 offset %= 8;
5475 if(offset < 0)
5476 {
5477 offset += 8;
5478 ea--;
5479 }
5480 width = ((width-1) & 31) + 1;
5481
5482 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5483 mask_long = mask_base >> offset;
5484
5485 data_long = m68ki_read_32((mc68kcpu), ea);
5486 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5487 (mc68kcpu)->not_z_flag = data_long & mask_long;
5488 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5489 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5490
5491 m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long);
5492
5493 if((width + offset) > 32)
5494 {
5495 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5496 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5497 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5498 m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte);
5499 }
5500 return;
5501 }
5502 m68ki_exception_illegal(mc68kcpu);
5503 }
5504
5505
5506 static void m68k_op_bfchg_32_al(m68000_base_device* mc68kcpu)
5507 {
5508 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5509 {
5510 uint32_t word2 = OPER_I_16(mc68kcpu);
5511 int32_t offset = (word2>>6)&31;
5512 uint32_t width = word2;
5513 uint32_t mask_base;
5514 uint32_t data_long;
5515 uint32_t mask_long;
5516 uint32_t data_byte = 0;
5517 uint32_t mask_byte = 0;
5518 uint32_t ea = EA_AL_8(mc68kcpu);
5519
5520
5521 if(BIT_B(word2))
5522 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5523 if(BIT_5(word2))
5524 width = REG_D(mc68kcpu)[width&7];
5525
5526 /* Offset is signed so we have to use ugly math =( */
5527 ea += offset / 8;
5528 offset %= 8;
5529 if(offset < 0)
5530 {
5531 offset += 8;
5532 ea--;
5533 }
5534 width = ((width-1) & 31) + 1;
5535
5536 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5537 mask_long = mask_base >> offset;
5538
5539 data_long = m68ki_read_32((mc68kcpu), ea);
5540 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5541 (mc68kcpu)->not_z_flag = data_long & mask_long;
5542 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5543 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5544
5545 m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long);
5546
5547 if((width + offset) > 32)
5548 {
5549 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5550 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5551 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5552 m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte);
5553 }
5554 return;
5555 }
5556 m68ki_exception_illegal(mc68kcpu);
5557 }
5558
5559
5560 static void m68k_op_bfclr_32_d(m68000_base_device* mc68kcpu)
5561 {
5562 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5563 {
5564 uint32_t word2 = OPER_I_16(mc68kcpu);
5565 uint32_t offset = (word2>>6)&31;
5566 uint32_t width = word2;
5567 uint32_t* data = &DY(mc68kcpu);
5568 uint64_t mask;
5569
5570
5571 if(BIT_B(word2))
5572 offset = REG_D(mc68kcpu)[offset&7];
5573 if(BIT_5(word2))
5574 width = REG_D(mc68kcpu)[width&7];
5575
5576
5577 offset &= 31;
5578 width = ((width-1) & 31) + 1;
5579
5580
5581 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5582 mask = ROR_32(mask, offset);
5583
5584 (mc68kcpu)->n_flag = NFLAG_32(*data<<offset);
5585 (mc68kcpu)->not_z_flag = *data & mask;
5586 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5587 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5588
5589 *data &= ~mask;
5590
5591 return;
5592 }
5593 m68ki_exception_illegal(mc68kcpu);
5594 }
5595
5596
5597 static void m68k_op_bfclr_32_ai(m68000_base_device* mc68kcpu)
5598 {
5599 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5600 {
5601 uint32_t word2 = OPER_I_16(mc68kcpu);
5602 int32_t offset = (word2>>6)&31;
5603 uint32_t width = word2;
5604 uint32_t mask_base;
5605 uint32_t data_long;
5606 uint32_t mask_long;
5607 uint32_t data_byte = 0;
5608 uint32_t mask_byte = 0;
5609 uint32_t ea = EA_AY_AI_8(mc68kcpu);
5610
5611
5612 if(BIT_B(word2))
5613 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5614 if(BIT_5(word2))
5615 width = REG_D(mc68kcpu)[width&7];
5616
5617 /* Offset is signed so we have to use ugly math =( */
5618 ea += offset / 8;
5619 offset %= 8;
5620 if(offset < 0)
5621 {
5622 offset += 8;
5623 ea--;
5624 }
5625 width = ((width-1) & 31) + 1;
5626
5627 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5628 mask_long = mask_base >> offset;
5629
5630 data_long = m68ki_read_32((mc68kcpu), ea);
5631 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5632 (mc68kcpu)->not_z_flag = data_long & mask_long;
5633 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5634 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5635
5636 m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long);
5637
5638 if((width + offset) > 32)
5639 {
5640 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5641 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5642 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5643 m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte);
5644 }
5645 return;
5646 }
5647 m68ki_exception_illegal(mc68kcpu);
5648 }
5649
5650
5651 static void m68k_op_bfclr_32_di(m68000_base_device* mc68kcpu)
5652 {
5653 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5654 {
5655 uint32_t word2 = OPER_I_16(mc68kcpu);
5656 int32_t offset = (word2>>6)&31;
5657 uint32_t width = word2;
5658 uint32_t mask_base;
5659 uint32_t data_long;
5660 uint32_t mask_long;
5661 uint32_t data_byte = 0;
5662 uint32_t mask_byte = 0;
5663 uint32_t ea = EA_AY_DI_8(mc68kcpu);
5664
5665
5666 if(BIT_B(word2))
5667 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5668 if(BIT_5(word2))
5669 width = REG_D(mc68kcpu)[width&7];
5670
5671 /* Offset is signed so we have to use ugly math =( */
5672 ea += offset / 8;
5673 offset %= 8;
5674 if(offset < 0)
5675 {
5676 offset += 8;
5677 ea--;
5678 }
5679 width = ((width-1) & 31) + 1;
5680
5681 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5682 mask_long = mask_base >> offset;
5683
5684 data_long = m68ki_read_32((mc68kcpu), ea);
5685 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5686 (mc68kcpu)->not_z_flag = data_long & mask_long;
5687 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5688 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5689
5690 m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long);
5691
5692 if((width + offset) > 32)
5693 {
5694 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5695 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5696 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5697 m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte);
5698 }
5699 return;
5700 }
5701 m68ki_exception_illegal(mc68kcpu);
5702 }
5703
5704
5705 static void m68k_op_bfclr_32_ix(m68000_base_device* mc68kcpu)
5706 {
5707 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5708 {
5709 uint32_t word2 = OPER_I_16(mc68kcpu);
5710 int32_t offset = (word2>>6)&31;
5711 uint32_t width = word2;
5712 uint32_t mask_base;
5713 uint32_t data_long;
5714 uint32_t mask_long;
5715 uint32_t data_byte = 0;
5716 uint32_t mask_byte = 0;
5717 uint32_t ea = EA_AY_IX_8(mc68kcpu);
5718
5719
5720 if(BIT_B(word2))
5721 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5722 if(BIT_5(word2))
5723 width = REG_D(mc68kcpu)[width&7];
5724
5725 /* Offset is signed so we have to use ugly math =( */
5726 ea += offset / 8;
5727 offset %= 8;
5728 if(offset < 0)
5729 {
5730 offset += 8;
5731 ea--;
5732 }
5733 width = ((width-1) & 31) + 1;
5734
5735 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5736 mask_long = mask_base >> offset;
5737
5738 data_long = m68ki_read_32((mc68kcpu), ea);
5739 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5740 (mc68kcpu)->not_z_flag = data_long & mask_long;
5741 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5742 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5743
5744 m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long);
5745
5746 if((width + offset) > 32)
5747 {
5748 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5749 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5750 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5751 m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte);
5752 }
5753 return;
5754 }
5755 m68ki_exception_illegal(mc68kcpu);
5756 }
5757
5758
5759 static void m68k_op_bfclr_32_aw(m68000_base_device* mc68kcpu)
5760 {
5761 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5762 {
5763 uint32_t word2 = OPER_I_16(mc68kcpu);
5764 int32_t offset = (word2>>6)&31;
5765 uint32_t width = word2;
5766 uint32_t mask_base;
5767 uint32_t data_long;
5768 uint32_t mask_long;
5769 uint32_t data_byte = 0;
5770 uint32_t mask_byte = 0;
5771 uint32_t ea = EA_AW_8(mc68kcpu);
5772
5773
5774 if(BIT_B(word2))
5775 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5776 if(BIT_5(word2))
5777 width = REG_D(mc68kcpu)[width&7];
5778
5779 /* Offset is signed so we have to use ugly math =( */
5780 ea += offset / 8;
5781 offset %= 8;
5782 if(offset < 0)
5783 {
5784 offset += 8;
5785 ea--;
5786 }
5787 width = ((width-1) & 31) + 1;
5788
5789 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5790 mask_long = mask_base >> offset;
5791
5792 data_long = m68ki_read_32((mc68kcpu), ea);
5793 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5794 (mc68kcpu)->not_z_flag = data_long & mask_long;
5795 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5796 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5797
5798 m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long);
5799
5800 if((width + offset) > 32)
5801 {
5802 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5803 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5804 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5805 m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte);
5806 }
5807 return;
5808 }
5809 m68ki_exception_illegal(mc68kcpu);
5810 }
5811
5812
5813 static void m68k_op_bfclr_32_al(m68000_base_device* mc68kcpu)
5814 {
5815 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5816 {
5817 uint32_t word2 = OPER_I_16(mc68kcpu);
5818 int32_t offset = (word2>>6)&31;
5819 uint32_t width = word2;
5820 uint32_t mask_base;
5821 uint32_t data_long;
5822 uint32_t mask_long;
5823 uint32_t data_byte = 0;
5824 uint32_t mask_byte = 0;
5825 uint32_t ea = EA_AL_8(mc68kcpu);
5826
5827
5828 if(BIT_B(word2))
5829 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5830 if(BIT_5(word2))
5831 width = REG_D(mc68kcpu)[width&7];
5832
5833 /* Offset is signed so we have to use ugly math =( */
5834 ea += offset / 8;
5835 offset %= 8;
5836 if(offset < 0)
5837 {
5838 offset += 8;
5839 ea--;
5840 }
5841 width = ((width-1) & 31) + 1;
5842
5843 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
5844 mask_long = mask_base >> offset;
5845
5846 data_long = m68ki_read_32((mc68kcpu), ea);
5847 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
5848 (mc68kcpu)->not_z_flag = data_long & mask_long;
5849 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5850 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5851
5852 m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long);
5853
5854 if((width + offset) > 32)
5855 {
5856 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
5857 data_byte = m68ki_read_8((mc68kcpu), ea+4);
5858 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
5859 m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte);
5860 }
5861 return;
5862 }
5863 m68ki_exception_illegal(mc68kcpu);
5864 }
5865
5866
5867 static void m68k_op_bfexts_32_d(m68000_base_device* mc68kcpu)
5868 {
5869 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5870 {
5871 uint32_t word2 = OPER_I_16(mc68kcpu);
5872 uint32_t offset = (word2>>6)&31;
5873 uint32_t width = word2;
5874 uint64_t data = DY(mc68kcpu);
5875
5876
5877 if(BIT_B(word2))
5878 offset = REG_D(mc68kcpu)[offset&7];
5879 if(BIT_5(word2))
5880 width = REG_D(mc68kcpu)[width&7];
5881
5882 offset &= 31;
5883 width = ((width-1) & 31) + 1;
5884
5885 data = ROL_32(data, offset);
5886 (mc68kcpu)->n_flag = NFLAG_32(data);
5887 data = MAKE_INT_32(data) >> (32 - width);
5888
5889 (mc68kcpu)->not_z_flag = data;
5890 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5891 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5892
5893 REG_D(mc68kcpu)[(word2>>12)&7] = data;
5894
5895 return;
5896 }
5897 m68ki_exception_illegal(mc68kcpu);
5898 }
5899
5900
5901 static void m68k_op_bfexts_32_ai(m68000_base_device* mc68kcpu)
5902 {
5903 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5904 {
5905 uint32_t word2 = OPER_I_16(mc68kcpu);
5906 int32_t offset = (word2>>6)&31;
5907 uint32_t width = word2;
5908 uint32_t data;
5909 uint32_t ea = EA_AY_AI_8(mc68kcpu);
5910
5911
5912 if(BIT_B(word2))
5913 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5914 if(BIT_5(word2))
5915 width = REG_D(mc68kcpu)[width&7];
5916
5917 if(BIT_B(word2))
5918 {
5919 /* Offset is signed so we have to use ugly math =( */
5920 ea += offset / 8;
5921 offset %= 8;
5922 if(offset < 0)
5923 {
5924 offset += 8;
5925 ea--;
5926 }
5927 }
5928 width = ((width-1) & 31) + 1;
5929
5930 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
5931 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
5932
5933 data = MASK_OUT_ABOVE_32(data<<offset);
5934
5935 if((offset+width) > 32)
5936 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
5937
5938 (mc68kcpu)->n_flag = NFLAG_32(data);
5939 data = MAKE_INT_32(data) >> (32 - width);
5940
5941 (mc68kcpu)->not_z_flag = data;
5942 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5943 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5944
5945 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
5946
5947 return;
5948 }
5949 m68ki_exception_illegal(mc68kcpu);
5950 }
5951
5952
5953 static void m68k_op_bfexts_32_di(m68000_base_device* mc68kcpu)
5954 {
5955 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
5956 {
5957 uint32_t word2 = OPER_I_16(mc68kcpu);
5958 int32_t offset = (word2>>6)&31;
5959 uint32_t width = word2;
5960 uint32_t data;
5961 uint32_t ea = EA_AY_DI_8(mc68kcpu);
5962
5963
5964 if(BIT_B(word2))
5965 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
5966 if(BIT_5(word2))
5967 width = REG_D(mc68kcpu)[width&7];
5968
5969 if(BIT_B(word2))
5970 {
5971 /* Offset is signed so we have to use ugly math =( */
5972 ea += offset / 8;
5973 offset %= 8;
5974 if(offset < 0)
5975 {
5976 offset += 8;
5977 ea--;
5978 }
5979 }
5980 width = ((width-1) & 31) + 1;
5981
5982 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
5983 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
5984
5985 data = MASK_OUT_ABOVE_32(data<<offset);
5986
5987 if((offset+width) > 32)
5988 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
5989
5990 (mc68kcpu)->n_flag = NFLAG_32(data);
5991 data = MAKE_INT_32(data) >> (32 - width);
5992
5993 (mc68kcpu)->not_z_flag = data;
5994 (mc68kcpu)->v_flag = VFLAG_CLEAR;
5995 (mc68kcpu)->c_flag = CFLAG_CLEAR;
5996
5997 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
5998
5999 return;
6000 }
6001 m68ki_exception_illegal(mc68kcpu);
6002 }
6003
6004
6005 static void m68k_op_bfexts_32_ix(m68000_base_device* mc68kcpu)
6006 {
6007 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6008 {
6009 uint32_t word2 = OPER_I_16(mc68kcpu);
6010 int32_t offset = (word2>>6)&31;
6011 uint32_t width = word2;
6012 uint32_t data;
6013 uint32_t ea = EA_AY_IX_8(mc68kcpu);
6014
6015
6016 if(BIT_B(word2))
6017 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6018 if(BIT_5(word2))
6019 width = REG_D(mc68kcpu)[width&7];
6020
6021 if(BIT_B(word2))
6022 {
6023 /* Offset is signed so we have to use ugly math =( */
6024 ea += offset / 8;
6025 offset %= 8;
6026 if(offset < 0)
6027 {
6028 offset += 8;
6029 ea--;
6030 }
6031 }
6032 width = ((width-1) & 31) + 1;
6033
6034 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6035 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6036
6037 data = MASK_OUT_ABOVE_32(data<<offset);
6038
6039 if((offset+width) > 32)
6040 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6041
6042 (mc68kcpu)->n_flag = NFLAG_32(data);
6043 data = MAKE_INT_32(data) >> (32 - width);
6044
6045 (mc68kcpu)->not_z_flag = data;
6046 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6047 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6048
6049 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6050
6051 return;
6052 }
6053 m68ki_exception_illegal(mc68kcpu);
6054 }
6055
6056
6057 static void m68k_op_bfexts_32_aw(m68000_base_device* mc68kcpu)
6058 {
6059 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6060 {
6061 uint32_t word2 = OPER_I_16(mc68kcpu);
6062 int32_t offset = (word2>>6)&31;
6063 uint32_t width = word2;
6064 uint32_t data;
6065 uint32_t ea = EA_AW_8(mc68kcpu);
6066
6067
6068 if(BIT_B(word2))
6069 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6070 if(BIT_5(word2))
6071 width = REG_D(mc68kcpu)[width&7];
6072
6073 if(BIT_B(word2))
6074 {
6075 /* Offset is signed so we have to use ugly math =( */
6076 ea += offset / 8;
6077 offset %= 8;
6078 if(offset < 0)
6079 {
6080 offset += 8;
6081 ea--;
6082 }
6083 }
6084 width = ((width-1) & 31) + 1;
6085
6086 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6087 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6088
6089 data = MASK_OUT_ABOVE_32(data<<offset);
6090
6091 if((offset+width) > 32)
6092 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6093
6094 (mc68kcpu)->n_flag = NFLAG_32(data);
6095 data = MAKE_INT_32(data) >> (32 - width);
6096
6097 (mc68kcpu)->not_z_flag = data;
6098 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6099 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6100
6101 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6102
6103 return;
6104 }
6105 m68ki_exception_illegal(mc68kcpu);
6106 }
6107
6108
6109 static void m68k_op_bfexts_32_al(m68000_base_device* mc68kcpu)
6110 {
6111 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6112 {
6113 uint32_t word2 = OPER_I_16(mc68kcpu);
6114 int32_t offset = (word2>>6)&31;
6115 uint32_t width = word2;
6116 uint32_t data;
6117 uint32_t ea = EA_AL_8(mc68kcpu);
6118
6119
6120 if(BIT_B(word2))
6121 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6122 if(BIT_5(word2))
6123 width = REG_D(mc68kcpu)[width&7];
6124
6125 if(BIT_B(word2))
6126 {
6127 /* Offset is signed so we have to use ugly math =( */
6128 ea += offset / 8;
6129 offset %= 8;
6130 if(offset < 0)
6131 {
6132 offset += 8;
6133 ea--;
6134 }
6135 }
6136 width = ((width-1) & 31) + 1;
6137
6138 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6139 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6140
6141 data = MASK_OUT_ABOVE_32(data<<offset);
6142
6143 if((offset+width) > 32)
6144 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6145
6146 (mc68kcpu)->n_flag = NFLAG_32(data);
6147 data = MAKE_INT_32(data) >> (32 - width);
6148
6149 (mc68kcpu)->not_z_flag = data;
6150 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6151 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6152
6153 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6154
6155 return;
6156 }
6157 m68ki_exception_illegal(mc68kcpu);
6158 }
6159
6160
6161 static void m68k_op_bfexts_32_pcdi(m68000_base_device* mc68kcpu)
6162 {
6163 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6164 {
6165 uint32_t word2 = OPER_I_16(mc68kcpu);
6166 int32_t offset = (word2>>6)&31;
6167 uint32_t width = word2;
6168 uint32_t data;
6169 uint32_t ea = EA_PCDI_8(mc68kcpu);
6170
6171
6172 if(BIT_B(word2))
6173 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6174 if(BIT_5(word2))
6175 width = REG_D(mc68kcpu)[width&7];
6176
6177 if(BIT_B(word2))
6178 {
6179 /* Offset is signed so we have to use ugly math =( */
6180 ea += offset / 8;
6181 offset %= 8;
6182 if(offset < 0)
6183 {
6184 offset += 8;
6185 ea--;
6186 }
6187 }
6188 width = ((width-1) & 31) + 1;
6189
6190 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6191 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6192
6193 data = MASK_OUT_ABOVE_32(data<<offset);
6194
6195 if((offset+width) > 32)
6196 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6197
6198 (mc68kcpu)->n_flag = NFLAG_32(data);
6199 data = MAKE_INT_32(data) >> (32 - width);
6200
6201 (mc68kcpu)->not_z_flag = data;
6202 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6203 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6204
6205 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6206
6207 return;
6208 }
6209 m68ki_exception_illegal(mc68kcpu);
6210 }
6211
6212
6213 static void m68k_op_bfexts_32_pcix(m68000_base_device* mc68kcpu)
6214 {
6215 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6216 {
6217 uint32_t word2 = OPER_I_16(mc68kcpu);
6218 int32_t offset = (word2>>6)&31;
6219 uint32_t width = word2;
6220 uint32_t data;
6221 uint32_t ea = EA_PCIX_8(mc68kcpu);
6222
6223
6224 if(BIT_B(word2))
6225 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6226 if(BIT_5(word2))
6227 width = REG_D(mc68kcpu)[width&7];
6228
6229 if(BIT_B(word2))
6230 {
6231 /* Offset is signed so we have to use ugly math =( */
6232 ea += offset / 8;
6233 offset %= 8;
6234 if(offset < 0)
6235 {
6236 offset += 8;
6237 ea--;
6238 }
6239 }
6240 width = ((width-1) & 31) + 1;
6241
6242 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6243 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6244
6245 data = MASK_OUT_ABOVE_32(data<<offset);
6246
6247 if((offset+width) > 32)
6248 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6249
6250 (mc68kcpu)->n_flag = NFLAG_32(data);
6251 data = MAKE_INT_32(data) >> (32 - width);
6252
6253 (mc68kcpu)->not_z_flag = data;
6254 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6255 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6256
6257 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6258
6259 return;
6260 }
6261 m68ki_exception_illegal(mc68kcpu);
6262 }
6263
6264
6265 static void m68k_op_bfextu_32_d(m68000_base_device* mc68kcpu)
6266 {
6267 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6268 {
6269 uint32_t word2 = OPER_I_16(mc68kcpu);
6270 uint32_t offset = (word2>>6)&31;
6271 uint32_t width = word2;
6272 uint64_t data = DY(mc68kcpu);
6273
6274
6275 if(BIT_B(word2))
6276 offset = REG_D(mc68kcpu)[offset&7];
6277 if(BIT_5(word2))
6278 width = REG_D(mc68kcpu)[width&7];
6279
6280 offset &= 31;
6281 width = ((width-1) & 31) + 1;
6282
6283 data = ROL_32(data, offset);
6284 (mc68kcpu)->n_flag = NFLAG_32(data);
6285 data >>= 32 - width;
6286
6287 (mc68kcpu)->not_z_flag = data;
6288 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6289 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6290
6291 REG_D(mc68kcpu)[(word2>>12)&7] = data;
6292
6293 return;
6294 }
6295 m68ki_exception_illegal(mc68kcpu);
6296 }
6297
6298
6299 static void m68k_op_bfextu_32_ai(m68000_base_device* mc68kcpu)
6300 {
6301 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6302 {
6303 uint32_t word2 = OPER_I_16(mc68kcpu);
6304 int32_t offset = (word2>>6)&31;
6305 uint32_t width = word2;
6306 uint32_t data;
6307 uint32_t ea = EA_AY_AI_8(mc68kcpu);
6308
6309
6310 if(BIT_B(word2))
6311 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6312 if(BIT_5(word2))
6313 width = REG_D(mc68kcpu)[width&7];
6314
6315 if(BIT_B(word2))
6316 {
6317 /* Offset is signed so we have to use ugly math =( */
6318 ea += offset / 8;
6319 offset %= 8;
6320 if(offset < 0)
6321 {
6322 offset += 8;
6323 ea--;
6324 }
6325 }
6326 width = ((width-1) & 31) + 1;
6327
6328 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6329 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6330 data = MASK_OUT_ABOVE_32(data<<offset);
6331
6332 if((offset+width) > 32)
6333 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6334
6335 (mc68kcpu)->n_flag = NFLAG_32(data);
6336 data >>= (32 - width);
6337
6338 (mc68kcpu)->not_z_flag = data;
6339 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6340 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6341
6342 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6343
6344 return;
6345 }
6346 m68ki_exception_illegal(mc68kcpu);
6347 }
6348
6349
6350 static void m68k_op_bfextu_32_di(m68000_base_device* mc68kcpu)
6351 {
6352 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6353 {
6354 uint32_t word2 = OPER_I_16(mc68kcpu);
6355 int32_t offset = (word2>>6)&31;
6356 uint32_t width = word2;
6357 uint32_t data;
6358 uint32_t ea = EA_AY_DI_8(mc68kcpu);
6359
6360
6361 if(BIT_B(word2))
6362 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6363 if(BIT_5(word2))
6364 width = REG_D(mc68kcpu)[width&7];
6365
6366 if(BIT_B(word2))
6367 {
6368 /* Offset is signed so we have to use ugly math =( */
6369 ea += offset / 8;
6370 offset %= 8;
6371 if(offset < 0)
6372 {
6373 offset += 8;
6374 ea--;
6375 }
6376 }
6377 width = ((width-1) & 31) + 1;
6378
6379 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6380 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6381 data = MASK_OUT_ABOVE_32(data<<offset);
6382
6383 if((offset+width) > 32)
6384 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6385
6386 (mc68kcpu)->n_flag = NFLAG_32(data);
6387 data >>= (32 - width);
6388
6389 (mc68kcpu)->not_z_flag = data;
6390 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6391 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6392
6393 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6394
6395 return;
6396 }
6397 m68ki_exception_illegal(mc68kcpu);
6398 }
6399
6400
6401 static void m68k_op_bfextu_32_ix(m68000_base_device* mc68kcpu)
6402 {
6403 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6404 {
6405 uint32_t word2 = OPER_I_16(mc68kcpu);
6406 int32_t offset = (word2>>6)&31;
6407 uint32_t width = word2;
6408 uint32_t data;
6409 uint32_t ea = EA_AY_IX_8(mc68kcpu);
6410
6411
6412 if(BIT_B(word2))
6413 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6414 if(BIT_5(word2))
6415 width = REG_D(mc68kcpu)[width&7];
6416
6417 if(BIT_B(word2))
6418 {
6419 /* Offset is signed so we have to use ugly math =( */
6420 ea += offset / 8;
6421 offset %= 8;
6422 if(offset < 0)
6423 {
6424 offset += 8;
6425 ea--;
6426 }
6427 }
6428 width = ((width-1) & 31) + 1;
6429
6430 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6431 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6432 data = MASK_OUT_ABOVE_32(data<<offset);
6433
6434 if((offset+width) > 32)
6435 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6436
6437 (mc68kcpu)->n_flag = NFLAG_32(data);
6438 data >>= (32 - width);
6439
6440 (mc68kcpu)->not_z_flag = data;
6441 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6442 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6443
6444 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6445
6446 return;
6447 }
6448 m68ki_exception_illegal(mc68kcpu);
6449 }
6450
6451
6452 static void m68k_op_bfextu_32_aw(m68000_base_device* mc68kcpu)
6453 {
6454 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6455 {
6456 uint32_t word2 = OPER_I_16(mc68kcpu);
6457 int32_t offset = (word2>>6)&31;
6458 uint32_t width = word2;
6459 uint32_t data;
6460 uint32_t ea = EA_AW_8(mc68kcpu);
6461
6462
6463 if(BIT_B(word2))
6464 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6465 if(BIT_5(word2))
6466 width = REG_D(mc68kcpu)[width&7];
6467
6468 if(BIT_B(word2))
6469 {
6470 /* Offset is signed so we have to use ugly math =( */
6471 ea += offset / 8;
6472 offset %= 8;
6473 if(offset < 0)
6474 {
6475 offset += 8;
6476 ea--;
6477 }
6478 }
6479 width = ((width-1) & 31) + 1;
6480
6481 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6482 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6483 data = MASK_OUT_ABOVE_32(data<<offset);
6484
6485 if((offset+width) > 32)
6486 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6487
6488 (mc68kcpu)->n_flag = NFLAG_32(data);
6489 data >>= (32 - width);
6490
6491 (mc68kcpu)->not_z_flag = data;
6492 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6493 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6494
6495 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6496
6497 return;
6498 }
6499 m68ki_exception_illegal(mc68kcpu);
6500 }
6501
6502
6503 static void m68k_op_bfextu_32_al(m68000_base_device* mc68kcpu)
6504 {
6505 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6506 {
6507 uint32_t word2 = OPER_I_16(mc68kcpu);
6508 int32_t offset = (word2>>6)&31;
6509 uint32_t width = word2;
6510 uint32_t data;
6511 uint32_t ea = EA_AL_8(mc68kcpu);
6512
6513
6514 if(BIT_B(word2))
6515 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6516 if(BIT_5(word2))
6517 width = REG_D(mc68kcpu)[width&7];
6518
6519 if(BIT_B(word2))
6520 {
6521 /* Offset is signed so we have to use ugly math =( */
6522 ea += offset / 8;
6523 offset %= 8;
6524 if(offset < 0)
6525 {
6526 offset += 8;
6527 ea--;
6528 }
6529 }
6530 width = ((width-1) & 31) + 1;
6531
6532 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6533 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6534 data = MASK_OUT_ABOVE_32(data<<offset);
6535
6536 if((offset+width) > 32)
6537 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6538
6539 (mc68kcpu)->n_flag = NFLAG_32(data);
6540 data >>= (32 - width);
6541
6542 (mc68kcpu)->not_z_flag = data;
6543 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6544 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6545
6546 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6547
6548 return;
6549 }
6550 m68ki_exception_illegal(mc68kcpu);
6551 }
6552
6553
6554 static void m68k_op_bfextu_32_pcdi(m68000_base_device* mc68kcpu)
6555 {
6556 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6557 {
6558 uint32_t word2 = OPER_I_16(mc68kcpu);
6559 int32_t offset = (word2>>6)&31;
6560 uint32_t width = word2;
6561 uint32_t data;
6562 uint32_t ea = EA_PCDI_8(mc68kcpu);
6563
6564
6565 if(BIT_B(word2))
6566 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6567 if(BIT_5(word2))
6568 width = REG_D(mc68kcpu)[width&7];
6569
6570 if(BIT_B(word2))
6571 {
6572 /* Offset is signed so we have to use ugly math =( */
6573 ea += offset / 8;
6574 offset %= 8;
6575 if(offset < 0)
6576 {
6577 offset += 8;
6578 ea--;
6579 }
6580 }
6581 width = ((width-1) & 31) + 1;
6582
6583 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6584 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6585 data = MASK_OUT_ABOVE_32(data<<offset);
6586
6587 if((offset+width) > 32)
6588 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6589
6590 (mc68kcpu)->n_flag = NFLAG_32(data);
6591 data >>= (32 - width);
6592
6593 (mc68kcpu)->not_z_flag = data;
6594 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6595 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6596
6597 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6598
6599 return;
6600 }
6601 m68ki_exception_illegal(mc68kcpu);
6602 }
6603
6604
6605 static void m68k_op_bfextu_32_pcix(m68000_base_device* mc68kcpu)
6606 {
6607 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6608 {
6609 uint32_t word2 = OPER_I_16(mc68kcpu);
6610 int32_t offset = (word2>>6)&31;
6611 uint32_t width = word2;
6612 uint32_t data;
6613 uint32_t ea = EA_PCIX_8(mc68kcpu);
6614
6615
6616 if(BIT_B(word2))
6617 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6618 if(BIT_5(word2))
6619 width = REG_D(mc68kcpu)[width&7];
6620
6621 if(BIT_B(word2))
6622 {
6623 /* Offset is signed so we have to use ugly math =( */
6624 ea += offset / 8;
6625 offset %= 8;
6626 if(offset < 0)
6627 {
6628 offset += 8;
6629 ea--;
6630 }
6631 }
6632 width = ((width-1) & 31) + 1;
6633
6634 data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
6635 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6636 data = MASK_OUT_ABOVE_32(data<<offset);
6637
6638 if((offset+width) > 32)
6639 data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8;
6640
6641 (mc68kcpu)->n_flag = NFLAG_32(data);
6642 data >>= (32 - width);
6643
6644 (mc68kcpu)->not_z_flag = data;
6645 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6646 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6647
6648 REG_D(mc68kcpu)[(word2 >> 12) & 7] = data;
6649
6650 return;
6651 }
6652 m68ki_exception_illegal(mc68kcpu);
6653 }
6654
6655
6656 static void m68k_op_bfffo_32_d(m68000_base_device* mc68kcpu)
6657 {
6658 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6659 {
6660 uint32_t word2 = OPER_I_16(mc68kcpu);
6661 uint32_t offset = (word2>>6)&31;
6662 uint32_t width = word2;
6663 uint64_t data = DY(mc68kcpu);
6664 uint32_t bit;
6665
6666
6667 if(BIT_B(word2))
6668 offset = REG_D(mc68kcpu)[offset&7];
6669 if(BIT_5(word2))
6670 width = REG_D(mc68kcpu)[width&7];
6671
6672 offset &= 31;
6673 width = ((width-1) & 31) + 1;
6674
6675 data = ROL_32(data, offset);
6676 (mc68kcpu)->n_flag = NFLAG_32(data);
6677 data >>= 32 - width;
6678
6679 (mc68kcpu)->not_z_flag = data;
6680 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6681 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6682
6683 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6684 offset++;
6685
6686 REG_D(mc68kcpu)[(word2>>12)&7] = offset;
6687
6688 return;
6689 }
6690 m68ki_exception_illegal(mc68kcpu);
6691 }
6692
6693
6694 static void m68k_op_bfffo_32_ai(m68000_base_device* mc68kcpu)
6695 {
6696 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6697 {
6698 uint32_t word2 = OPER_I_16(mc68kcpu);
6699 int32_t offset = (word2>>6)&31;
6700 int32_t local_offset;
6701 uint32_t width = word2;
6702 uint32_t data;
6703 uint32_t bit;
6704 uint32_t ea = EA_AY_AI_8(mc68kcpu);
6705
6706
6707 if(BIT_B(word2))
6708 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6709 if(BIT_5(word2))
6710 width = REG_D(mc68kcpu)[width&7];
6711
6712 /* Offset is signed so we have to use ugly math =( */
6713 ea += offset / 8;
6714 local_offset = offset % 8;
6715 if(local_offset < 0)
6716 {
6717 local_offset += 8;
6718 ea--;
6719 }
6720 width = ((width-1) & 31) + 1;
6721
6722 data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6723 data = MASK_OUT_ABOVE_32(data<<local_offset);
6724
6725 if((local_offset+width) > 32)
6726 data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8;
6727
6728 (mc68kcpu)->n_flag = NFLAG_32(data);
6729 data >>= (32 - width);
6730
6731 (mc68kcpu)->not_z_flag = data;
6732 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6733 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6734
6735 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6736 offset++;
6737
6738 REG_D(mc68kcpu)[(word2>>12)&7] = offset;
6739
6740 return;
6741 }
6742 m68ki_exception_illegal(mc68kcpu);
6743 }
6744
6745
6746 static void m68k_op_bfffo_32_di(m68000_base_device* mc68kcpu)
6747 {
6748 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6749 {
6750 uint32_t word2 = OPER_I_16(mc68kcpu);
6751 int32_t offset = (word2>>6)&31;
6752 int32_t local_offset;
6753 uint32_t width = word2;
6754 uint32_t data;
6755 uint32_t bit;
6756 uint32_t ea = EA_AY_DI_8(mc68kcpu);
6757
6758
6759 if(BIT_B(word2))
6760 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6761 if(BIT_5(word2))
6762 width = REG_D(mc68kcpu)[width&7];
6763
6764 /* Offset is signed so we have to use ugly math =( */
6765 ea += offset / 8;
6766 local_offset = offset % 8;
6767 if(local_offset < 0)
6768 {
6769 local_offset += 8;
6770 ea--;
6771 }
6772 width = ((width-1) & 31) + 1;
6773
6774 data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6775 data = MASK_OUT_ABOVE_32(data<<local_offset);
6776
6777 if((local_offset+width) > 32)
6778 data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8;
6779
6780 (mc68kcpu)->n_flag = NFLAG_32(data);
6781 data >>= (32 - width);
6782
6783 (mc68kcpu)->not_z_flag = data;
6784 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6785 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6786
6787 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6788 offset++;
6789
6790 REG_D(mc68kcpu)[(word2>>12)&7] = offset;
6791
6792 return;
6793 }
6794 m68ki_exception_illegal(mc68kcpu);
6795 }
6796
6797
6798 static void m68k_op_bfffo_32_ix(m68000_base_device* mc68kcpu)
6799 {
6800 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6801 {
6802 uint32_t word2 = OPER_I_16(mc68kcpu);
6803 int32_t offset = (word2>>6)&31;
6804 int32_t local_offset;
6805 uint32_t width = word2;
6806 uint32_t data;
6807 uint32_t bit;
6808 uint32_t ea = EA_AY_IX_8(mc68kcpu);
6809
6810
6811 if(BIT_B(word2))
6812 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6813 if(BIT_5(word2))
6814 width = REG_D(mc68kcpu)[width&7];
6815
6816 /* Offset is signed so we have to use ugly math =( */
6817 ea += offset / 8;
6818 local_offset = offset % 8;
6819 if(local_offset < 0)
6820 {
6821 local_offset += 8;
6822 ea--;
6823 }
6824 width = ((width-1) & 31) + 1;
6825
6826 data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6827 data = MASK_OUT_ABOVE_32(data<<local_offset);
6828
6829 if((local_offset+width) > 32)
6830 data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8;
6831
6832 (mc68kcpu)->n_flag = NFLAG_32(data);
6833 data >>= (32 - width);
6834
6835 (mc68kcpu)->not_z_flag = data;
6836 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6837 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6838
6839 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6840 offset++;
6841
6842 REG_D(mc68kcpu)[(word2>>12)&7] = offset;
6843
6844 return;
6845 }
6846 m68ki_exception_illegal(mc68kcpu);
6847 }
6848
6849
6850 static void m68k_op_bfffo_32_aw(m68000_base_device* mc68kcpu)
6851 {
6852 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6853 {
6854 uint32_t word2 = OPER_I_16(mc68kcpu);
6855 int32_t offset = (word2>>6)&31;
6856 int32_t local_offset;
6857 uint32_t width = word2;
6858 uint32_t data;
6859 uint32_t bit;
6860 uint32_t ea = EA_AW_8(mc68kcpu);
6861
6862
6863 if(BIT_B(word2))
6864 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6865 if(BIT_5(word2))
6866 width = REG_D(mc68kcpu)[width&7];
6867
6868 /* Offset is signed so we have to use ugly math =( */
6869 ea += offset / 8;
6870 local_offset = offset % 8;
6871 if(local_offset < 0)
6872 {
6873 local_offset += 8;
6874 ea--;
6875 }
6876 width = ((width-1) & 31) + 1;
6877
6878 data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6879 data = MASK_OUT_ABOVE_32(data<<local_offset);
6880
6881 if((local_offset+width) > 32)
6882 data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8;
6883
6884 (mc68kcpu)->n_flag = NFLAG_32(data);
6885 data >>= (32 - width);
6886
6887 (mc68kcpu)->not_z_flag = data;
6888 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6889 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6890
6891 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6892 offset++;
6893
6894 REG_D(mc68kcpu)[(word2>>12)&7] = offset;
6895
6896 return;
6897 }
6898 m68ki_exception_illegal(mc68kcpu);
6899 }
6900
6901
6902 static void m68k_op_bfffo_32_al(m68000_base_device* mc68kcpu)
6903 {
6904 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6905 {
6906 uint32_t word2 = OPER_I_16(mc68kcpu);
6907 int32_t offset = (word2>>6)&31;
6908 int32_t local_offset;
6909 uint32_t width = word2;
6910 uint32_t data;
6911 uint32_t bit;
6912 uint32_t ea = EA_AL_8(mc68kcpu);
6913
6914
6915 if(BIT_B(word2))
6916 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6917 if(BIT_5(word2))
6918 width = REG_D(mc68kcpu)[width&7];
6919
6920 /* Offset is signed so we have to use ugly math =( */
6921 ea += offset / 8;
6922 local_offset = offset % 8;
6923 if(local_offset < 0)
6924 {
6925 local_offset += 8;
6926 ea--;
6927 }
6928 width = ((width-1) & 31) + 1;
6929
6930 data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6931 data = MASK_OUT_ABOVE_32(data<<local_offset);
6932
6933 if((local_offset+width) > 32)
6934 data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8;
6935
6936 (mc68kcpu)->n_flag = NFLAG_32(data);
6937 data >>= (32 - width);
6938
6939 (mc68kcpu)->not_z_flag = data;
6940 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6941 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6942
6943 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6944 offset++;
6945
6946 REG_D(mc68kcpu)[(word2>>12)&7] = offset;
6947
6948 return;
6949 }
6950 m68ki_exception_illegal(mc68kcpu);
6951 }
6952
6953
6954 static void m68k_op_bfffo_32_pcdi(m68000_base_device* mc68kcpu)
6955 {
6956 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
6957 {
6958 uint32_t word2 = OPER_I_16(mc68kcpu);
6959 int32_t offset = (word2>>6)&31;
6960 int32_t local_offset;
6961 uint32_t width = word2;
6962 uint32_t data;
6963 uint32_t bit;
6964 uint32_t ea = EA_PCDI_8(mc68kcpu);
6965
6966
6967 if(BIT_B(word2))
6968 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
6969 if(BIT_5(word2))
6970 width = REG_D(mc68kcpu)[width&7];
6971
6972 /* Offset is signed so we have to use ugly math =( */
6973 ea += offset / 8;
6974 local_offset = offset % 8;
6975 if(local_offset < 0)
6976 {
6977 local_offset += 8;
6978 ea--;
6979 }
6980 width = ((width-1) & 31) + 1;
6981
6982 data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
6983 data = MASK_OUT_ABOVE_32(data<<local_offset);
6984
6985 if((local_offset+width) > 32)
6986 data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8;
6987
6988 (mc68kcpu)->n_flag = NFLAG_32(data);
6989 data >>= (32 - width);
6990
6991 (mc68kcpu)->not_z_flag = data;
6992 (mc68kcpu)->v_flag = VFLAG_CLEAR;
6993 (mc68kcpu)->c_flag = CFLAG_CLEAR;
6994
6995 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
6996 offset++;
6997
6998 REG_D(mc68kcpu)[(word2>>12)&7] = offset;
6999
7000 return;
7001 }
7002 m68ki_exception_illegal(mc68kcpu);
7003 }
7004
7005
7006 static void m68k_op_bfffo_32_pcix(m68000_base_device* mc68kcpu)
7007 {
7008 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7009 {
7010 uint32_t word2 = OPER_I_16(mc68kcpu);
7011 int32_t offset = (word2>>6)&31;
7012 int32_t local_offset;
7013 uint32_t width = word2;
7014 uint32_t data;
7015 uint32_t bit;
7016 uint32_t ea = EA_PCIX_8(mc68kcpu);
7017
7018
7019 if(BIT_B(word2))
7020 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7021 if(BIT_5(word2))
7022 width = REG_D(mc68kcpu)[width&7];
7023
7024 /* Offset is signed so we have to use ugly math =( */
7025 ea += offset / 8;
7026 local_offset = offset % 8;
7027 if(local_offset < 0)
7028 {
7029 local_offset += 8;
7030 ea--;
7031 }
7032 width = ((width-1) & 31) + 1;
7033
7034 data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
7035 data = MASK_OUT_ABOVE_32(data<<local_offset);
7036
7037 if((local_offset+width) > 32)
7038 data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8;
7039
7040 (mc68kcpu)->n_flag = NFLAG_32(data);
7041 data >>= (32 - width);
7042
7043 (mc68kcpu)->not_z_flag = data;
7044 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7045 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7046
7047 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
7048 offset++;
7049
7050 REG_D(mc68kcpu)[(word2>>12)&7] = offset;
7051
7052 return;
7053 }
7054 m68ki_exception_illegal(mc68kcpu);
7055 }
7056
7057
7058 static void m68k_op_bfins_32_d(m68000_base_device* mc68kcpu)
7059 {
7060 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7061 {
7062 uint32_t word2 = OPER_I_16(mc68kcpu);
7063 uint32_t offset = (word2>>6)&31;
7064 uint32_t width = word2;
7065 uint32_t* data = &DY(mc68kcpu);
7066 uint64_t mask;
7067 uint64_t insert = REG_D(mc68kcpu)[(word2>>12)&7];
7068
7069
7070 if(BIT_B(word2))
7071 offset = REG_D(mc68kcpu)[offset&7];
7072 if(BIT_5(word2))
7073 width = REG_D(mc68kcpu)[width&7];
7074
7075
7076 offset &= 31;
7077 width = ((width-1) & 31) + 1;
7078
7079
7080 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7081 mask = ROR_32(mask, offset);
7082
7083 insert = MASK_OUT_ABOVE_32(insert << (32 - width));
7084 (mc68kcpu)->n_flag = NFLAG_32(insert);
7085 (mc68kcpu)->not_z_flag = insert;
7086 insert = ROR_32(insert, offset);
7087
7088 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7089 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7090
7091 *data &= ~mask;
7092 *data |= insert;
7093
7094 return;
7095 }
7096 m68ki_exception_illegal(mc68kcpu);
7097 }
7098
7099
7100 static void m68k_op_bfins_32_ai(m68000_base_device* mc68kcpu)
7101 {
7102 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7103 {
7104 uint32_t word2 = OPER_I_16(mc68kcpu);
7105 int32_t offset = (word2>>6)&31;
7106 uint32_t width = word2;
7107 uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7];
7108 uint32_t insert_long;
7109 uint32_t insert_byte;
7110 uint32_t mask_base;
7111 uint32_t data_long;
7112 uint32_t mask_long;
7113 uint32_t data_byte = 0;
7114 uint32_t mask_byte = 0;
7115 uint32_t ea = EA_AY_AI_8(mc68kcpu);
7116
7117
7118 if(BIT_B(word2))
7119 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7120 if(BIT_5(word2))
7121 width = REG_D(mc68kcpu)[width&7];
7122
7123 if(BIT_B(word2))
7124 {
7125 /* Offset is signed so we have to use ugly math =( */
7126 ea += offset / 8;
7127 offset %= 8;
7128 if(offset < 0)
7129 {
7130 offset += 8;
7131 ea--;
7132 }
7133 }
7134 width = ((width-1) & 31) + 1;
7135
7136 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7137 mask_long = mask_base >> offset;
7138
7139 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7140 (mc68kcpu)->n_flag = NFLAG_32(insert_base);
7141 (mc68kcpu)->not_z_flag = insert_base;
7142 insert_long = insert_base >> offset;
7143
7144 data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
7145 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
7146 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7147 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7148
7149 if((width + offset) < 8)
7150 {
7151 m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24);
7152 }
7153 else if((width + offset) < 16)
7154 {
7155 m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16);
7156 }
7157 else
7158 {
7159 m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long);
7160 }
7161
7162 if((width + offset) > 32)
7163 {
7164 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7165 insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset);
7166 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7167 (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte);
7168 m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte);
7169 }
7170 return;
7171 }
7172 m68ki_exception_illegal(mc68kcpu);
7173 }
7174
7175
7176 static void m68k_op_bfins_32_di(m68000_base_device* mc68kcpu)
7177 {
7178 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7179 {
7180 uint32_t word2 = OPER_I_16(mc68kcpu);
7181 int32_t offset = (word2>>6)&31;
7182 uint32_t width = word2;
7183 uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7];
7184 uint32_t insert_long;
7185 uint32_t insert_byte;
7186 uint32_t mask_base;
7187 uint32_t data_long;
7188 uint32_t mask_long;
7189 uint32_t data_byte = 0;
7190 uint32_t mask_byte = 0;
7191 uint32_t ea = EA_AY_DI_8(mc68kcpu);
7192
7193
7194 if(BIT_B(word2))
7195 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7196 if(BIT_5(word2))
7197 width = REG_D(mc68kcpu)[width&7];
7198
7199 if(BIT_B(word2))
7200 {
7201 /* Offset is signed so we have to use ugly math =( */
7202 ea += offset / 8;
7203 offset %= 8;
7204 if(offset < 0)
7205 {
7206 offset += 8;
7207 ea--;
7208 }
7209 }
7210 width = ((width-1) & 31) + 1;
7211
7212 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7213 mask_long = mask_base >> offset;
7214
7215 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7216 (mc68kcpu)->n_flag = NFLAG_32(insert_base);
7217 (mc68kcpu)->not_z_flag = insert_base;
7218 insert_long = insert_base >> offset;
7219
7220 data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
7221 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
7222 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7223 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7224
7225 if((width + offset) < 8)
7226 {
7227 m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24);
7228 }
7229 else if((width + offset) < 16)
7230 {
7231 m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16);
7232 }
7233 else
7234 {
7235 m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long);
7236 }
7237
7238 if((width + offset) > 32)
7239 {
7240 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7241 insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset);
7242 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7243 (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte);
7244 m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte);
7245 }
7246 return;
7247 }
7248 m68ki_exception_illegal(mc68kcpu);
7249 }
7250
7251
7252 static void m68k_op_bfins_32_ix(m68000_base_device* mc68kcpu)
7253 {
7254 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7255 {
7256 uint32_t word2 = OPER_I_16(mc68kcpu);
7257 int32_t offset = (word2>>6)&31;
7258 uint32_t width = word2;
7259 uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7];
7260 uint32_t insert_long;
7261 uint32_t insert_byte;
7262 uint32_t mask_base;
7263 uint32_t data_long;
7264 uint32_t mask_long;
7265 uint32_t data_byte = 0;
7266 uint32_t mask_byte = 0;
7267 uint32_t ea = EA_AY_IX_8(mc68kcpu);
7268
7269
7270 if(BIT_B(word2))
7271 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7272 if(BIT_5(word2))
7273 width = REG_D(mc68kcpu)[width&7];
7274
7275 if(BIT_B(word2))
7276 {
7277 /* Offset is signed so we have to use ugly math =( */
7278 ea += offset / 8;
7279 offset %= 8;
7280 if(offset < 0)
7281 {
7282 offset += 8;
7283 ea--;
7284 }
7285 }
7286 width = ((width-1) & 31) + 1;
7287
7288 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7289 mask_long = mask_base >> offset;
7290
7291 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7292 (mc68kcpu)->n_flag = NFLAG_32(insert_base);
7293 (mc68kcpu)->not_z_flag = insert_base;
7294 insert_long = insert_base >> offset;
7295
7296 data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
7297 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
7298 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7299 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7300
7301 if((width + offset) < 8)
7302 {
7303 m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24);
7304 }
7305 else if((width + offset) < 16)
7306 {
7307 m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16);
7308 }
7309 else
7310 {
7311 m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long);
7312 }
7313
7314 if((width + offset) > 32)
7315 {
7316 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7317 insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset);
7318 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7319 (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte);
7320 m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte);
7321 }
7322 return;
7323 }
7324 m68ki_exception_illegal(mc68kcpu);
7325 }
7326
7327
7328 static void m68k_op_bfins_32_aw(m68000_base_device* mc68kcpu)
7329 {
7330 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7331 {
7332 uint32_t word2 = OPER_I_16(mc68kcpu);
7333 int32_t offset = (word2>>6)&31;
7334 uint32_t width = word2;
7335 uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7];
7336 uint32_t insert_long;
7337 uint32_t insert_byte;
7338 uint32_t mask_base;
7339 uint32_t data_long;
7340 uint32_t mask_long;
7341 uint32_t data_byte = 0;
7342 uint32_t mask_byte = 0;
7343 uint32_t ea = EA_AW_8(mc68kcpu);
7344
7345
7346 if(BIT_B(word2))
7347 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7348 if(BIT_5(word2))
7349 width = REG_D(mc68kcpu)[width&7];
7350
7351 if(BIT_B(word2))
7352 {
7353 /* Offset is signed so we have to use ugly math =( */
7354 ea += offset / 8;
7355 offset %= 8;
7356 if(offset < 0)
7357 {
7358 offset += 8;
7359 ea--;
7360 }
7361 }
7362 width = ((width-1) & 31) + 1;
7363
7364 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7365 mask_long = mask_base >> offset;
7366
7367 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7368 (mc68kcpu)->n_flag = NFLAG_32(insert_base);
7369 (mc68kcpu)->not_z_flag = insert_base;
7370 insert_long = insert_base >> offset;
7371
7372 data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
7373 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
7374 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7375 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7376
7377 if((width + offset) < 8)
7378 {
7379 m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24);
7380 }
7381 else if((width + offset) < 16)
7382 {
7383 m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16);
7384 }
7385 else
7386 {
7387 m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long);
7388 }
7389
7390 if((width + offset) > 32)
7391 {
7392 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7393 insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset);
7394 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7395 (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte);
7396 m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte);
7397 }
7398 return;
7399 }
7400 m68ki_exception_illegal(mc68kcpu);
7401 }
7402
7403
7404 static void m68k_op_bfins_32_al(m68000_base_device* mc68kcpu)
7405 {
7406 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7407 {
7408 uint32_t word2 = OPER_I_16(mc68kcpu);
7409 int32_t offset = (word2>>6)&31;
7410 uint32_t width = word2;
7411 uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7];
7412 uint32_t insert_long;
7413 uint32_t insert_byte;
7414 uint32_t mask_base;
7415 uint32_t data_long;
7416 uint32_t mask_long;
7417 uint32_t data_byte = 0;
7418 uint32_t mask_byte = 0;
7419 uint32_t ea = EA_AL_8(mc68kcpu);
7420
7421
7422 if(BIT_B(word2))
7423 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7424 if(BIT_5(word2))
7425 width = REG_D(mc68kcpu)[width&7];
7426
7427 if(BIT_B(word2))
7428 {
7429 /* Offset is signed so we have to use ugly math =( */
7430 ea += offset / 8;
7431 offset %= 8;
7432 if(offset < 0)
7433 {
7434 offset += 8;
7435 ea--;
7436 }
7437 }
7438 width = ((width-1) & 31) + 1;
7439
7440 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7441 mask_long = mask_base >> offset;
7442
7443 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
7444 (mc68kcpu)->n_flag = NFLAG_32(insert_base);
7445 (mc68kcpu)->not_z_flag = insert_base;
7446 insert_long = insert_base >> offset;
7447
7448 data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
7449 (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
7450 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7451 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7452
7453 if((width + offset) < 8)
7454 {
7455 m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24);
7456 }
7457 else if((width + offset) < 16)
7458 {
7459 m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16);
7460 }
7461 else
7462 {
7463 m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long);
7464 }
7465
7466 if((width + offset) > 32)
7467 {
7468 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7469 insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset);
7470 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7471 (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte);
7472 m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte);
7473 }
7474 return;
7475 }
7476 m68ki_exception_illegal(mc68kcpu);
7477 }
7478
7479
7480 static void m68k_op_bfset_32_d(m68000_base_device* mc68kcpu)
7481 {
7482 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7483 {
7484 uint32_t word2 = OPER_I_16(mc68kcpu);
7485 uint32_t offset = (word2>>6)&31;
7486 uint32_t width = word2;
7487 uint32_t* data = &DY(mc68kcpu);
7488 uint64_t mask;
7489
7490
7491 if(BIT_B(word2))
7492 offset = REG_D(mc68kcpu)[offset&7];
7493 if(BIT_5(word2))
7494 width = REG_D(mc68kcpu)[width&7];
7495
7496
7497 offset &= 31;
7498 width = ((width-1) & 31) + 1;
7499
7500
7501 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7502 mask = ROR_32(mask, offset);
7503
7504 (mc68kcpu)->n_flag = NFLAG_32(*data<<offset);
7505 (mc68kcpu)->not_z_flag = *data & mask;
7506 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7507 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7508
7509 *data |= mask;
7510
7511 return;
7512 }
7513 m68ki_exception_illegal(mc68kcpu);
7514 }
7515
7516
7517 static void m68k_op_bfset_32_ai(m68000_base_device* mc68kcpu)
7518 {
7519 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7520 {
7521 uint32_t word2 = OPER_I_16(mc68kcpu);
7522 int32_t offset = (word2>>6)&31;
7523 uint32_t width = word2;
7524 uint32_t mask_base;
7525 uint32_t data_long;
7526 uint32_t mask_long;
7527 uint32_t data_byte = 0;
7528 uint32_t mask_byte = 0;
7529 uint32_t ea = EA_AY_AI_8(mc68kcpu);
7530
7531 if(BIT_B(word2))
7532 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7533 if(BIT_5(word2))
7534 width = REG_D(mc68kcpu)[width&7];
7535
7536 /* Offset is signed so we have to use ugly math =( */
7537 ea += offset / 8;
7538 offset %= 8;
7539 if(offset < 0)
7540 {
7541 offset += 8;
7542 ea--;
7543 }
7544 width = ((width-1) & 31) + 1;
7545
7546 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7547 mask_long = mask_base >> offset;
7548
7549 data_long = m68ki_read_32((mc68kcpu), ea);
7550 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
7551 (mc68kcpu)->not_z_flag = data_long & mask_long;
7552 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7553 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7554
7555 m68ki_write_32((mc68kcpu), ea, data_long | mask_long);
7556
7557 if((width + offset) > 32)
7558 {
7559 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7560 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7561 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
7562 m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte);
7563 }
7564 return;
7565 }
7566 m68ki_exception_illegal(mc68kcpu);
7567 }
7568
7569
7570 static void m68k_op_bfset_32_di(m68000_base_device* mc68kcpu)
7571 {
7572 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7573 {
7574 uint32_t word2 = OPER_I_16(mc68kcpu);
7575 int32_t offset = (word2>>6)&31;
7576 uint32_t width = word2;
7577 uint32_t mask_base;
7578 uint32_t data_long;
7579 uint32_t mask_long;
7580 uint32_t data_byte = 0;
7581 uint32_t mask_byte = 0;
7582 uint32_t ea = EA_AY_DI_8(mc68kcpu);
7583
7584 if(BIT_B(word2))
7585 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7586 if(BIT_5(word2))
7587 width = REG_D(mc68kcpu)[width&7];
7588
7589 /* Offset is signed so we have to use ugly math =( */
7590 ea += offset / 8;
7591 offset %= 8;
7592 if(offset < 0)
7593 {
7594 offset += 8;
7595 ea--;
7596 }
7597 width = ((width-1) & 31) + 1;
7598
7599 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7600 mask_long = mask_base >> offset;
7601
7602 data_long = m68ki_read_32((mc68kcpu), ea);
7603 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
7604 (mc68kcpu)->not_z_flag = data_long & mask_long;
7605 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7606 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7607
7608 m68ki_write_32((mc68kcpu), ea, data_long | mask_long);
7609
7610 if((width + offset) > 32)
7611 {
7612 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7613 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7614 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
7615 m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte);
7616 }
7617 return;
7618 }
7619 m68ki_exception_illegal(mc68kcpu);
7620 }
7621
7622
7623 static void m68k_op_bfset_32_ix(m68000_base_device* mc68kcpu)
7624 {
7625 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7626 {
7627 uint32_t word2 = OPER_I_16(mc68kcpu);
7628 int32_t offset = (word2>>6)&31;
7629 uint32_t width = word2;
7630 uint32_t mask_base;
7631 uint32_t data_long;
7632 uint32_t mask_long;
7633 uint32_t data_byte = 0;
7634 uint32_t mask_byte = 0;
7635 uint32_t ea = EA_AY_IX_8(mc68kcpu);
7636
7637 if(BIT_B(word2))
7638 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7639 if(BIT_5(word2))
7640 width = REG_D(mc68kcpu)[width&7];
7641
7642 /* Offset is signed so we have to use ugly math =( */
7643 ea += offset / 8;
7644 offset %= 8;
7645 if(offset < 0)
7646 {
7647 offset += 8;
7648 ea--;
7649 }
7650 width = ((width-1) & 31) + 1;
7651
7652 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7653 mask_long = mask_base >> offset;
7654
7655 data_long = m68ki_read_32((mc68kcpu), ea);
7656 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
7657 (mc68kcpu)->not_z_flag = data_long & mask_long;
7658 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7659 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7660
7661 m68ki_write_32((mc68kcpu), ea, data_long | mask_long);
7662
7663 if((width + offset) > 32)
7664 {
7665 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7666 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7667 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
7668 m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte);
7669 }
7670 return;
7671 }
7672 m68ki_exception_illegal(mc68kcpu);
7673 }
7674
7675
7676 static void m68k_op_bfset_32_aw(m68000_base_device* mc68kcpu)
7677 {
7678 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7679 {
7680 uint32_t word2 = OPER_I_16(mc68kcpu);
7681 int32_t offset = (word2>>6)&31;
7682 uint32_t width = word2;
7683 uint32_t mask_base;
7684 uint32_t data_long;
7685 uint32_t mask_long;
7686 uint32_t data_byte = 0;
7687 uint32_t mask_byte = 0;
7688 uint32_t ea = EA_AW_8(mc68kcpu);
7689
7690 if(BIT_B(word2))
7691 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7692 if(BIT_5(word2))
7693 width = REG_D(mc68kcpu)[width&7];
7694
7695 /* Offset is signed so we have to use ugly math =( */
7696 ea += offset / 8;
7697 offset %= 8;
7698 if(offset < 0)
7699 {
7700 offset += 8;
7701 ea--;
7702 }
7703 width = ((width-1) & 31) + 1;
7704
7705 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7706 mask_long = mask_base >> offset;
7707
7708 data_long = m68ki_read_32((mc68kcpu), ea);
7709 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
7710 (mc68kcpu)->not_z_flag = data_long & mask_long;
7711 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7712 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7713
7714 m68ki_write_32((mc68kcpu), ea, data_long | mask_long);
7715
7716 if((width + offset) > 32)
7717 {
7718 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7719 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7720 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
7721 m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte);
7722 }
7723 return;
7724 }
7725 m68ki_exception_illegal(mc68kcpu);
7726 }
7727
7728
7729 static void m68k_op_bfset_32_al(m68000_base_device* mc68kcpu)
7730 {
7731 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7732 {
7733 uint32_t word2 = OPER_I_16(mc68kcpu);
7734 int32_t offset = (word2>>6)&31;
7735 uint32_t width = word2;
7736 uint32_t mask_base;
7737 uint32_t data_long;
7738 uint32_t mask_long;
7739 uint32_t data_byte = 0;
7740 uint32_t mask_byte = 0;
7741 uint32_t ea = EA_AL_8(mc68kcpu);
7742
7743 if(BIT_B(word2))
7744 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7745 if(BIT_5(word2))
7746 width = REG_D(mc68kcpu)[width&7];
7747
7748 /* Offset is signed so we have to use ugly math =( */
7749 ea += offset / 8;
7750 offset %= 8;
7751 if(offset < 0)
7752 {
7753 offset += 8;
7754 ea--;
7755 }
7756 width = ((width-1) & 31) + 1;
7757
7758 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7759 mask_long = mask_base >> offset;
7760
7761 data_long = m68ki_read_32((mc68kcpu), ea);
7762 (mc68kcpu)->n_flag = NFLAG_32(data_long << offset);
7763 (mc68kcpu)->not_z_flag = data_long & mask_long;
7764 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7765 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7766
7767 m68ki_write_32((mc68kcpu), ea, data_long | mask_long);
7768
7769 if((width + offset) > 32)
7770 {
7771 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7772 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7773 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
7774 m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte);
7775 }
7776 return;
7777 }
7778 m68ki_exception_illegal(mc68kcpu);
7779 }
7780
7781
7782 static void m68k_op_bftst_32_d(m68000_base_device* mc68kcpu)
7783 {
7784 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7785 {
7786 uint32_t word2 = OPER_I_16(mc68kcpu);
7787 uint32_t offset = (word2>>6)&31;
7788 uint32_t width = word2;
7789 uint32_t* data = &DY(mc68kcpu);
7790 uint64_t mask;
7791
7792
7793 if(BIT_B(word2))
7794 offset = REG_D(mc68kcpu)[offset&7];
7795 if(BIT_5(word2))
7796 width = REG_D(mc68kcpu)[width&7];
7797
7798
7799 offset &= 31;
7800 width = ((width-1) & 31) + 1;
7801
7802
7803 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7804 mask = ROR_32(mask, offset);
7805
7806 (mc68kcpu)->n_flag = NFLAG_32(*data<<offset);
7807 (mc68kcpu)->not_z_flag = *data & mask;
7808 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7809 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7810
7811 return;
7812 }
7813 m68ki_exception_illegal(mc68kcpu);
7814 }
7815
7816
7817 static void m68k_op_bftst_32_ai(m68000_base_device* mc68kcpu)
7818 {
7819 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7820 {
7821 uint32_t word2 = OPER_I_16(mc68kcpu);
7822 int32_t offset = (word2>>6)&31;
7823 uint32_t width = word2;
7824 uint32_t mask_base;
7825 uint32_t data_long;
7826 uint32_t mask_long;
7827 uint32_t data_byte = 0;
7828 uint32_t mask_byte = 0;
7829 uint32_t ea = EA_AY_AI_8(mc68kcpu);
7830
7831 if(BIT_B(word2))
7832 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7833 if(BIT_5(word2))
7834 width = REG_D(mc68kcpu)[width&7];
7835
7836 /* Offset is signed so we have to use ugly math =( */
7837 ea += offset / 8;
7838 offset %= 8;
7839 if(offset < 0)
7840 {
7841 offset += 8;
7842 ea--;
7843 }
7844 width = ((width-1) & 31) + 1;
7845
7846
7847 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7848 mask_long = mask_base >> offset;
7849
7850 data_long = m68ki_read_32((mc68kcpu), ea);
7851 (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<<offset)>>24;
7852 (mc68kcpu)->not_z_flag = data_long & mask_long;
7853 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7854 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7855
7856 if((width + offset) > 32)
7857 {
7858 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7859 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7860 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
7861 }
7862 return;
7863 }
7864 m68ki_exception_illegal(mc68kcpu);
7865 }
7866
7867
7868 static void m68k_op_bftst_32_di(m68000_base_device* mc68kcpu)
7869 {
7870 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7871 {
7872 uint32_t word2 = OPER_I_16(mc68kcpu);
7873 int32_t offset = (word2>>6)&31;
7874 uint32_t width = word2;
7875 uint32_t mask_base;
7876 uint32_t data_long;
7877 uint32_t mask_long;
7878 uint32_t data_byte = 0;
7879 uint32_t mask_byte = 0;
7880 uint32_t ea = EA_AY_DI_8(mc68kcpu);
7881
7882 if(BIT_B(word2))
7883 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7884 if(BIT_5(word2))
7885 width = REG_D(mc68kcpu)[width&7];
7886
7887 /* Offset is signed so we have to use ugly math =( */
7888 ea += offset / 8;
7889 offset %= 8;
7890 if(offset < 0)
7891 {
7892 offset += 8;
7893 ea--;
7894 }
7895 width = ((width-1) & 31) + 1;
7896
7897
7898 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7899 mask_long = mask_base >> offset;
7900
7901 data_long = m68ki_read_32((mc68kcpu), ea);
7902 (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<<offset)>>24;
7903 (mc68kcpu)->not_z_flag = data_long & mask_long;
7904 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7905 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7906
7907 if((width + offset) > 32)
7908 {
7909 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7910 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7911 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
7912 }
7913 return;
7914 }
7915 m68ki_exception_illegal(mc68kcpu);
7916 }
7917
7918
7919 static void m68k_op_bftst_32_ix(m68000_base_device* mc68kcpu)
7920 {
7921 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7922 {
7923 uint32_t word2 = OPER_I_16(mc68kcpu);
7924 int32_t offset = (word2>>6)&31;
7925 uint32_t width = word2;
7926 uint32_t mask_base;
7927 uint32_t data_long;
7928 uint32_t mask_long;
7929 uint32_t data_byte = 0;
7930 uint32_t mask_byte = 0;
7931 uint32_t ea = EA_AY_IX_8(mc68kcpu);
7932
7933 if(BIT_B(word2))
7934 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7935 if(BIT_5(word2))
7936 width = REG_D(mc68kcpu)[width&7];
7937
7938 /* Offset is signed so we have to use ugly math =( */
7939 ea += offset / 8;
7940 offset %= 8;
7941 if(offset < 0)
7942 {
7943 offset += 8;
7944 ea--;
7945 }
7946 width = ((width-1) & 31) + 1;
7947
7948
7949 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
7950 mask_long = mask_base >> offset;
7951
7952 data_long = m68ki_read_32((mc68kcpu), ea);
7953 (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<<offset)>>24;
7954 (mc68kcpu)->not_z_flag = data_long & mask_long;
7955 (mc68kcpu)->v_flag = VFLAG_CLEAR;
7956 (mc68kcpu)->c_flag = CFLAG_CLEAR;
7957
7958 if((width + offset) > 32)
7959 {
7960 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
7961 data_byte = m68ki_read_8((mc68kcpu), ea+4);
7962 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
7963 }
7964 return;
7965 }
7966 m68ki_exception_illegal(mc68kcpu);
7967 }
7968
7969
7970 static void m68k_op_bftst_32_aw(m68000_base_device* mc68kcpu)
7971 {
7972 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
7973 {
7974 uint32_t word2 = OPER_I_16(mc68kcpu);
7975 int32_t offset = (word2>>6)&31;
7976 uint32_t width = word2;
7977 uint32_t mask_base;
7978 uint32_t data_long;
7979 uint32_t mask_long;
7980 uint32_t data_byte = 0;
7981 uint32_t mask_byte = 0;
7982 uint32_t ea = EA_AW_8(mc68kcpu);
7983
7984 if(BIT_B(word2))
7985 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
7986 if(BIT_5(word2))
7987 width = REG_D(mc68kcpu)[width&7];
7988
7989 /* Offset is signed so we have to use ugly math =( */
7990 ea += offset / 8;
7991 offset %= 8;
7992 if(offset < 0)
7993 {
7994 offset += 8;
7995 ea--;
7996 }
7997 width = ((width-1) & 31) + 1;
7998
7999
8000 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
8001 mask_long = mask_base >> offset;
8002
8003 data_long = m68ki_read_32((mc68kcpu), ea);
8004 (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<<offset)>>24;
8005 (mc68kcpu)->not_z_flag = data_long & mask_long;
8006 (mc68kcpu)->v_flag = VFLAG_CLEAR;
8007 (mc68kcpu)->c_flag = CFLAG_CLEAR;
8008
8009 if((width + offset) > 32)
8010 {
8011 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
8012 data_byte = m68ki_read_8((mc68kcpu), ea+4);
8013 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
8014 }
8015 return;
8016 }
8017 m68ki_exception_illegal(mc68kcpu);
8018 }
8019
8020
8021 static void m68k_op_bftst_32_al(m68000_base_device* mc68kcpu)
8022 {
8023 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8024 {
8025 uint32_t word2 = OPER_I_16(mc68kcpu);
8026 int32_t offset = (word2>>6)&31;
8027 uint32_t width = word2;
8028 uint32_t mask_base;
8029 uint32_t data_long;
8030 uint32_t mask_long;
8031 uint32_t data_byte = 0;
8032 uint32_t mask_byte = 0;
8033 uint32_t ea = EA_AL_8(mc68kcpu);
8034
8035 if(BIT_B(word2))
8036 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
8037 if(BIT_5(word2))
8038 width = REG_D(mc68kcpu)[width&7];
8039
8040 /* Offset is signed so we have to use ugly math =( */
8041 ea += offset / 8;
8042 offset %= 8;
8043 if(offset < 0)
8044 {
8045 offset += 8;
8046 ea--;
8047 }
8048 width = ((width-1) & 31) + 1;
8049
8050
8051 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
8052 mask_long = mask_base >> offset;
8053
8054 data_long = m68ki_read_32((mc68kcpu), ea);
8055 (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<<offset)>>24;
8056 (mc68kcpu)->not_z_flag = data_long & mask_long;
8057 (mc68kcpu)->v_flag = VFLAG_CLEAR;
8058 (mc68kcpu)->c_flag = CFLAG_CLEAR;
8059
8060 if((width + offset) > 32)
8061 {
8062 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
8063 data_byte = m68ki_read_8((mc68kcpu), ea+4);
8064 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
8065 }
8066 return;
8067 }
8068 m68ki_exception_illegal(mc68kcpu);
8069 }
8070
8071
8072 static void m68k_op_bftst_32_pcdi(m68000_base_device* mc68kcpu)
8073 {
8074 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8075 {
8076 uint32_t word2 = OPER_I_16(mc68kcpu);
8077 int32_t offset = (word2>>6)&31;
8078 uint32_t width = word2;
8079 uint32_t mask_base;
8080 uint32_t data_long;
8081 uint32_t mask_long;
8082 uint32_t data_byte = 0;
8083 uint32_t mask_byte = 0;
8084 uint32_t ea = EA_PCDI_8(mc68kcpu);
8085
8086 if(BIT_B(word2))
8087 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
8088 if(BIT_5(word2))
8089 width = REG_D(mc68kcpu)[width&7];
8090
8091 /* Offset is signed so we have to use ugly math =( */
8092 ea += offset / 8;
8093 offset %= 8;
8094 if(offset < 0)
8095 {
8096 offset += 8;
8097 ea--;
8098 }
8099 width = ((width-1) & 31) + 1;
8100
8101
8102 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
8103 mask_long = mask_base >> offset;
8104
8105 data_long = m68ki_read_32((mc68kcpu), ea);
8106 (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<<offset)>>24;
8107 (mc68kcpu)->not_z_flag = data_long & mask_long;
8108 (mc68kcpu)->v_flag = VFLAG_CLEAR;
8109 (mc68kcpu)->c_flag = CFLAG_CLEAR;
8110
8111 if((width + offset) > 32)
8112 {
8113 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
8114 data_byte = m68ki_read_8((mc68kcpu), ea+4);
8115 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
8116 }
8117 return;
8118 }
8119 m68ki_exception_illegal(mc68kcpu);
8120 }
8121
8122
8123 static void m68k_op_bftst_32_pcix(m68000_base_device* mc68kcpu)
8124 {
8125 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8126 {
8127 uint32_t word2 = OPER_I_16(mc68kcpu);
8128 int32_t offset = (word2>>6)&31;
8129 uint32_t width = word2;
8130 uint32_t mask_base;
8131 uint32_t data_long;
8132 uint32_t mask_long;
8133 uint32_t data_byte = 0;
8134 uint32_t mask_byte = 0;
8135 uint32_t ea = EA_PCIX_8(mc68kcpu);
8136
8137 if(BIT_B(word2))
8138 offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]);
8139 if(BIT_5(word2))
8140 width = REG_D(mc68kcpu)[width&7];
8141
8142 /* Offset is signed so we have to use ugly math =( */
8143 ea += offset / 8;
8144 offset %= 8;
8145 if(offset < 0)
8146 {
8147 offset += 8;
8148 ea--;
8149 }
8150 width = ((width-1) & 31) + 1;
8151
8152
8153 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
8154 mask_long = mask_base >> offset;
8155
8156 data_long = m68ki_read_32((mc68kcpu), ea);
8157 (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<<offset)>>24;
8158 (mc68kcpu)->not_z_flag = data_long & mask_long;
8159 (mc68kcpu)->v_flag = VFLAG_CLEAR;
8160 (mc68kcpu)->c_flag = CFLAG_CLEAR;
8161
8162 if((width + offset) > 32)
8163 {
8164 mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset);
8165 data_byte = m68ki_read_8((mc68kcpu), ea+4);
8166 (mc68kcpu)->not_z_flag |= (data_byte & mask_byte);
8167 }
8168 return;
8169 }
8170 m68ki_exception_illegal(mc68kcpu);
8171 }
8172
8173
8174 static void m68k_op_bkpt(m68000_base_device* mc68kcpu)
8175 {
8176 /* if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
8177 {
8178 if (!(mc68kcpu)->bkpt_ack_callback.isnull())
8179 ((mc68kcpu)->bkpt_ack_callback)((*mc68kcpu->program), 0, CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type) ? (mc68kcpu)->ir & 7 : 0, 0xffffffff);
8180 }*/
8181 m68ki_exception_illegal(mc68kcpu);
8182 }
8183
8184
8185 static void m68k_op_bra_8(m68000_base_device* mc68kcpu)
8186 {
8187 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8188 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
8189 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
8190 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
8191 }
8192
8193
8194 static void m68k_op_bra_16(m68000_base_device* mc68kcpu)
8195 {
8196 uint32_t offset = OPER_I_16(mc68kcpu);
8197 REG_PC(mc68kcpu) -= 2;
8198 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8199 m68ki_branch_16((mc68kcpu), offset);
8200 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
8201 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
8202 }
8203
8204
8205 static void m68k_op_bra_32(m68000_base_device* mc68kcpu)
8206 {
8207 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8208 {
8209 uint32_t offset = OPER_I_32(mc68kcpu);
8210 REG_PC(mc68kcpu) -= 4;
8211 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8212 m68ki_branch_32((mc68kcpu), offset);
8213 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
8214 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
8215 return;
8216 }
8217 else
8218 {
8219 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8220 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
8221 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
8222 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
8223 }
8224 }
8225
8226
8227 static void m68k_op_bset_32_r_d(m68000_base_device* mc68kcpu)
8228 {
8229 uint32_t* r_dst = &DY(mc68kcpu);
8230 uint32_t mask = 1 << (DX(mc68kcpu) & 0x1f);
8231
8232 (mc68kcpu)->not_z_flag = *r_dst & mask;
8233 *r_dst |= mask;
8234 }
8235
8236
8237 static void m68k_op_bset_8_r_ai(m68000_base_device* mc68kcpu)
8238 {
8239 uint32_t ea = EA_AY_AI_8(mc68kcpu);
8240 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8241 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8242
8243 (mc68kcpu)->not_z_flag = src & mask;
8244 m68ki_write_8((mc68kcpu), ea, src | mask);
8245 }
8246
8247
8248 static void m68k_op_bset_8_r_pi(m68000_base_device* mc68kcpu)
8249 {
8250 uint32_t ea = EA_AY_PI_8(mc68kcpu);
8251 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8252 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8253
8254 (mc68kcpu)->not_z_flag = src & mask;
8255 m68ki_write_8((mc68kcpu), ea, src | mask);
8256 }
8257
8258
8259 static void m68k_op_bset_8_r_pi7(m68000_base_device* mc68kcpu)
8260 {
8261 uint32_t ea = EA_A7_PI_8(mc68kcpu);
8262 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8263 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8264
8265 (mc68kcpu)->not_z_flag = src & mask;
8266 m68ki_write_8((mc68kcpu), ea, src | mask);
8267 }
8268
8269
8270 static void m68k_op_bset_8_r_pd(m68000_base_device* mc68kcpu)
8271 {
8272 uint32_t ea = EA_AY_PD_8(mc68kcpu);
8273 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8274 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8275
8276 (mc68kcpu)->not_z_flag = src & mask;
8277 m68ki_write_8((mc68kcpu), ea, src | mask);
8278 }
8279
8280
8281 static void m68k_op_bset_8_r_pd7(m68000_base_device* mc68kcpu)
8282 {
8283 uint32_t ea = EA_A7_PD_8(mc68kcpu);
8284 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8285 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8286
8287 (mc68kcpu)->not_z_flag = src & mask;
8288 m68ki_write_8((mc68kcpu), ea, src | mask);
8289 }
8290
8291
8292 static void m68k_op_bset_8_r_di(m68000_base_device* mc68kcpu)
8293 {
8294 uint32_t ea = EA_AY_DI_8(mc68kcpu);
8295 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8296 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8297
8298 (mc68kcpu)->not_z_flag = src & mask;
8299 m68ki_write_8((mc68kcpu), ea, src | mask);
8300 }
8301
8302
8303 static void m68k_op_bset_8_r_ix(m68000_base_device* mc68kcpu)
8304 {
8305 uint32_t ea = EA_AY_IX_8(mc68kcpu);
8306 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8307 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8308
8309 (mc68kcpu)->not_z_flag = src & mask;
8310 m68ki_write_8((mc68kcpu), ea, src | mask);
8311 }
8312
8313
8314 static void m68k_op_bset_8_r_aw(m68000_base_device* mc68kcpu)
8315 {
8316 uint32_t ea = EA_AW_8(mc68kcpu);
8317 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8318 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8319
8320 (mc68kcpu)->not_z_flag = src & mask;
8321 m68ki_write_8((mc68kcpu), ea, src | mask);
8322 }
8323
8324
8325 static void m68k_op_bset_8_r_al(m68000_base_device* mc68kcpu)
8326 {
8327 uint32_t ea = EA_AL_8(mc68kcpu);
8328 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8329 uint32_t mask = 1 << (DX(mc68kcpu) & 7);
8330
8331 (mc68kcpu)->not_z_flag = src & mask;
8332 m68ki_write_8((mc68kcpu), ea, src | mask);
8333 }
8334
8335
8336 static void m68k_op_bset_32_s_d(m68000_base_device* mc68kcpu)
8337 {
8338 uint32_t* r_dst = &DY(mc68kcpu);
8339 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 0x1f);
8340
8341 (mc68kcpu)->not_z_flag = *r_dst & mask;
8342 *r_dst |= mask;
8343 }
8344
8345
8346 static void m68k_op_bset_8_s_ai(m68000_base_device* mc68kcpu)
8347 {
8348 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8349 uint32_t ea = EA_AY_AI_8(mc68kcpu);
8350 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8351
8352 (mc68kcpu)->not_z_flag = src & mask;
8353 m68ki_write_8((mc68kcpu), ea, src | mask);
8354 }
8355
8356
8357 static void m68k_op_bset_8_s_pi(m68000_base_device* mc68kcpu)
8358 {
8359 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8360 uint32_t ea = EA_AY_PI_8(mc68kcpu);
8361 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8362
8363 (mc68kcpu)->not_z_flag = src & mask;
8364 m68ki_write_8((mc68kcpu), ea, src | mask);
8365 }
8366
8367
8368 static void m68k_op_bset_8_s_pi7(m68000_base_device* mc68kcpu)
8369 {
8370 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8371 uint32_t ea = EA_A7_PI_8(mc68kcpu);
8372 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8373
8374 (mc68kcpu)->not_z_flag = src & mask;
8375 m68ki_write_8((mc68kcpu), ea, src | mask);
8376 }
8377
8378
8379 static void m68k_op_bset_8_s_pd(m68000_base_device* mc68kcpu)
8380 {
8381 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8382 uint32_t ea = EA_AY_PD_8(mc68kcpu);
8383 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8384
8385 (mc68kcpu)->not_z_flag = src & mask;
8386 m68ki_write_8((mc68kcpu), ea, src | mask);
8387 }
8388
8389
8390 static void m68k_op_bset_8_s_pd7(m68000_base_device* mc68kcpu)
8391 {
8392 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8393 uint32_t ea = EA_A7_PD_8(mc68kcpu);
8394 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8395
8396 (mc68kcpu)->not_z_flag = src & mask;
8397 m68ki_write_8((mc68kcpu), ea, src | mask);
8398 }
8399
8400
8401 static void m68k_op_bset_8_s_di(m68000_base_device* mc68kcpu)
8402 {
8403 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8404 uint32_t ea = EA_AY_DI_8(mc68kcpu);
8405 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8406
8407 (mc68kcpu)->not_z_flag = src & mask;
8408 m68ki_write_8((mc68kcpu), ea, src | mask);
8409 }
8410
8411
8412 static void m68k_op_bset_8_s_ix(m68000_base_device* mc68kcpu)
8413 {
8414 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8415 uint32_t ea = EA_AY_IX_8(mc68kcpu);
8416 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8417
8418 (mc68kcpu)->not_z_flag = src & mask;
8419 m68ki_write_8((mc68kcpu), ea, src | mask);
8420 }
8421
8422
8423 static void m68k_op_bset_8_s_aw(m68000_base_device* mc68kcpu)
8424 {
8425 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8426 uint32_t ea = EA_AW_8(mc68kcpu);
8427 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8428
8429 (mc68kcpu)->not_z_flag = src & mask;
8430 m68ki_write_8((mc68kcpu), ea, src | mask);
8431 }
8432
8433
8434 static void m68k_op_bset_8_s_al(m68000_base_device* mc68kcpu)
8435 {
8436 uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7);
8437 uint32_t ea = EA_AL_8(mc68kcpu);
8438 uint32_t src = m68ki_read_8((mc68kcpu), ea);
8439
8440 (mc68kcpu)->not_z_flag = src & mask;
8441 m68ki_write_8((mc68kcpu), ea, src | mask);
8442 }
8443
8444
8445 static void m68k_op_bsr_8(m68000_base_device* mc68kcpu)
8446 {
8447 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8448 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
8449 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
8450 }
8451
8452
8453 static void m68k_op_bsr_16(m68000_base_device* mc68kcpu)
8454 {
8455 uint32_t offset = OPER_I_16(mc68kcpu);
8456 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8457 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
8458 REG_PC(mc68kcpu) -= 2;
8459 m68ki_branch_16((mc68kcpu), offset);
8460 }
8461
8462
8463 static void m68k_op_bsr_32(m68000_base_device* mc68kcpu)
8464 {
8465 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8466 {
8467 uint32_t offset = OPER_I_32(mc68kcpu);
8468 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8469 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
8470 REG_PC(mc68kcpu) -= 4;
8471 m68ki_branch_32((mc68kcpu), offset);
8472 return;
8473 }
8474 else
8475 {
8476 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8477 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
8478 m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir));
8479 }
8480 }
8481
8482
8483 static void m68k_op_btst_32_r_d(m68000_base_device* mc68kcpu)
8484 {
8485 (mc68kcpu)->not_z_flag = DY(mc68kcpu) & (1 << (DX(mc68kcpu) & 0x1f));
8486 }
8487
8488
8489 static void m68k_op_btst_8_r_ai(m68000_base_device* mc68kcpu)
8490 {
8491 (mc68kcpu)->not_z_flag = OPER_AY_AI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8492 }
8493
8494
8495 static void m68k_op_btst_8_r_pi(m68000_base_device* mc68kcpu)
8496 {
8497 (mc68kcpu)->not_z_flag = OPER_AY_PI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8498 }
8499
8500
8501 static void m68k_op_btst_8_r_pi7(m68000_base_device* mc68kcpu)
8502 {
8503 (mc68kcpu)->not_z_flag = OPER_A7_PI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8504 }
8505
8506
8507 static void m68k_op_btst_8_r_pd(m68000_base_device* mc68kcpu)
8508 {
8509 (mc68kcpu)->not_z_flag = OPER_AY_PD_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8510 }
8511
8512
8513 static void m68k_op_btst_8_r_pd7(m68000_base_device* mc68kcpu)
8514 {
8515 (mc68kcpu)->not_z_flag = OPER_A7_PD_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8516 }
8517
8518
8519 static void m68k_op_btst_8_r_di(m68000_base_device* mc68kcpu)
8520 {
8521 (mc68kcpu)->not_z_flag = OPER_AY_DI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8522 }
8523
8524
8525 static void m68k_op_btst_8_r_ix(m68000_base_device* mc68kcpu)
8526 {
8527 (mc68kcpu)->not_z_flag = OPER_AY_IX_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8528 }
8529
8530
8531 static void m68k_op_btst_8_r_aw(m68000_base_device* mc68kcpu)
8532 {
8533 (mc68kcpu)->not_z_flag = OPER_AW_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8534 }
8535
8536
8537 static void m68k_op_btst_8_r_al(m68000_base_device* mc68kcpu)
8538 {
8539 (mc68kcpu)->not_z_flag = OPER_AL_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8540 }
8541
8542
8543 static void m68k_op_btst_8_r_pcdi(m68000_base_device* mc68kcpu)
8544 {
8545 (mc68kcpu)->not_z_flag = OPER_PCDI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8546 }
8547
8548
8549 static void m68k_op_btst_8_r_pcix(m68000_base_device* mc68kcpu)
8550 {
8551 (mc68kcpu)->not_z_flag = OPER_PCIX_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8552 }
8553
8554
8555 static void m68k_op_btst_8_r_i(m68000_base_device* mc68kcpu)
8556 {
8557 (mc68kcpu)->not_z_flag = OPER_I_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7));
8558 }
8559
8560
8561 static void m68k_op_btst_32_s_d(m68000_base_device* mc68kcpu)
8562 {
8563 (mc68kcpu)->not_z_flag = DY(mc68kcpu) & (1 << (OPER_I_8(mc68kcpu) & 0x1f));
8564 }
8565
8566
8567 static void m68k_op_btst_8_s_ai(m68000_base_device* mc68kcpu)
8568 {
8569 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8570
8571 (mc68kcpu)->not_z_flag = OPER_AY_AI_8(mc68kcpu) & (1 << bit);
8572 }
8573
8574
8575 static void m68k_op_btst_8_s_pi(m68000_base_device* mc68kcpu)
8576 {
8577 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8578
8579 (mc68kcpu)->not_z_flag = OPER_AY_PI_8(mc68kcpu) & (1 << bit);
8580 }
8581
8582
8583 static void m68k_op_btst_8_s_pi7(m68000_base_device* mc68kcpu)
8584 {
8585 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8586
8587 (mc68kcpu)->not_z_flag = OPER_A7_PI_8(mc68kcpu) & (1 << bit);
8588 }
8589
8590
8591 static void m68k_op_btst_8_s_pd(m68000_base_device* mc68kcpu)
8592 {
8593 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8594
8595 (mc68kcpu)->not_z_flag = OPER_AY_PD_8(mc68kcpu) & (1 << bit);
8596 }
8597
8598
8599 static void m68k_op_btst_8_s_pd7(m68000_base_device* mc68kcpu)
8600 {
8601 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8602
8603 (mc68kcpu)->not_z_flag = OPER_A7_PD_8(mc68kcpu) & (1 << bit);
8604 }
8605
8606
8607 static void m68k_op_btst_8_s_di(m68000_base_device* mc68kcpu)
8608 {
8609 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8610
8611 (mc68kcpu)->not_z_flag = OPER_AY_DI_8(mc68kcpu) & (1 << bit);
8612 }
8613
8614
8615 static void m68k_op_btst_8_s_ix(m68000_base_device* mc68kcpu)
8616 {
8617 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8618
8619 (mc68kcpu)->not_z_flag = OPER_AY_IX_8(mc68kcpu) & (1 << bit);
8620 }
8621
8622
8623 static void m68k_op_btst_8_s_aw(m68000_base_device* mc68kcpu)
8624 {
8625 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8626
8627 (mc68kcpu)->not_z_flag = OPER_AW_8(mc68kcpu) & (1 << bit);
8628 }
8629
8630
8631 static void m68k_op_btst_8_s_al(m68000_base_device* mc68kcpu)
8632 {
8633 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8634
8635 (mc68kcpu)->not_z_flag = OPER_AL_8(mc68kcpu) & (1 << bit);
8636 }
8637
8638
8639 static void m68k_op_btst_8_s_pcdi(m68000_base_device* mc68kcpu)
8640 {
8641 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8642
8643 (mc68kcpu)->not_z_flag = OPER_PCDI_8(mc68kcpu) & (1 << bit);
8644 }
8645
8646
8647 static void m68k_op_btst_8_s_pcix(m68000_base_device* mc68kcpu)
8648 {
8649 uint32_t bit = OPER_I_8(mc68kcpu) & 7;
8650
8651 (mc68kcpu)->not_z_flag = OPER_PCIX_8(mc68kcpu) & (1 << bit);
8652 }
8653
8654
8655 static void m68k_op_callm_32_ai(m68000_base_device* mc68kcpu)
8656 {
8657 /* note: watch out for pcrelative modes */
8658 /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type))
8659 {
8660 uint32_t ea = EA_AY_AI_32(mc68kcpu);
8661
8662 m68ki_trace_t0(mc68kcpu);
8663 REG_PC(mc68kcpu) += 2;
8664 (void)ea;
8665 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n",
8666 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
8667 return;
8668 }*/
8669 m68ki_exception_illegal(mc68kcpu);
8670 }
8671
8672
8673 static void m68k_op_callm_32_di(m68000_base_device* mc68kcpu)
8674 {
8675 /* note: watch out for pcrelative modes */
8676 /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type))
8677 {
8678 uint32_t ea = EA_AY_DI_32(mc68kcpu);
8679
8680 m68ki_trace_t0(mc68kcpu);
8681 REG_PC(mc68kcpu) += 2;
8682 (void)ea;
8683 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n",
8684 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
8685 return;
8686 }*/
8687 m68ki_exception_illegal(mc68kcpu);
8688 }
8689
8690
8691 static void m68k_op_callm_32_ix(m68000_base_device* mc68kcpu)
8692 {
8693 /* note: watch out for pcrelative modes */
8694 /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type))
8695 {
8696 uint32_t ea = EA_AY_IX_32(mc68kcpu);
8697
8698 m68ki_trace_t0(mc68kcpu);
8699 REG_PC(mc68kcpu) += 2;
8700 (void)ea;
8701 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n",
8702 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
8703 return;
8704 }*/
8705 m68ki_exception_illegal(mc68kcpu);
8706 }
8707
8708
8709 static void m68k_op_callm_32_aw(m68000_base_device* mc68kcpu)
8710 {
8711 /* note: watch out for pcrelative modes */
8712 /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type))
8713 {
8714 uint32_t ea = EA_AW_32(mc68kcpu);
8715
8716 m68ki_trace_t0(mc68kcpu);
8717 REG_PC(mc68kcpu) += 2;
8718 (void)ea;
8719 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n",
8720 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
8721 return;
8722 }*/
8723 m68ki_exception_illegal(mc68kcpu);
8724 }
8725
8726
8727 static void m68k_op_callm_32_al(m68000_base_device* mc68kcpu)
8728 {
8729 /* note: watch out for pcrelative modes */
8730 /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type))
8731 {
8732 uint32_t ea = EA_AL_32(mc68kcpu);
8733
8734 m68ki_trace_t0(mc68kcpu);
8735 REG_PC(mc68kcpu) += 2;
8736 (void)ea;
8737 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n",
8738 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
8739 return;
8740 }*/
8741 m68ki_exception_illegal(mc68kcpu);
8742 }
8743
8744
8745 static void m68k_op_callm_32_pcdi(m68000_base_device* mc68kcpu)
8746 {
8747 /* note: watch out for pcrelative modes */
8748 /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type))
8749 {
8750 uint32_t ea = EA_PCDI_32(mc68kcpu);
8751
8752 m68ki_trace_t0(mc68kcpu);
8753 REG_PC(mc68kcpu) += 2;
8754 (void)ea;
8755 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n",
8756 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
8757 return;
8758 }*/
8759 m68ki_exception_illegal(mc68kcpu);
8760 }
8761
8762
8763 static void m68k_op_callm_32_pcix(m68000_base_device* mc68kcpu)
8764 {
8765 /* note: watch out for pcrelative modes */
8766 /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type))
8767 {
8768 uint32_t ea = EA_PCIX_32(mc68kcpu);
8769
8770 m68ki_trace_t0(mc68kcpu);
8771 REG_PC(mc68kcpu) += 2;
8772 (void)ea;
8773 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n",
8774 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
8775 return;
8776 }*/
8777 m68ki_exception_illegal(mc68kcpu);
8778 }
8779
8780
8781 static void m68k_op_cas_8_ai(m68000_base_device* mc68kcpu)
8782 {
8783 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8784 {
8785 uint32_t word2 = OPER_I_16(mc68kcpu);
8786 uint32_t ea = EA_AY_AI_8(mc68kcpu);
8787 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
8788 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
8789 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
8790
8791 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8792 (mc68kcpu)->n_flag = NFLAG_8(res);
8793 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
8794 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
8795 (mc68kcpu)->c_flag = CFLAG_8(res);
8796
8797 if(COND_NE(mc68kcpu))
8798 *compare = MASK_OUT_BELOW_8(*compare) | dest;
8799 else
8800 {
8801 (mc68kcpu)->c.current_cycle += 3;
8802 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
8803 }
8804 return;
8805 }
8806 m68ki_exception_illegal(mc68kcpu);
8807 }
8808
8809
8810 static void m68k_op_cas_8_pi(m68000_base_device* mc68kcpu)
8811 {
8812 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8813 {
8814 uint32_t word2 = OPER_I_16(mc68kcpu);
8815 uint32_t ea = EA_AY_PI_8(mc68kcpu);
8816 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
8817 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
8818 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
8819
8820 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8821 (mc68kcpu)->n_flag = NFLAG_8(res);
8822 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
8823 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
8824 (mc68kcpu)->c_flag = CFLAG_8(res);
8825
8826 if(COND_NE(mc68kcpu))
8827 *compare = MASK_OUT_BELOW_8(*compare) | dest;
8828 else
8829 {
8830 (mc68kcpu)->c.current_cycle += 3;
8831 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
8832 }
8833 return;
8834 }
8835 m68ki_exception_illegal(mc68kcpu);
8836 }
8837
8838
8839 static void m68k_op_cas_8_pi7(m68000_base_device* mc68kcpu)
8840 {
8841 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8842 {
8843 uint32_t word2 = OPER_I_16(mc68kcpu);
8844 uint32_t ea = EA_A7_PI_8(mc68kcpu);
8845 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
8846 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
8847 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
8848
8849 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8850 (mc68kcpu)->n_flag = NFLAG_8(res);
8851 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
8852 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
8853 (mc68kcpu)->c_flag = CFLAG_8(res);
8854
8855 if(COND_NE(mc68kcpu))
8856 *compare = MASK_OUT_BELOW_8(*compare) | dest;
8857 else
8858 {
8859 (mc68kcpu)->c.current_cycle += 3;
8860 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
8861 }
8862 return;
8863 }
8864 m68ki_exception_illegal(mc68kcpu);
8865 }
8866
8867
8868 static void m68k_op_cas_8_pd(m68000_base_device* mc68kcpu)
8869 {
8870 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8871 {
8872 uint32_t word2 = OPER_I_16(mc68kcpu);
8873 uint32_t ea = EA_AY_PD_8(mc68kcpu);
8874 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
8875 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
8876 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
8877
8878 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8879 (mc68kcpu)->n_flag = NFLAG_8(res);
8880 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
8881 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
8882 (mc68kcpu)->c_flag = CFLAG_8(res);
8883
8884 if(COND_NE(mc68kcpu))
8885 *compare = MASK_OUT_BELOW_8(*compare) | dest;
8886 else
8887 {
8888 (mc68kcpu)->c.current_cycle += 3;
8889 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
8890 }
8891 return;
8892 }
8893 m68ki_exception_illegal(mc68kcpu);
8894 }
8895
8896
8897 static void m68k_op_cas_8_pd7(m68000_base_device* mc68kcpu)
8898 {
8899 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8900 {
8901 uint32_t word2 = OPER_I_16(mc68kcpu);
8902 uint32_t ea = EA_A7_PD_8(mc68kcpu);
8903 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
8904 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
8905 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
8906
8907 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8908 (mc68kcpu)->n_flag = NFLAG_8(res);
8909 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
8910 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
8911 (mc68kcpu)->c_flag = CFLAG_8(res);
8912
8913 if(COND_NE(mc68kcpu))
8914 *compare = MASK_OUT_BELOW_8(*compare) | dest;
8915 else
8916 {
8917 (mc68kcpu)->c.current_cycle += 3;
8918 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
8919 }
8920 return;
8921 }
8922 m68ki_exception_illegal(mc68kcpu);
8923 }
8924
8925
8926 static void m68k_op_cas_8_di(m68000_base_device* mc68kcpu)
8927 {
8928 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8929 {
8930 uint32_t word2 = OPER_I_16(mc68kcpu);
8931 uint32_t ea = EA_AY_DI_8(mc68kcpu);
8932 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
8933 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
8934 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
8935
8936 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8937 (mc68kcpu)->n_flag = NFLAG_8(res);
8938 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
8939 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
8940 (mc68kcpu)->c_flag = CFLAG_8(res);
8941
8942 if(COND_NE(mc68kcpu))
8943 *compare = MASK_OUT_BELOW_8(*compare) | dest;
8944 else
8945 {
8946 (mc68kcpu)->c.current_cycle += 3;
8947 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
8948 }
8949 return;
8950 }
8951 m68ki_exception_illegal(mc68kcpu);
8952 }
8953
8954
8955 static void m68k_op_cas_8_ix(m68000_base_device* mc68kcpu)
8956 {
8957 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8958 {
8959 uint32_t word2 = OPER_I_16(mc68kcpu);
8960 uint32_t ea = EA_AY_IX_8(mc68kcpu);
8961 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
8962 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
8963 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
8964
8965 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8966 (mc68kcpu)->n_flag = NFLAG_8(res);
8967 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
8968 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
8969 (mc68kcpu)->c_flag = CFLAG_8(res);
8970
8971 if(COND_NE(mc68kcpu))
8972 *compare = MASK_OUT_BELOW_8(*compare) | dest;
8973 else
8974 {
8975 (mc68kcpu)->c.current_cycle += 3;
8976 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
8977 }
8978 return;
8979 }
8980 m68ki_exception_illegal(mc68kcpu);
8981 }
8982
8983
8984 static void m68k_op_cas_8_aw(m68000_base_device* mc68kcpu)
8985 {
8986 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
8987 {
8988 uint32_t word2 = OPER_I_16(mc68kcpu);
8989 uint32_t ea = EA_AW_8(mc68kcpu);
8990 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
8991 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
8992 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
8993
8994 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
8995 (mc68kcpu)->n_flag = NFLAG_8(res);
8996 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
8997 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
8998 (mc68kcpu)->c_flag = CFLAG_8(res);
8999
9000 if(COND_NE(mc68kcpu))
9001 *compare = MASK_OUT_BELOW_8(*compare) | dest;
9002 else
9003 {
9004 (mc68kcpu)->c.current_cycle += 3;
9005 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9006 }
9007 return;
9008 }
9009 m68ki_exception_illegal(mc68kcpu);
9010 }
9011
9012
9013 static void m68k_op_cas_8_al(m68000_base_device* mc68kcpu)
9014 {
9015 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9016 {
9017 uint32_t word2 = OPER_I_16(mc68kcpu);
9018 uint32_t ea = EA_AL_8(mc68kcpu);
9019 uint32_t dest = m68ki_read_8((mc68kcpu), ea);
9020 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9021 uint32_t res = dest - MASK_OUT_ABOVE_8(*compare);
9022
9023 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9024 (mc68kcpu)->n_flag = NFLAG_8(res);
9025 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
9026 (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res);
9027 (mc68kcpu)->c_flag = CFLAG_8(res);
9028
9029 if(COND_NE(mc68kcpu))
9030 *compare = MASK_OUT_BELOW_8(*compare) | dest;
9031 else
9032 {
9033 (mc68kcpu)->c.current_cycle += 3;
9034 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9035 }
9036 return;
9037 }
9038 m68ki_exception_illegal(mc68kcpu);
9039 }
9040
9041
9042 static void m68k_op_cas_16_ai(m68000_base_device* mc68kcpu)
9043 {
9044 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9045 {
9046 uint32_t word2 = OPER_I_16(mc68kcpu);
9047 uint32_t ea = EA_AY_AI_16(mc68kcpu);
9048 uint32_t dest = m68ki_read_16((mc68kcpu), ea);
9049 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9050 uint32_t res = dest - MASK_OUT_ABOVE_16(*compare);
9051
9052 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9053 (mc68kcpu)->n_flag = NFLAG_16(res);
9054 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
9055 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res);
9056 (mc68kcpu)->c_flag = CFLAG_16(res);
9057
9058 if(COND_NE(mc68kcpu))
9059 *compare = MASK_OUT_BELOW_16(*compare) | dest;
9060 else
9061 {
9062 (mc68kcpu)->c.current_cycle += 3;
9063 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9064 }
9065 return;
9066 }
9067 m68ki_exception_illegal(mc68kcpu);
9068 }
9069
9070
9071 static void m68k_op_cas_16_pi(m68000_base_device* mc68kcpu)
9072 {
9073 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9074 {
9075 uint32_t word2 = OPER_I_16(mc68kcpu);
9076 uint32_t ea = EA_AY_PI_16(mc68kcpu);
9077 uint32_t dest = m68ki_read_16((mc68kcpu), ea);
9078 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9079 uint32_t res = dest - MASK_OUT_ABOVE_16(*compare);
9080
9081 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9082 (mc68kcpu)->n_flag = NFLAG_16(res);
9083 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
9084 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res);
9085 (mc68kcpu)->c_flag = CFLAG_16(res);
9086
9087 if(COND_NE(mc68kcpu))
9088 *compare = MASK_OUT_BELOW_16(*compare) | dest;
9089 else
9090 {
9091 (mc68kcpu)->c.current_cycle += 3;
9092 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9093 }
9094 return;
9095 }
9096 m68ki_exception_illegal(mc68kcpu);
9097 }
9098
9099
9100 static void m68k_op_cas_16_pd(m68000_base_device* mc68kcpu)
9101 {
9102 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9103 {
9104 uint32_t word2 = OPER_I_16(mc68kcpu);
9105 uint32_t ea = EA_AY_PD_16(mc68kcpu);
9106 uint32_t dest = m68ki_read_16((mc68kcpu), ea);
9107 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9108 uint32_t res = dest - MASK_OUT_ABOVE_16(*compare);
9109
9110 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9111 (mc68kcpu)->n_flag = NFLAG_16(res);
9112 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
9113 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res);
9114 (mc68kcpu)->c_flag = CFLAG_16(res);
9115
9116 if(COND_NE(mc68kcpu))
9117 *compare = MASK_OUT_BELOW_16(*compare) | dest;
9118 else
9119 {
9120 (mc68kcpu)->c.current_cycle += 3;
9121 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9122 }
9123 return;
9124 }
9125 m68ki_exception_illegal(mc68kcpu);
9126 }
9127
9128
9129 static void m68k_op_cas_16_di(m68000_base_device* mc68kcpu)
9130 {
9131 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9132 {
9133 uint32_t word2 = OPER_I_16(mc68kcpu);
9134 uint32_t ea = EA_AY_DI_16(mc68kcpu);
9135 uint32_t dest = m68ki_read_16((mc68kcpu), ea);
9136 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9137 uint32_t res = dest - MASK_OUT_ABOVE_16(*compare);
9138
9139 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9140 (mc68kcpu)->n_flag = NFLAG_16(res);
9141 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
9142 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res);
9143 (mc68kcpu)->c_flag = CFLAG_16(res);
9144
9145 if(COND_NE(mc68kcpu))
9146 *compare = MASK_OUT_BELOW_16(*compare) | dest;
9147 else
9148 {
9149 (mc68kcpu)->c.current_cycle += 3;
9150 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9151 }
9152 return;
9153 }
9154 m68ki_exception_illegal(mc68kcpu);
9155 }
9156
9157
9158 static void m68k_op_cas_16_ix(m68000_base_device* mc68kcpu)
9159 {
9160 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9161 {
9162 uint32_t word2 = OPER_I_16(mc68kcpu);
9163 uint32_t ea = EA_AY_IX_16(mc68kcpu);
9164 uint32_t dest = m68ki_read_16((mc68kcpu), ea);
9165 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9166 uint32_t res = dest - MASK_OUT_ABOVE_16(*compare);
9167
9168 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9169 (mc68kcpu)->n_flag = NFLAG_16(res);
9170 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
9171 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res);
9172 (mc68kcpu)->c_flag = CFLAG_16(res);
9173
9174 if(COND_NE(mc68kcpu))
9175 *compare = MASK_OUT_BELOW_16(*compare) | dest;
9176 else
9177 {
9178 (mc68kcpu)->c.current_cycle += 3;
9179 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9180 }
9181 return;
9182 }
9183 m68ki_exception_illegal(mc68kcpu);
9184 }
9185
9186
9187 static void m68k_op_cas_16_aw(m68000_base_device* mc68kcpu)
9188 {
9189 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9190 {
9191 uint32_t word2 = OPER_I_16(mc68kcpu);
9192 uint32_t ea = EA_AW_16(mc68kcpu);
9193 uint32_t dest = m68ki_read_16((mc68kcpu), ea);
9194 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9195 uint32_t res = dest - MASK_OUT_ABOVE_16(*compare);
9196
9197 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9198 (mc68kcpu)->n_flag = NFLAG_16(res);
9199 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
9200 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res);
9201 (mc68kcpu)->c_flag = CFLAG_16(res);
9202
9203 if(COND_NE(mc68kcpu))
9204 *compare = MASK_OUT_BELOW_16(*compare) | dest;
9205 else
9206 {
9207 (mc68kcpu)->c.current_cycle += 3;
9208 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9209 }
9210 return;
9211 }
9212 m68ki_exception_illegal(mc68kcpu);
9213 }
9214
9215
9216 static void m68k_op_cas_16_al(m68000_base_device* mc68kcpu)
9217 {
9218 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9219 {
9220 uint32_t word2 = OPER_I_16(mc68kcpu);
9221 uint32_t ea = EA_AL_16(mc68kcpu);
9222 uint32_t dest = m68ki_read_16((mc68kcpu), ea);
9223 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9224 uint32_t res = dest - MASK_OUT_ABOVE_16(*compare);
9225
9226 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9227 (mc68kcpu)->n_flag = NFLAG_16(res);
9228 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
9229 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res);
9230 (mc68kcpu)->c_flag = CFLAG_16(res);
9231
9232 if(COND_NE(mc68kcpu))
9233 *compare = MASK_OUT_BELOW_16(*compare) | dest;
9234 else
9235 {
9236 (mc68kcpu)->c.current_cycle += 3;
9237 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7]));
9238 }
9239 return;
9240 }
9241 m68ki_exception_illegal(mc68kcpu);
9242 }
9243
9244
9245 static void m68k_op_cas_32_ai(m68000_base_device* mc68kcpu)
9246 {
9247 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9248 {
9249 uint32_t word2 = OPER_I_16(mc68kcpu);
9250 uint32_t ea = EA_AY_AI_32(mc68kcpu);
9251 uint32_t dest = m68ki_read_32((mc68kcpu), ea);
9252 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9253 uint32_t res = dest - *compare;
9254
9255 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9256 (mc68kcpu)->n_flag = NFLAG_32(res);
9257 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
9258 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res);
9259 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res);
9260
9261 if(COND_NE(mc68kcpu))
9262 *compare = dest;
9263 else
9264 {
9265 (mc68kcpu)->c.current_cycle += 3;
9266 m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9267 }
9268 return;
9269 }
9270 m68ki_exception_illegal(mc68kcpu);
9271 }
9272
9273
9274 static void m68k_op_cas_32_pi(m68000_base_device* mc68kcpu)
9275 {
9276 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9277 {
9278 uint32_t word2 = OPER_I_16(mc68kcpu);
9279 uint32_t ea = EA_AY_PI_32(mc68kcpu);
9280 uint32_t dest = m68ki_read_32((mc68kcpu), ea);
9281 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9282 uint32_t res = dest - *compare;
9283
9284 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9285 (mc68kcpu)->n_flag = NFLAG_32(res);
9286 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
9287 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res);
9288 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res);
9289
9290 if(COND_NE(mc68kcpu))
9291 *compare = dest;
9292 else
9293 {
9294 (mc68kcpu)->c.current_cycle += 3;
9295 m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9296 }
9297 return;
9298 }
9299 m68ki_exception_illegal(mc68kcpu);
9300 }
9301
9302
9303 static void m68k_op_cas_32_pd(m68000_base_device* mc68kcpu)
9304 {
9305 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9306 {
9307 uint32_t word2 = OPER_I_16(mc68kcpu);
9308 uint32_t ea = EA_AY_PD_32(mc68kcpu);
9309 uint32_t dest = m68ki_read_32((mc68kcpu), ea);
9310 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9311 uint32_t res = dest - *compare;
9312
9313 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9314 (mc68kcpu)->n_flag = NFLAG_32(res);
9315 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
9316 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res);
9317 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res);
9318
9319 if(COND_NE(mc68kcpu))
9320 *compare = dest;
9321 else
9322 {
9323 (mc68kcpu)->c.current_cycle += 3;
9324 m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9325 }
9326 return;
9327 }
9328 m68ki_exception_illegal(mc68kcpu);
9329 }
9330
9331
9332 static void m68k_op_cas_32_di(m68000_base_device* mc68kcpu)
9333 {
9334 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9335 {
9336 uint32_t word2 = OPER_I_16(mc68kcpu);
9337 uint32_t ea = EA_AY_DI_32(mc68kcpu);
9338 uint32_t dest = m68ki_read_32((mc68kcpu), ea);
9339 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9340 uint32_t res = dest - *compare;
9341
9342 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9343 (mc68kcpu)->n_flag = NFLAG_32(res);
9344 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
9345 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res);
9346 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res);
9347
9348 if(COND_NE(mc68kcpu))
9349 *compare = dest;
9350 else
9351 {
9352 (mc68kcpu)->c.current_cycle += 3;
9353 m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9354 }
9355 return;
9356 }
9357 m68ki_exception_illegal(mc68kcpu);
9358 }
9359
9360
9361 static void m68k_op_cas_32_ix(m68000_base_device* mc68kcpu)
9362 {
9363 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9364 {
9365 uint32_t word2 = OPER_I_16(mc68kcpu);
9366 uint32_t ea = EA_AY_IX_32(mc68kcpu);
9367 uint32_t dest = m68ki_read_32((mc68kcpu), ea);
9368 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9369 uint32_t res = dest - *compare;
9370
9371 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9372 (mc68kcpu)->n_flag = NFLAG_32(res);
9373 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
9374 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res);
9375 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res);
9376
9377 if(COND_NE(mc68kcpu))
9378 *compare = dest;
9379 else
9380 {
9381 (mc68kcpu)->c.current_cycle += 3;
9382 m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9383 }
9384 return;
9385 }
9386 m68ki_exception_illegal(mc68kcpu);
9387 }
9388
9389
9390 static void m68k_op_cas_32_aw(m68000_base_device* mc68kcpu)
9391 {
9392 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9393 {
9394 uint32_t word2 = OPER_I_16(mc68kcpu);
9395 uint32_t ea = EA_AW_32(mc68kcpu);
9396 uint32_t dest = m68ki_read_32((mc68kcpu), ea);
9397 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9398 uint32_t res = dest - *compare;
9399
9400 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9401 (mc68kcpu)->n_flag = NFLAG_32(res);
9402 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
9403 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res);
9404 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res);
9405
9406 if(COND_NE(mc68kcpu))
9407 *compare = dest;
9408 else
9409 {
9410 (mc68kcpu)->c.current_cycle += 3;
9411 m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9412 }
9413 return;
9414 }
9415 m68ki_exception_illegal(mc68kcpu);
9416 }
9417
9418
9419 static void m68k_op_cas_32_al(m68000_base_device* mc68kcpu)
9420 {
9421 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9422 {
9423 uint32_t word2 = OPER_I_16(mc68kcpu);
9424 uint32_t ea = EA_AL_32(mc68kcpu);
9425 uint32_t dest = m68ki_read_32((mc68kcpu), ea);
9426 uint32_t* compare = &REG_D(mc68kcpu)[word2 & 7];
9427 uint32_t res = dest - *compare;
9428
9429 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9430 (mc68kcpu)->n_flag = NFLAG_32(res);
9431 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
9432 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res);
9433 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res);
9434
9435 if(COND_NE(mc68kcpu))
9436 *compare = dest;
9437 else
9438 {
9439 (mc68kcpu)->c.current_cycle += 3;
9440 m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9441 }
9442 return;
9443 }
9444 m68ki_exception_illegal(mc68kcpu);
9445 }
9446
9447
9448 static void m68k_op_cas2_16(m68000_base_device* mc68kcpu)
9449 {
9450 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9451 {
9452 uint32_t word2 = OPER_I_32(mc68kcpu);
9453 uint32_t* compare1 = &REG_D(mc68kcpu)[(word2 >> 16) & 7];
9454 uint32_t ea1 = REG_DA(mc68kcpu)[(word2 >> 28) & 15];
9455 uint32_t dest1 = m68ki_read_16((mc68kcpu), ea1);
9456 uint32_t res1 = dest1 - MASK_OUT_ABOVE_16(*compare1);
9457 uint32_t* compare2 = &REG_D(mc68kcpu)[word2 & 7];
9458 uint32_t ea2 = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
9459 uint32_t dest2 = m68ki_read_16((mc68kcpu), ea2);
9460 uint32_t res2;
9461
9462 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9463 (mc68kcpu)->n_flag = NFLAG_16(res1);
9464 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res1);
9465 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare1, dest1, res1);
9466 (mc68kcpu)->c_flag = CFLAG_16(res1);
9467
9468 if(COND_EQ(mc68kcpu))
9469 {
9470 res2 = dest2 - MASK_OUT_ABOVE_16(*compare2);
9471
9472 (mc68kcpu)->n_flag = NFLAG_16(res2);
9473 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res2);
9474 (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare2, dest2, res2);
9475 (mc68kcpu)->c_flag = CFLAG_16(res2);
9476
9477 if(COND_EQ(mc68kcpu))
9478 {
9479 (mc68kcpu)->c.current_cycle += 3;
9480 m68ki_write_16((mc68kcpu), ea1, REG_D(mc68kcpu)[(word2 >> 22) & 7]);
9481 m68ki_write_16((mc68kcpu), ea2, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9482 return;
9483 }
9484 }
9485 *compare1 = BIT_1F(word2) ? MAKE_INT_16(dest1) : MASK_OUT_BELOW_16(*compare1) | dest1;
9486 *compare2 = BIT_F(word2) ? MAKE_INT_16(dest2) : MASK_OUT_BELOW_16(*compare2) | dest2;
9487 return;
9488 }
9489 m68ki_exception_illegal(mc68kcpu);
9490 }
9491
9492
9493 static void m68k_op_cas2_32(m68000_base_device* mc68kcpu)
9494 {
9495 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9496 {
9497 uint32_t word2 = OPER_I_32(mc68kcpu);
9498 uint32_t* compare1 = &REG_D(mc68kcpu)[(word2 >> 16) & 7];
9499 uint32_t ea1 = REG_DA(mc68kcpu)[(word2 >> 28) & 15];
9500 uint32_t dest1 = m68ki_read_32((mc68kcpu), ea1);
9501 uint32_t res1 = dest1 - *compare1;
9502 uint32_t* compare2 = &REG_D(mc68kcpu)[word2 & 7];
9503 uint32_t ea2 = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
9504 uint32_t dest2 = m68ki_read_32((mc68kcpu), ea2);
9505 uint32_t res2;
9506
9507 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
9508 (mc68kcpu)->n_flag = NFLAG_32(res1);
9509 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res1);
9510 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare1, dest1, res1);
9511 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare1, dest1, res1);
9512
9513 if(COND_EQ(mc68kcpu))
9514 {
9515 res2 = dest2 - *compare2;
9516
9517 (mc68kcpu)->n_flag = NFLAG_32(res2);
9518 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res2);
9519 (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare2, dest2, res2);
9520 (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare2, dest2, res2);
9521
9522 if(COND_EQ(mc68kcpu))
9523 {
9524 (mc68kcpu)->c.current_cycle += 3;
9525 m68ki_write_32((mc68kcpu), ea1, REG_D(mc68kcpu)[(word2 >> 22) & 7]);
9526 m68ki_write_32((mc68kcpu), ea2, REG_D(mc68kcpu)[(word2 >> 6) & 7]);
9527 return;
9528 }
9529 }
9530 *compare1 = dest1;
9531 *compare2 = dest2;
9532 return;
9533 }
9534 m68ki_exception_illegal(mc68kcpu);
9535 }
9536
9537
9538 static void m68k_op_chk_16_d(m68000_base_device* mc68kcpu)
9539 {
9540 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9541 int32_t bound = MAKE_INT_16(DY(mc68kcpu));
9542
9543 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9544 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9545 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9546
9547 if(src >= 0 && src <= bound)
9548 {
9549 return;
9550 }
9551 (mc68kcpu)->n_flag = (src < 0)<<7;
9552 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9553 }
9554
9555
9556 static void m68k_op_chk_16_ai(m68000_base_device* mc68kcpu)
9557 {
9558 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9559 int32_t bound = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu));
9560
9561 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9562 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9563 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9564
9565 if(src >= 0 && src <= bound)
9566 {
9567 return;
9568 }
9569 (mc68kcpu)->n_flag = (src < 0)<<7;
9570 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9571 }
9572
9573
9574 static void m68k_op_chk_16_pi(m68000_base_device* mc68kcpu)
9575 {
9576 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9577 int32_t bound = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu));
9578
9579 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9580 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9581 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9582
9583 if(src >= 0 && src <= bound)
9584 {
9585 return;
9586 }
9587 (mc68kcpu)->n_flag = (src < 0)<<7;
9588 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9589 }
9590
9591
9592 static void m68k_op_chk_16_pd(m68000_base_device* mc68kcpu)
9593 {
9594 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9595 int32_t bound = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu));
9596
9597 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9598 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9599 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9600
9601 if(src >= 0 && src <= bound)
9602 {
9603 return;
9604 }
9605 (mc68kcpu)->n_flag = (src < 0)<<7;
9606 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9607 }
9608
9609
9610 static void m68k_op_chk_16_di(m68000_base_device* mc68kcpu)
9611 {
9612 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9613 int32_t bound = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu));
9614
9615 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9616 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9617 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9618
9619 if(src >= 0 && src <= bound)
9620 {
9621 return;
9622 }
9623 (mc68kcpu)->n_flag = (src < 0)<<7;
9624 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9625 }
9626
9627
9628 static void m68k_op_chk_16_ix(m68000_base_device* mc68kcpu)
9629 {
9630 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9631 int32_t bound = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu));
9632
9633 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9634 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9635 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9636
9637 if(src >= 0 && src <= bound)
9638 {
9639 return;
9640 }
9641 (mc68kcpu)->n_flag = (src < 0)<<7;
9642 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9643 }
9644
9645
9646 static void m68k_op_chk_16_aw(m68000_base_device* mc68kcpu)
9647 {
9648 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9649 int32_t bound = MAKE_INT_16(OPER_AW_16(mc68kcpu));
9650
9651 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9652 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9653 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9654
9655 if(src >= 0 && src <= bound)
9656 {
9657 return;
9658 }
9659 (mc68kcpu)->n_flag = (src < 0)<<7;
9660 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9661 }
9662
9663
9664 static void m68k_op_chk_16_al(m68000_base_device* mc68kcpu)
9665 {
9666 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9667 int32_t bound = MAKE_INT_16(OPER_AL_16(mc68kcpu));
9668
9669 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9670 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9671 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9672
9673 if(src >= 0 && src <= bound)
9674 {
9675 return;
9676 }
9677 (mc68kcpu)->n_flag = (src < 0)<<7;
9678 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9679 }
9680
9681
9682 static void m68k_op_chk_16_pcdi(m68000_base_device* mc68kcpu)
9683 {
9684 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9685 int32_t bound = MAKE_INT_16(OPER_PCDI_16(mc68kcpu));
9686
9687 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9688 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9689 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9690
9691 if(src >= 0 && src <= bound)
9692 {
9693 return;
9694 }
9695 (mc68kcpu)->n_flag = (src < 0)<<7;
9696 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9697 }
9698
9699
9700 static void m68k_op_chk_16_pcix(m68000_base_device* mc68kcpu)
9701 {
9702 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9703 int32_t bound = MAKE_INT_16(OPER_PCIX_16(mc68kcpu));
9704
9705 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9706 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9707 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9708
9709 if(src >= 0 && src <= bound)
9710 {
9711 return;
9712 }
9713 (mc68kcpu)->n_flag = (src < 0)<<7;
9714 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9715 }
9716
9717
9718 static void m68k_op_chk_16_i(m68000_base_device* mc68kcpu)
9719 {
9720 int32_t src = MAKE_INT_16(DX(mc68kcpu));
9721 int32_t bound = MAKE_INT_16(OPER_I_16(mc68kcpu));
9722
9723 (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */
9724 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9725 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9726
9727 if(src >= 0 && src <= bound)
9728 {
9729 return;
9730 }
9731 (mc68kcpu)->n_flag = (src < 0)<<7;
9732 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9733 }
9734
9735
9736 static void m68k_op_chk_32_d(m68000_base_device* mc68kcpu)
9737 {
9738 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9739 {
9740 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9741 int32_t bound = MAKE_INT_32(DY(mc68kcpu));
9742
9743 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9744 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9745 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9746
9747 if(src >= 0 && src <= bound)
9748 {
9749 return;
9750 }
9751 (mc68kcpu)->n_flag = (src < 0)<<7;
9752 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9753 return;
9754 }
9755 m68ki_exception_illegal(mc68kcpu);
9756 }
9757
9758
9759 static void m68k_op_chk_32_ai(m68000_base_device* mc68kcpu)
9760 {
9761 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9762 {
9763 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9764 int32_t bound = MAKE_INT_32(OPER_AY_AI_32(mc68kcpu));
9765
9766 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9767 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9768 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9769
9770 if(src >= 0 && src <= bound)
9771 {
9772 return;
9773 }
9774 (mc68kcpu)->n_flag = (src < 0)<<7;
9775 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9776 return;
9777 }
9778 m68ki_exception_illegal(mc68kcpu);
9779 }
9780
9781
9782 static void m68k_op_chk_32_pi(m68000_base_device* mc68kcpu)
9783 {
9784 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9785 {
9786 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9787 int32_t bound = MAKE_INT_32(OPER_AY_PI_32(mc68kcpu));
9788
9789 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9790 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9791 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9792
9793 if(src >= 0 && src <= bound)
9794 {
9795 return;
9796 }
9797 (mc68kcpu)->n_flag = (src < 0)<<7;
9798 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9799 return;
9800 }
9801 m68ki_exception_illegal(mc68kcpu);
9802 }
9803
9804
9805 static void m68k_op_chk_32_pd(m68000_base_device* mc68kcpu)
9806 {
9807 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9808 {
9809 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9810 int32_t bound = MAKE_INT_32(OPER_AY_PD_32(mc68kcpu));
9811
9812 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9813 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9814 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9815
9816 if(src >= 0 && src <= bound)
9817 {
9818 return;
9819 }
9820 (mc68kcpu)->n_flag = (src < 0)<<7;
9821 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9822 return;
9823 }
9824 m68ki_exception_illegal(mc68kcpu);
9825 }
9826
9827
9828 static void m68k_op_chk_32_di(m68000_base_device* mc68kcpu)
9829 {
9830 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9831 {
9832 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9833 int32_t bound = MAKE_INT_32(OPER_AY_DI_32(mc68kcpu));
9834
9835 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9836 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9837 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9838
9839 if(src >= 0 && src <= bound)
9840 {
9841 return;
9842 }
9843 (mc68kcpu)->n_flag = (src < 0)<<7;
9844 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9845 return;
9846 }
9847 m68ki_exception_illegal(mc68kcpu);
9848 }
9849
9850
9851 static void m68k_op_chk_32_ix(m68000_base_device* mc68kcpu)
9852 {
9853 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9854 {
9855 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9856 int32_t bound = MAKE_INT_32(OPER_AY_IX_32(mc68kcpu));
9857
9858 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9859 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9860 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9861
9862 if(src >= 0 && src <= bound)
9863 {
9864 return;
9865 }
9866 (mc68kcpu)->n_flag = (src < 0)<<7;
9867 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9868 return;
9869 }
9870 m68ki_exception_illegal(mc68kcpu);
9871 }
9872
9873
9874 static void m68k_op_chk_32_aw(m68000_base_device* mc68kcpu)
9875 {
9876 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9877 {
9878 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9879 int32_t bound = MAKE_INT_32(OPER_AW_32(mc68kcpu));
9880
9881 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9882 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9883 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9884
9885 if(src >= 0 && src <= bound)
9886 {
9887 return;
9888 }
9889 (mc68kcpu)->n_flag = (src < 0)<<7;
9890 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9891 return;
9892 }
9893 m68ki_exception_illegal(mc68kcpu);
9894 }
9895
9896
9897 static void m68k_op_chk_32_al(m68000_base_device* mc68kcpu)
9898 {
9899 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9900 {
9901 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9902 int32_t bound = MAKE_INT_32(OPER_AL_32(mc68kcpu));
9903
9904 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9905 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9906 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9907
9908 if(src >= 0 && src <= bound)
9909 {
9910 return;
9911 }
9912 (mc68kcpu)->n_flag = (src < 0)<<7;
9913 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9914 return;
9915 }
9916 m68ki_exception_illegal(mc68kcpu);
9917 }
9918
9919
9920 static void m68k_op_chk_32_pcdi(m68000_base_device* mc68kcpu)
9921 {
9922 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9923 {
9924 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9925 int32_t bound = MAKE_INT_32(OPER_PCDI_32(mc68kcpu));
9926
9927 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9928 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9929 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9930
9931 if(src >= 0 && src <= bound)
9932 {
9933 return;
9934 }
9935 (mc68kcpu)->n_flag = (src < 0)<<7;
9936 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9937 return;
9938 }
9939 m68ki_exception_illegal(mc68kcpu);
9940 }
9941
9942
9943 static void m68k_op_chk_32_pcix(m68000_base_device* mc68kcpu)
9944 {
9945 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9946 {
9947 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9948 int32_t bound = MAKE_INT_32(OPER_PCIX_32(mc68kcpu));
9949
9950 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9951 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9952 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9953
9954 if(src >= 0 && src <= bound)
9955 {
9956 return;
9957 }
9958 (mc68kcpu)->n_flag = (src < 0)<<7;
9959 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9960 return;
9961 }
9962 m68ki_exception_illegal(mc68kcpu);
9963 }
9964
9965
9966 static void m68k_op_chk_32_i(m68000_base_device* mc68kcpu)
9967 {
9968 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9969 {
9970 int32_t src = MAKE_INT_32(DX(mc68kcpu));
9971 int32_t bound = MAKE_INT_32(OPER_I_32(mc68kcpu));
9972
9973 (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */
9974 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */
9975 (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */
9976
9977 if(src >= 0 && src <= bound)
9978 {
9979 return;
9980 }
9981 (mc68kcpu)->n_flag = (src < 0)<<7;
9982 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
9983 return;
9984 }
9985 m68ki_exception_illegal(mc68kcpu);
9986 }
9987
9988
9989 static void m68k_op_chk2cmp2_8_pcdi(m68000_base_device* mc68kcpu)
9990 {
9991 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
9992 {
9993 uint32_t word2 = OPER_I_16(mc68kcpu);
9994 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff;
9995 uint32_t ea = EA_PCDI_8(mc68kcpu);
9996 uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea);
9997 uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1);
9998
9999 if(!BIT_F(word2))
10000 (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10001 else
10002 (mc68kcpu)->c_flag = compare - lower_bound;
10003 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10004 if(COND_CS(mc68kcpu))
10005 {
10006 if(BIT_B(word2))
10007 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10008 return;
10009 }
10010
10011 (mc68kcpu)->c_flag = upper_bound - compare;
10012 if(COND_CS(mc68kcpu) && BIT_B(word2))
10013 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10014 return;
10015 }*/
10016 m68ki_exception_illegal(mc68kcpu);
10017 }
10018
10019
10020 static void m68k_op_chk2cmp2_8_pcix(m68000_base_device* mc68kcpu)
10021 {
10022 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10023 {
10024 uint32_t word2 = OPER_I_16(mc68kcpu);
10025 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff;
10026 uint32_t ea = EA_PCIX_8(mc68kcpu);
10027 uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea);
10028 uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1);
10029
10030 if(!BIT_F(word2))
10031 (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10032 else
10033 (mc68kcpu)->c_flag = compare - lower_bound;
10034 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10035 if(COND_CS(mc68kcpu))
10036 {
10037 if(BIT_B(word2))
10038 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10039 return;
10040 }
10041
10042 (mc68kcpu)->c_flag = upper_bound - compare;
10043 if(COND_CS(mc68kcpu) && BIT_B(word2))
10044 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10045 return;
10046 }*/
10047 m68ki_exception_illegal(mc68kcpu);
10048 }
10049
10050
10051 static void m68k_op_chk2cmp2_8_ai(m68000_base_device* mc68kcpu)
10052 {
10053 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10054 {
10055 uint32_t word2 = OPER_I_16(mc68kcpu);
10056 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff;
10057 uint32_t ea = EA_AY_AI_8(mc68kcpu);
10058 uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea);
10059 uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1);
10060
10061 if(!BIT_F(word2))
10062 (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10063 else
10064 (mc68kcpu)->c_flag = compare - lower_bound;
10065 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10066 if(COND_CS(mc68kcpu))
10067 {
10068 if(BIT_B(word2))
10069 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10070 return;
10071 }
10072
10073 (mc68kcpu)->c_flag = upper_bound - compare;
10074 if(COND_CS(mc68kcpu) && BIT_B(word2))
10075 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10076 return;
10077 }*/
10078 m68ki_exception_illegal(mc68kcpu);
10079 }
10080
10081
10082 static void m68k_op_chk2cmp2_8_di(m68000_base_device* mc68kcpu)
10083 {
10084 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10085 {
10086 uint32_t word2 = OPER_I_16(mc68kcpu);
10087 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff;
10088 uint32_t ea = EA_AY_DI_8(mc68kcpu);
10089 uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea);
10090 uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1);
10091
10092 if(!BIT_F(word2))
10093 (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10094 else
10095 (mc68kcpu)->c_flag = compare - lower_bound;
10096 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10097 if(COND_CS(mc68kcpu))
10098 {
10099 if(BIT_B(word2))
10100 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10101 return;
10102 }
10103
10104 (mc68kcpu)->c_flag = upper_bound - compare;
10105 if(COND_CS(mc68kcpu) && BIT_B(word2))
10106 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10107 return;
10108 }
10109 m68ki_exception_illegal(mc68kcpu);
10110 }
10111
10112
10113 static void m68k_op_chk2cmp2_8_ix(m68000_base_device* mc68kcpu)
10114 {
10115 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10116 {
10117 uint32_t word2 = OPER_I_16(mc68kcpu);
10118 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff;
10119 uint32_t ea = EA_AY_IX_8(mc68kcpu);
10120 uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea);
10121 uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1);
10122
10123 if(!BIT_F(word2))
10124 (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10125 else
10126 (mc68kcpu)->c_flag = compare - lower_bound;
10127 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10128 if(COND_CS(mc68kcpu))
10129 {
10130 if(BIT_B(word2))
10131 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10132 return;
10133 }
10134
10135 (mc68kcpu)->c_flag = upper_bound - compare;
10136 if(COND_CS(mc68kcpu) && BIT_B(word2))
10137 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10138 return;
10139 }
10140 m68ki_exception_illegal(mc68kcpu);
10141 }
10142
10143
10144 static void m68k_op_chk2cmp2_8_aw(m68000_base_device* mc68kcpu)
10145 {
10146 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10147 {
10148 uint32_t word2 = OPER_I_16(mc68kcpu);
10149 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff;
10150 uint32_t ea = EA_AW_8(mc68kcpu);
10151 uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea);
10152 uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1);
10153
10154 if(!BIT_F(word2))
10155 (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10156 else
10157 (mc68kcpu)->c_flag = compare - lower_bound;
10158 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10159 if(COND_CS(mc68kcpu))
10160 {
10161 if(BIT_B(word2))
10162 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10163 return;
10164 }
10165
10166 (mc68kcpu)->c_flag = upper_bound - compare;
10167 if(COND_CS(mc68kcpu) && BIT_B(word2))
10168 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10169 return;
10170 }
10171 m68ki_exception_illegal(mc68kcpu);
10172 }
10173
10174
10175 static void m68k_op_chk2cmp2_8_al(m68000_base_device* mc68kcpu)
10176 {
10177 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10178 {
10179 uint32_t word2 = OPER_I_16(mc68kcpu);
10180 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff;
10181 uint32_t ea = EA_AL_8(mc68kcpu);
10182 uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea);
10183 uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1);
10184
10185 if(!BIT_F(word2))
10186 (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
10187 else
10188 (mc68kcpu)->c_flag = compare - lower_bound;
10189 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10190 if(COND_CS(mc68kcpu))
10191 {
10192 if(BIT_B(word2))
10193 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10194 return;
10195 }
10196
10197 (mc68kcpu)->c_flag = upper_bound - compare;
10198 if(COND_CS(mc68kcpu) && BIT_B(word2))
10199 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10200 return;
10201 }
10202 m68ki_exception_illegal(mc68kcpu);
10203 }
10204
10205
10206 static void m68k_op_chk2cmp2_16_pcdi(m68000_base_device* mc68kcpu)
10207 {
10208 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10209 {
10210 uint32_t word2 = OPER_I_16(mc68kcpu);
10211 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff;
10212 uint32_t ea = EA_PCDI_16(mc68kcpu);
10213 uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea);
10214 uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2);
10215
10216 if(!BIT_F(word2))
10217 (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10218 else
10219 (mc68kcpu)->c_flag = compare - lower_bound;
10220 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10221 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10222 if(COND_CS(mc68kcpu))
10223 {
10224 if(BIT_B(word2))
10225 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10226 return;
10227 }
10228
10229 if(!BIT_F(word2))
10230 (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10231 else
10232 (mc68kcpu)->c_flag = upper_bound - compare;
10233 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10234 if(COND_CS(mc68kcpu) && BIT_B(word2))
10235 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10236 return;
10237 }*/
10238 m68ki_exception_illegal(mc68kcpu);
10239 }
10240
10241
10242 static void m68k_op_chk2cmp2_16_pcix(m68000_base_device* mc68kcpu)
10243 {
10244 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10245 {
10246 uint32_t word2 = OPER_I_16(mc68kcpu);
10247 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff;
10248 uint32_t ea = EA_PCIX_16(mc68kcpu);
10249 uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea);
10250 uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2);
10251
10252 if(!BIT_F(word2))
10253 (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10254 else
10255 (mc68kcpu)->c_flag = compare - lower_bound;
10256 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10257 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10258 if(COND_CS(mc68kcpu))
10259 {
10260 if(BIT_B(word2))
10261 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10262 return;
10263 }
10264
10265 if(!BIT_F(word2))
10266 (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10267 else
10268 (mc68kcpu)->c_flag = upper_bound - compare;
10269 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10270 if(COND_CS(mc68kcpu) && BIT_B(word2))
10271 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10272 return;
10273 }*/
10274 m68ki_exception_illegal(mc68kcpu);
10275 }
10276
10277
10278 static void m68k_op_chk2cmp2_16_ai(m68000_base_device* mc68kcpu)
10279 {
10280 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10281 {
10282 uint32_t word2 = OPER_I_16(mc68kcpu);
10283 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff;
10284 uint32_t ea = EA_AY_AI_16(mc68kcpu);
10285 uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea);
10286 uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2);
10287
10288 if(!BIT_F(word2))
10289 (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10290 else
10291 (mc68kcpu)->c_flag = compare - lower_bound;
10292
10293 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10294 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10295 if(COND_CS(mc68kcpu))
10296 {
10297 if(BIT_B(word2))
10298 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10299 return;
10300 }
10301 if(!BIT_F(word2))
10302 (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10303 else
10304 (mc68kcpu)->c_flag = upper_bound - compare;
10305
10306 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10307 if(COND_CS(mc68kcpu) && BIT_B(word2))
10308 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10309 return;
10310 }
10311 m68ki_exception_illegal(mc68kcpu);
10312 }
10313
10314
10315 static void m68k_op_chk2cmp2_16_di(m68000_base_device* mc68kcpu)
10316 {
10317 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10318 {
10319 uint32_t word2 = OPER_I_16(mc68kcpu);
10320 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff;
10321 uint32_t ea = EA_AY_DI_16(mc68kcpu);
10322 uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea);
10323 uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2);
10324
10325 if(!BIT_F(word2))
10326 (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10327 else
10328 (mc68kcpu)->c_flag = compare - lower_bound;
10329
10330 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10331 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10332 if(COND_CS(mc68kcpu))
10333 {
10334 if(BIT_B(word2))
10335 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10336 return;
10337 }
10338 if(!BIT_F(word2))
10339 (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10340 else
10341 (mc68kcpu)->c_flag = upper_bound - compare;
10342
10343 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10344 if(COND_CS(mc68kcpu) && BIT_B(word2))
10345 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10346 return;
10347 }
10348 m68ki_exception_illegal(mc68kcpu);
10349 }
10350
10351
10352 static void m68k_op_chk2cmp2_16_ix(m68000_base_device* mc68kcpu)
10353 {
10354 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10355 {
10356 uint32_t word2 = OPER_I_16(mc68kcpu);
10357 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff;
10358 uint32_t ea = EA_AY_IX_16(mc68kcpu);
10359 uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea);
10360 uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2);
10361
10362 if(!BIT_F(word2))
10363 (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10364 else
10365 (mc68kcpu)->c_flag = compare - lower_bound;
10366
10367 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10368 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10369 if(COND_CS(mc68kcpu))
10370 {
10371 if(BIT_B(word2))
10372 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10373 return;
10374 }
10375 if(!BIT_F(word2))
10376 (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10377 else
10378 (mc68kcpu)->c_flag = upper_bound - compare;
10379
10380 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10381 if(COND_CS(mc68kcpu) && BIT_B(word2))
10382 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10383 return;
10384 }
10385 m68ki_exception_illegal(mc68kcpu);
10386 }
10387
10388
10389 static void m68k_op_chk2cmp2_16_aw(m68000_base_device* mc68kcpu)
10390 {
10391 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10392 {
10393 uint32_t word2 = OPER_I_16(mc68kcpu);
10394 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff;
10395 uint32_t ea = EA_AW_16(mc68kcpu);
10396 uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea);
10397 uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2);
10398
10399 if(!BIT_F(word2))
10400 (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10401 else
10402 (mc68kcpu)->c_flag = compare - lower_bound;
10403
10404 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10405 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10406 if(COND_CS(mc68kcpu))
10407 {
10408 if(BIT_B(word2))
10409 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10410 return;
10411 }
10412 if(!BIT_F(word2))
10413 (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10414 else
10415 (mc68kcpu)->c_flag = upper_bound - compare;
10416
10417 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10418 if(COND_CS(mc68kcpu) && BIT_B(word2))
10419 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10420 return;
10421 }
10422 m68ki_exception_illegal(mc68kcpu);
10423 }
10424
10425
10426 static void m68k_op_chk2cmp2_16_al(m68000_base_device* mc68kcpu)
10427 {
10428 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10429 {
10430 uint32_t word2 = OPER_I_16(mc68kcpu);
10431 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff;
10432 uint32_t ea = EA_AL_16(mc68kcpu);
10433 uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea);
10434 uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2);
10435
10436 if(!BIT_F(word2))
10437 (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
10438 else
10439 (mc68kcpu)->c_flag = compare - lower_bound;
10440
10441 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10442 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10443 if(COND_CS(mc68kcpu))
10444 {
10445 if(BIT_B(word2))
10446 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10447 return;
10448 }
10449 if(!BIT_F(word2))
10450 (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
10451 else
10452 (mc68kcpu)->c_flag = upper_bound - compare;
10453
10454 (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag);
10455 if(COND_CS(mc68kcpu) && BIT_B(word2))
10456 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10457 return;
10458 }
10459 m68ki_exception_illegal(mc68kcpu);
10460 }
10461
10462
10463 static void m68k_op_chk2cmp2_32_pcdi(m68000_base_device* mc68kcpu)
10464 {
10465 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10466 {
10467 uint32_t word2 = OPER_I_16(mc68kcpu);
10468 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
10469 uint32_t ea = EA_PCDI_32(mc68kcpu);
10470 uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea);
10471 uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4);
10472
10473 (mc68kcpu)->c_flag = compare - lower_bound;
10474 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10475 (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag);
10476 if(COND_CS(mc68kcpu))
10477 {
10478 if(BIT_B(word2))
10479 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10480 return;
10481 }
10482
10483 (mc68kcpu)->c_flag = upper_bound - compare;
10484 (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag);
10485 if(COND_CS(mc68kcpu) && BIT_B(word2))
10486 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10487 return;
10488 }*/
10489 m68ki_exception_illegal(mc68kcpu);
10490 }
10491
10492
10493 static void m68k_op_chk2cmp2_32_pcix(m68000_base_device* mc68kcpu)
10494 {
10495 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10496 {
10497 uint32_t word2 = OPER_I_16(mc68kcpu);
10498 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
10499 uint32_t ea = EA_PCIX_32(mc68kcpu);
10500 uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea);
10501 uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4);
10502
10503 (mc68kcpu)->c_flag = compare - lower_bound;
10504 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10505 (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag);
10506 if(COND_CS(mc68kcpu))
10507 {
10508 if(BIT_B(word2))
10509 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10510 return;
10511 }
10512
10513 (mc68kcpu)->c_flag = upper_bound - compare;
10514 (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag);
10515 if(COND_CS(mc68kcpu) && BIT_B(word2))
10516 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10517 return;
10518 }*/
10519 m68ki_exception_illegal(mc68kcpu);
10520 }
10521
10522
10523 static void m68k_op_chk2cmp2_32_ai(m68000_base_device* mc68kcpu)
10524 {
10525 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10526 {
10527 uint32_t word2 = OPER_I_16(mc68kcpu);
10528 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
10529 uint32_t ea = EA_AY_AI_32(mc68kcpu);
10530 uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea);
10531 uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4);
10532
10533 (mc68kcpu)->c_flag = compare - lower_bound;
10534 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10535 (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag);
10536 if(COND_CS(mc68kcpu))
10537 {
10538 if(BIT_B(word2))
10539 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10540 return;
10541 }
10542
10543 (mc68kcpu)->c_flag = upper_bound - compare;
10544 (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag);
10545 if(COND_CS(mc68kcpu) && BIT_B(word2))
10546 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10547 return;
10548 }
10549 m68ki_exception_illegal(mc68kcpu);
10550 }
10551
10552
10553 static void m68k_op_chk2cmp2_32_di(m68000_base_device* mc68kcpu)
10554 {
10555 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10556 {
10557 uint32_t word2 = OPER_I_16(mc68kcpu);
10558 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
10559 uint32_t ea = EA_AY_DI_32(mc68kcpu);
10560 uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea);
10561 uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4);
10562
10563 (mc68kcpu)->c_flag = compare - lower_bound;
10564 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10565 (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag);
10566 if(COND_CS(mc68kcpu))
10567 {
10568 if(BIT_B(word2))
10569 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10570 return;
10571 }
10572
10573 (mc68kcpu)->c_flag = upper_bound - compare;
10574 (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag);
10575 if(COND_CS(mc68kcpu) && BIT_B(word2))
10576 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10577 return;
10578 }
10579 m68ki_exception_illegal(mc68kcpu);
10580 }
10581
10582
10583 static void m68k_op_chk2cmp2_32_ix(m68000_base_device* mc68kcpu)
10584 {
10585 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10586 {
10587 uint32_t word2 = OPER_I_16(mc68kcpu);
10588 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
10589 uint32_t ea = EA_AY_IX_32(mc68kcpu);
10590 uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea);
10591 uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4);
10592
10593 (mc68kcpu)->c_flag = compare - lower_bound;
10594 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10595 (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag);
10596 if(COND_CS(mc68kcpu))
10597 {
10598 if(BIT_B(word2))
10599 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10600 return;
10601 }
10602
10603 (mc68kcpu)->c_flag = upper_bound - compare;
10604 (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag);
10605 if(COND_CS(mc68kcpu) && BIT_B(word2))
10606 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10607 return;
10608 }
10609 m68ki_exception_illegal(mc68kcpu);
10610 }
10611
10612
10613 static void m68k_op_chk2cmp2_32_aw(m68000_base_device* mc68kcpu)
10614 {
10615 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10616 {
10617 uint32_t word2 = OPER_I_16(mc68kcpu);
10618 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
10619 uint32_t ea = EA_AW_32(mc68kcpu);
10620 uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea);
10621 uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4);
10622
10623 (mc68kcpu)->c_flag = compare - lower_bound;
10624 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10625 (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag);
10626 if(COND_CS(mc68kcpu))
10627 {
10628 if(BIT_B(word2))
10629 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10630 return;
10631 }
10632
10633 (mc68kcpu)->c_flag = upper_bound - compare;
10634 (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag);
10635 if(COND_CS(mc68kcpu) && BIT_B(word2))
10636 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10637 return;
10638 }
10639 m68ki_exception_illegal(mc68kcpu);
10640 }
10641
10642
10643 static void m68k_op_chk2cmp2_32_al(m68000_base_device* mc68kcpu)
10644 {
10645 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
10646 {
10647 uint32_t word2 = OPER_I_16(mc68kcpu);
10648 uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15];
10649 uint32_t ea = EA_AL_32(mc68kcpu);
10650 uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea);
10651 uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4);
10652
10653 (mc68kcpu)->c_flag = compare - lower_bound;
10654 (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare));
10655 (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag);
10656 if(COND_CS(mc68kcpu))
10657 {
10658 if(BIT_B(word2))
10659 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10660 return;
10661 }
10662
10663 (mc68kcpu)->c_flag = upper_bound - compare;
10664 (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag);
10665 if(COND_CS(mc68kcpu) && BIT_B(word2))
10666 m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK);
10667 return;
10668 }
10669 m68ki_exception_illegal(mc68kcpu);
10670 }
10671
10672
10673 static void m68k_op_clr_8_d(m68000_base_device* mc68kcpu)
10674 {
10675 DY(mc68kcpu) &= 0xffffff00;
10676
10677 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10678 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10679 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10680 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10681 }
10682
10683
10684 static void m68k_op_clr_8_ai(m68000_base_device* mc68kcpu)
10685 {
10686 uint32_t ea = EA_AY_AI_8(mc68kcpu);
10687
10688 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10689 {
10690 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10691 }
10692
10693 m68ki_write_8((mc68kcpu), ea, 0);
10694
10695 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10696 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10697 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10698 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10699 }
10700
10701
10702 static void m68k_op_clr_8_pi(m68000_base_device* mc68kcpu)
10703 {
10704 uint32_t ea = EA_AY_PI_8(mc68kcpu);
10705
10706 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10707 {
10708 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10709 }
10710
10711 m68ki_write_8((mc68kcpu), ea, 0);
10712
10713 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10714 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10715 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10716 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10717 }
10718
10719
10720 static void m68k_op_clr_8_pi7(m68000_base_device* mc68kcpu)
10721 {
10722 uint32_t ea = EA_A7_PI_8(mc68kcpu);
10723
10724 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10725 {
10726 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10727 }
10728
10729 m68ki_write_8((mc68kcpu), ea, 0);
10730
10731 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10732 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10733 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10734 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10735 }
10736
10737
10738 static void m68k_op_clr_8_pd(m68000_base_device* mc68kcpu)
10739 {
10740 uint32_t ea = EA_AY_PD_8(mc68kcpu);
10741
10742 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10743 {
10744 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10745 }
10746
10747 m68ki_write_8((mc68kcpu), ea, 0);
10748
10749 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10750 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10751 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10752 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10753 }
10754
10755
10756 static void m68k_op_clr_8_pd7(m68000_base_device* mc68kcpu)
10757 {
10758 uint32_t ea = EA_A7_PD_8(mc68kcpu);
10759
10760 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10761 {
10762 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10763 }
10764
10765 m68ki_write_8((mc68kcpu), ea, 0);
10766
10767 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10768 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10769 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10770 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10771 }
10772
10773
10774 static void m68k_op_clr_8_di(m68000_base_device* mc68kcpu)
10775 {
10776 uint32_t ea = EA_AY_DI_8(mc68kcpu);
10777
10778 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10779 {
10780 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10781 }
10782
10783 m68ki_write_8((mc68kcpu), ea, 0);
10784
10785 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10786 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10787 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10788 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10789 }
10790
10791
10792 static void m68k_op_clr_8_ix(m68000_base_device* mc68kcpu)
10793 {
10794 uint32_t ea = EA_AY_IX_8(mc68kcpu);
10795
10796 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10797 {
10798 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10799 }
10800
10801 m68ki_write_8((mc68kcpu), ea, 0);
10802
10803 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10804 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10805 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10806 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10807 }
10808
10809
10810 static void m68k_op_clr_8_aw(m68000_base_device* mc68kcpu)
10811 {
10812 uint32_t ea = EA_AW_8(mc68kcpu);
10813
10814 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10815 {
10816 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10817 }
10818
10819 m68ki_write_8((mc68kcpu), ea, 0);
10820
10821 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10822 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10823 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10824 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10825 }
10826
10827
10828 static void m68k_op_clr_8_al(m68000_base_device* mc68kcpu)
10829 {
10830 uint32_t ea = EA_AL_8(mc68kcpu);
10831
10832 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10833 {
10834 m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10835 }
10836
10837 m68ki_write_8((mc68kcpu), ea, 0);
10838
10839 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10840 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10841 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10842 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10843 }
10844
10845
10846 static void m68k_op_clr_16_d(m68000_base_device* mc68kcpu)
10847 {
10848 DY(mc68kcpu) &= 0xffff0000;
10849
10850 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10851 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10852 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10853 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10854 }
10855
10856
10857 static void m68k_op_clr_16_ai(m68000_base_device* mc68kcpu)
10858 {
10859 uint32_t ea = EA_AY_AI_16(mc68kcpu);
10860
10861 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10862 {
10863 m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10864 }
10865
10866 m68ki_write_16((mc68kcpu), ea, 0);
10867
10868 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10869 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10870 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10871 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10872 }
10873
10874
10875 static void m68k_op_clr_16_pi(m68000_base_device* mc68kcpu)
10876 {
10877 uint32_t ea = EA_AY_PI_16(mc68kcpu);
10878
10879 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10880 {
10881 m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10882 }
10883
10884 m68ki_write_16((mc68kcpu), ea, 0);
10885
10886 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10887 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10888 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10889 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10890 }
10891
10892
10893 static void m68k_op_clr_16_pd(m68000_base_device* mc68kcpu)
10894 {
10895 uint32_t ea = EA_AY_PD_16(mc68kcpu);
10896
10897 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10898 {
10899 m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10900 }
10901
10902 m68ki_write_16((mc68kcpu), ea, 0);
10903
10904 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10905 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10906 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10907 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10908 }
10909
10910
10911 static void m68k_op_clr_16_di(m68000_base_device* mc68kcpu)
10912 {
10913 uint32_t ea = EA_AY_DI_16(mc68kcpu);
10914
10915 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10916 {
10917 m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10918 }
10919
10920 m68ki_write_16((mc68kcpu), ea, 0);
10921
10922 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10923 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10924 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10925 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10926 }
10927
10928
10929 static void m68k_op_clr_16_ix(m68000_base_device* mc68kcpu)
10930 {
10931 uint32_t ea = EA_AY_IX_16(mc68kcpu);
10932
10933 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10934 {
10935 m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10936 }
10937
10938 m68ki_write_16((mc68kcpu), ea, 0);
10939
10940 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10941 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10942 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10943 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10944 }
10945
10946
10947 static void m68k_op_clr_16_aw(m68000_base_device* mc68kcpu)
10948 {
10949 uint32_t ea = EA_AW_16(mc68kcpu);
10950
10951 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10952 {
10953 m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10954 }
10955
10956 m68ki_write_16((mc68kcpu), ea, 0);
10957
10958 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10959 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10960 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10961 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10962 }
10963
10964
10965 static void m68k_op_clr_16_al(m68000_base_device* mc68kcpu)
10966 {
10967 uint32_t ea = EA_AL_16(mc68kcpu);
10968
10969 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10970 {
10971 m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
10972 }
10973
10974 m68ki_write_16((mc68kcpu), ea, 0);
10975
10976 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10977 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10978 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10979 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10980 }
10981
10982
10983 static void m68k_op_clr_32_d(m68000_base_device* mc68kcpu)
10984 {
10985 DY(mc68kcpu) = 0;
10986
10987 (mc68kcpu)->n_flag = NFLAG_CLEAR;
10988 (mc68kcpu)->v_flag = VFLAG_CLEAR;
10989 (mc68kcpu)->c_flag = CFLAG_CLEAR;
10990 (mc68kcpu)->not_z_flag = ZFLAG_SET;
10991 }
10992
10993
10994 static void m68k_op_clr_32_ai(m68000_base_device* mc68kcpu)
10995 {
10996 uint32_t ea = EA_AY_AI_32(mc68kcpu);
10997
10998 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
10999 {
11000 m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
11001 }
11002
11003 m68ki_write_32((mc68kcpu), ea, 0);
11004
11005 (mc68kcpu)->n_flag = NFLAG_CLEAR;
11006 (mc68kcpu)->v_flag = VFLAG_CLEAR;
11007 (mc68kcpu)->c_flag = CFLAG_CLEAR;
11008 (mc68kcpu)->not_z_flag = ZFLAG_SET;
11009 }
11010
11011
11012 static void m68k_op_clr_32_pi(m68000_base_device* mc68kcpu)
11013 {
11014 uint32_t ea = EA_AY_PI_32(mc68kcpu);
11015
11016 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
11017 {
11018 m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
11019 }
11020
11021 m68ki_write_32((mc68kcpu), ea, 0);
11022
11023 (mc68kcpu)->n_flag = NFLAG_CLEAR;
11024 (mc68kcpu)->v_flag = VFLAG_CLEAR;
11025 (mc68kcpu)->c_flag = CFLAG_CLEAR;
11026 (mc68kcpu)->not_z_flag = ZFLAG_SET;
11027 }
11028
11029
11030 static void m68k_op_clr_32_pd(m68000_base_device* mc68kcpu)
11031 {
11032 uint32_t ea = EA_AY_PD_32(mc68kcpu);
11033
11034 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
11035 {
11036 m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
11037 }
11038
11039 m68ki_write_32((mc68kcpu), ea, 0);
11040
11041 (mc68kcpu)->n_flag = NFLAG_CLEAR;
11042 (mc68kcpu)->v_flag = VFLAG_CLEAR;
11043 (mc68kcpu)->c_flag = CFLAG_CLEAR;
11044 (mc68kcpu)->not_z_flag = ZFLAG_SET;
11045 }
11046
11047
11048 static void m68k_op_clr_32_di(m68000_base_device* mc68kcpu)
11049 {
11050 uint32_t ea = EA_AY_DI_32(mc68kcpu);
11051
11052 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
11053 {
11054 m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
11055 }
11056
11057 m68ki_write_32((mc68kcpu), ea, 0);
11058
11059 (mc68kcpu)->n_flag = NFLAG_CLEAR;
11060 (mc68kcpu)->v_flag = VFLAG_CLEAR;
11061 (mc68kcpu)->c_flag = CFLAG_CLEAR;
11062 (mc68kcpu)->not_z_flag = ZFLAG_SET;
11063 }
11064
11065
11066 static void m68k_op_clr_32_ix(m68000_base_device* mc68kcpu)
11067 {
11068 uint32_t ea = EA_AY_IX_32(mc68kcpu);
11069
11070 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
11071 {
11072 m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
11073 }
11074
11075 m68ki_write_32((mc68kcpu), ea, 0);
11076
11077 (mc68kcpu)->n_flag = NFLAG_CLEAR;
11078 (mc68kcpu)->v_flag = VFLAG_CLEAR;
11079 (mc68kcpu)->c_flag = CFLAG_CLEAR;
11080 (mc68kcpu)->not_z_flag = ZFLAG_SET;
11081 }
11082
11083
11084 static void m68k_op_clr_32_aw(m68000_base_device* mc68kcpu)
11085 {
11086 uint32_t ea = EA_AW_32(mc68kcpu);
11087
11088 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
11089 {
11090 m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
11091 }
11092
11093 m68ki_write_32((mc68kcpu), ea, 0);
11094
11095 (mc68kcpu)->n_flag = NFLAG_CLEAR;
11096 (mc68kcpu)->v_flag = VFLAG_CLEAR;
11097 (mc68kcpu)->c_flag = CFLAG_CLEAR;
11098 (mc68kcpu)->not_z_flag = ZFLAG_SET;
11099 }
11100
11101
11102 static void m68k_op_clr_32_al(m68000_base_device* mc68kcpu)
11103 {
11104 uint32_t ea = EA_AL_32(mc68kcpu);
11105
11106 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
11107 {
11108 m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */
11109 }
11110
11111 m68ki_write_32((mc68kcpu), ea, 0);
11112
11113 (mc68kcpu)->n_flag = NFLAG_CLEAR;
11114 (mc68kcpu)->v_flag = VFLAG_CLEAR;
11115 (mc68kcpu)->c_flag = CFLAG_CLEAR;
11116 (mc68kcpu)->not_z_flag = ZFLAG_SET;
11117 }
11118
11119
11120 static void m68k_op_cmp_8_d(m68000_base_device* mc68kcpu)
11121 {
11122 uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu));
11123 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11124 uint32_t res = dst - src;
11125
11126 (mc68kcpu)->n_flag = NFLAG_8(res);
11127 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11128 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11129 (mc68kcpu)->c_flag = CFLAG_8(res);
11130 }
11131
11132
11133 static void m68k_op_cmp_8_ai(m68000_base_device* mc68kcpu)
11134 {
11135 uint32_t src = OPER_AY_AI_8(mc68kcpu);
11136 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11137 uint32_t res = dst - src;
11138
11139 (mc68kcpu)->n_flag = NFLAG_8(res);
11140 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11141 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11142 (mc68kcpu)->c_flag = CFLAG_8(res);
11143 }
11144
11145
11146 static void m68k_op_cmp_8_pi(m68000_base_device* mc68kcpu)
11147 {
11148 uint32_t src = OPER_AY_PI_8(mc68kcpu);
11149 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11150 uint32_t res = dst - src;
11151
11152 (mc68kcpu)->n_flag = NFLAG_8(res);
11153 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11154 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11155 (mc68kcpu)->c_flag = CFLAG_8(res);
11156 }
11157
11158
11159 static void m68k_op_cmp_8_pi7(m68000_base_device* mc68kcpu)
11160 {
11161 uint32_t src = OPER_A7_PI_8(mc68kcpu);
11162 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11163 uint32_t res = dst - src;
11164
11165 (mc68kcpu)->n_flag = NFLAG_8(res);
11166 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11167 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11168 (mc68kcpu)->c_flag = CFLAG_8(res);
11169 }
11170
11171
11172 static void m68k_op_cmp_8_pd(m68000_base_device* mc68kcpu)
11173 {
11174 uint32_t src = OPER_AY_PD_8(mc68kcpu);
11175 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11176 uint32_t res = dst - src;
11177
11178 (mc68kcpu)->n_flag = NFLAG_8(res);
11179 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11180 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11181 (mc68kcpu)->c_flag = CFLAG_8(res);
11182 }
11183
11184
11185 static void m68k_op_cmp_8_pd7(m68000_base_device* mc68kcpu)
11186 {
11187 uint32_t src = OPER_A7_PD_8(mc68kcpu);
11188 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11189 uint32_t res = dst - src;
11190
11191 (mc68kcpu)->n_flag = NFLAG_8(res);
11192 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11193 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11194 (mc68kcpu)->c_flag = CFLAG_8(res);
11195 }
11196
11197
11198 static void m68k_op_cmp_8_di(m68000_base_device* mc68kcpu)
11199 {
11200 uint32_t src = OPER_AY_DI_8(mc68kcpu);
11201 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11202 uint32_t res = dst - src;
11203
11204 (mc68kcpu)->n_flag = NFLAG_8(res);
11205 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11206 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11207 (mc68kcpu)->c_flag = CFLAG_8(res);
11208 }
11209
11210
11211 static void m68k_op_cmp_8_ix(m68000_base_device* mc68kcpu)
11212 {
11213 uint32_t src = OPER_AY_IX_8(mc68kcpu);
11214 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11215 uint32_t res = dst - src;
11216
11217 (mc68kcpu)->n_flag = NFLAG_8(res);
11218 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11219 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11220 (mc68kcpu)->c_flag = CFLAG_8(res);
11221 }
11222
11223
11224 static void m68k_op_cmp_8_aw(m68000_base_device* mc68kcpu)
11225 {
11226 uint32_t src = OPER_AW_8(mc68kcpu);
11227 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11228 uint32_t res = dst - src;
11229
11230 (mc68kcpu)->n_flag = NFLAG_8(res);
11231 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11232 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11233 (mc68kcpu)->c_flag = CFLAG_8(res);
11234 }
11235
11236
11237 static void m68k_op_cmp_8_al(m68000_base_device* mc68kcpu)
11238 {
11239 uint32_t src = OPER_AL_8(mc68kcpu);
11240 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11241 uint32_t res = dst - src;
11242
11243 (mc68kcpu)->n_flag = NFLAG_8(res);
11244 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11245 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11246 (mc68kcpu)->c_flag = CFLAG_8(res);
11247 }
11248
11249
11250 static void m68k_op_cmp_8_pcdi(m68000_base_device* mc68kcpu)
11251 {
11252 uint32_t src = OPER_PCDI_8(mc68kcpu);
11253 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11254 uint32_t res = dst - src;
11255
11256 (mc68kcpu)->n_flag = NFLAG_8(res);
11257 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11258 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11259 (mc68kcpu)->c_flag = CFLAG_8(res);
11260 }
11261
11262
11263 static void m68k_op_cmp_8_pcix(m68000_base_device* mc68kcpu)
11264 {
11265 uint32_t src = OPER_PCIX_8(mc68kcpu);
11266 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11267 uint32_t res = dst - src;
11268
11269 (mc68kcpu)->n_flag = NFLAG_8(res);
11270 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11271 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11272 (mc68kcpu)->c_flag = CFLAG_8(res);
11273 }
11274
11275
11276 static void m68k_op_cmp_8_i(m68000_base_device* mc68kcpu)
11277 {
11278 uint32_t src = OPER_I_8(mc68kcpu);
11279 uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu));
11280 uint32_t res = dst - src;
11281
11282 (mc68kcpu)->n_flag = NFLAG_8(res);
11283 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11284 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11285 (mc68kcpu)->c_flag = CFLAG_8(res);
11286 }
11287
11288
11289 static void m68k_op_cmp_16_d(m68000_base_device* mc68kcpu)
11290 {
11291 uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu));
11292 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11293 uint32_t res = dst - src;
11294
11295 (mc68kcpu)->n_flag = NFLAG_16(res);
11296 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11297 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11298 (mc68kcpu)->c_flag = CFLAG_16(res);
11299 }
11300
11301
11302 static void m68k_op_cmp_16_a(m68000_base_device* mc68kcpu)
11303 {
11304 uint32_t src = MASK_OUT_ABOVE_16(AY(mc68kcpu));
11305 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11306 uint32_t res = dst - src;
11307
11308 (mc68kcpu)->n_flag = NFLAG_16(res);
11309 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11310 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11311 (mc68kcpu)->c_flag = CFLAG_16(res);
11312 }
11313
11314
11315 static void m68k_op_cmp_16_ai(m68000_base_device* mc68kcpu)
11316 {
11317 uint32_t src = OPER_AY_AI_16(mc68kcpu);
11318 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11319 uint32_t res = dst - src;
11320
11321 (mc68kcpu)->n_flag = NFLAG_16(res);
11322 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11323 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11324 (mc68kcpu)->c_flag = CFLAG_16(res);
11325 }
11326
11327
11328 static void m68k_op_cmp_16_pi(m68000_base_device* mc68kcpu)
11329 {
11330 uint32_t src = OPER_AY_PI_16(mc68kcpu);
11331 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11332 uint32_t res = dst - src;
11333
11334 (mc68kcpu)->n_flag = NFLAG_16(res);
11335 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11336 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11337 (mc68kcpu)->c_flag = CFLAG_16(res);
11338 }
11339
11340
11341 static void m68k_op_cmp_16_pd(m68000_base_device* mc68kcpu)
11342 {
11343 uint32_t src = OPER_AY_PD_16(mc68kcpu);
11344 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11345 uint32_t res = dst - src;
11346
11347 (mc68kcpu)->n_flag = NFLAG_16(res);
11348 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11349 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11350 (mc68kcpu)->c_flag = CFLAG_16(res);
11351 }
11352
11353
11354 static void m68k_op_cmp_16_di(m68000_base_device* mc68kcpu)
11355 {
11356 uint32_t src = OPER_AY_DI_16(mc68kcpu);
11357 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11358 uint32_t res = dst - src;
11359
11360 (mc68kcpu)->n_flag = NFLAG_16(res);
11361 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11362 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11363 (mc68kcpu)->c_flag = CFLAG_16(res);
11364 }
11365
11366
11367 static void m68k_op_cmp_16_ix(m68000_base_device* mc68kcpu)
11368 {
11369 uint32_t src = OPER_AY_IX_16(mc68kcpu);
11370 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11371 uint32_t res = dst - src;
11372
11373 (mc68kcpu)->n_flag = NFLAG_16(res);
11374 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11375 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11376 (mc68kcpu)->c_flag = CFLAG_16(res);
11377 }
11378
11379
11380 static void m68k_op_cmp_16_aw(m68000_base_device* mc68kcpu)
11381 {
11382 uint32_t src = OPER_AW_16(mc68kcpu);
11383 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11384 uint32_t res = dst - src;
11385
11386 (mc68kcpu)->n_flag = NFLAG_16(res);
11387 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11388 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11389 (mc68kcpu)->c_flag = CFLAG_16(res);
11390 }
11391
11392
11393 static void m68k_op_cmp_16_al(m68000_base_device* mc68kcpu)
11394 {
11395 uint32_t src = OPER_AL_16(mc68kcpu);
11396 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11397 uint32_t res = dst - src;
11398
11399 (mc68kcpu)->n_flag = NFLAG_16(res);
11400 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11401 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11402 (mc68kcpu)->c_flag = CFLAG_16(res);
11403 }
11404
11405
11406 static void m68k_op_cmp_16_pcdi(m68000_base_device* mc68kcpu)
11407 {
11408 uint32_t src = OPER_PCDI_16(mc68kcpu);
11409 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11410 uint32_t res = dst - src;
11411
11412 (mc68kcpu)->n_flag = NFLAG_16(res);
11413 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11414 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11415 (mc68kcpu)->c_flag = CFLAG_16(res);
11416 }
11417
11418
11419 static void m68k_op_cmp_16_pcix(m68000_base_device* mc68kcpu)
11420 {
11421 uint32_t src = OPER_PCIX_16(mc68kcpu);
11422 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11423 uint32_t res = dst - src;
11424
11425 (mc68kcpu)->n_flag = NFLAG_16(res);
11426 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11427 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11428 (mc68kcpu)->c_flag = CFLAG_16(res);
11429 }
11430
11431
11432 static void m68k_op_cmp_16_i(m68000_base_device* mc68kcpu)
11433 {
11434 uint32_t src = OPER_I_16(mc68kcpu);
11435 uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu));
11436 uint32_t res = dst - src;
11437
11438 (mc68kcpu)->n_flag = NFLAG_16(res);
11439 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
11440 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
11441 (mc68kcpu)->c_flag = CFLAG_16(res);
11442 }
11443
11444
11445 static void m68k_op_cmp_32_d(m68000_base_device* mc68kcpu)
11446 {
11447 uint32_t src = DY(mc68kcpu);
11448 uint32_t dst = DX(mc68kcpu);
11449 uint32_t res = dst - src;
11450
11451 (mc68kcpu)->n_flag = NFLAG_32(res);
11452 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11453 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11454 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11455 }
11456
11457
11458 static void m68k_op_cmp_32_a(m68000_base_device* mc68kcpu)
11459 {
11460 uint32_t src = AY(mc68kcpu);
11461 uint32_t dst = DX(mc68kcpu);
11462 uint32_t res = dst - src;
11463
11464 (mc68kcpu)->n_flag = NFLAG_32(res);
11465 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11466 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11467 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11468 }
11469
11470
11471 static void m68k_op_cmp_32_ai(m68000_base_device* mc68kcpu)
11472 {
11473 uint32_t src = OPER_AY_AI_32(mc68kcpu);
11474 uint32_t dst = DX(mc68kcpu);
11475 uint32_t res = dst - src;
11476
11477 (mc68kcpu)->n_flag = NFLAG_32(res);
11478 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11479 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11480 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11481 }
11482
11483
11484 static void m68k_op_cmp_32_pi(m68000_base_device* mc68kcpu)
11485 {
11486 uint32_t src = OPER_AY_PI_32(mc68kcpu);
11487 uint32_t dst = DX(mc68kcpu);
11488 uint32_t res = dst - src;
11489
11490 (mc68kcpu)->n_flag = NFLAG_32(res);
11491 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11492 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11493 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11494 }
11495
11496
11497 static void m68k_op_cmp_32_pd(m68000_base_device* mc68kcpu)
11498 {
11499 uint32_t src = OPER_AY_PD_32(mc68kcpu);
11500 uint32_t dst = DX(mc68kcpu);
11501 uint32_t res = dst - src;
11502
11503 (mc68kcpu)->n_flag = NFLAG_32(res);
11504 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11505 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11506 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11507 }
11508
11509
11510 static void m68k_op_cmp_32_di(m68000_base_device* mc68kcpu)
11511 {
11512 uint32_t src = OPER_AY_DI_32(mc68kcpu);
11513 uint32_t dst = DX(mc68kcpu);
11514 uint32_t res = dst - src;
11515
11516 (mc68kcpu)->n_flag = NFLAG_32(res);
11517 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11518 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11519 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11520 }
11521
11522
11523 static void m68k_op_cmp_32_ix(m68000_base_device* mc68kcpu)
11524 {
11525 uint32_t src = OPER_AY_IX_32(mc68kcpu);
11526 uint32_t dst = DX(mc68kcpu);
11527 uint32_t res = dst - src;
11528
11529 (mc68kcpu)->n_flag = NFLAG_32(res);
11530 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11531 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11532 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11533 }
11534
11535
11536 static void m68k_op_cmp_32_aw(m68000_base_device* mc68kcpu)
11537 {
11538 uint32_t src = OPER_AW_32(mc68kcpu);
11539 uint32_t dst = DX(mc68kcpu);
11540 uint32_t res = dst - src;
11541
11542 (mc68kcpu)->n_flag = NFLAG_32(res);
11543 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11544 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11545 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11546 }
11547
11548
11549 static void m68k_op_cmp_32_al(m68000_base_device* mc68kcpu)
11550 {
11551 uint32_t src = OPER_AL_32(mc68kcpu);
11552 uint32_t dst = DX(mc68kcpu);
11553 uint32_t res = dst - src;
11554
11555 (mc68kcpu)->n_flag = NFLAG_32(res);
11556 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11557 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11558 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11559 }
11560
11561
11562 static void m68k_op_cmp_32_pcdi(m68000_base_device* mc68kcpu)
11563 {
11564 uint32_t src = OPER_PCDI_32(mc68kcpu);
11565 uint32_t dst = DX(mc68kcpu);
11566 uint32_t res = dst - src;
11567
11568 (mc68kcpu)->n_flag = NFLAG_32(res);
11569 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11570 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11571 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11572 }
11573
11574
11575 static void m68k_op_cmp_32_pcix(m68000_base_device* mc68kcpu)
11576 {
11577 uint32_t src = OPER_PCIX_32(mc68kcpu);
11578 uint32_t dst = DX(mc68kcpu);
11579 uint32_t res = dst - src;
11580
11581 (mc68kcpu)->n_flag = NFLAG_32(res);
11582 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11583 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11584 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11585 }
11586
11587
11588 static void m68k_op_cmp_32_i(m68000_base_device* mc68kcpu)
11589 {
11590 uint32_t src = OPER_I_32(mc68kcpu);
11591 uint32_t dst = DX(mc68kcpu);
11592 uint32_t res = dst - src;
11593
11594 (mc68kcpu)->n_flag = NFLAG_32(res);
11595 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11596 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11597 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11598 }
11599
11600
11601 static void m68k_op_cmpa_16_d(m68000_base_device* mc68kcpu)
11602 {
11603 uint32_t src = MAKE_INT_16(DY(mc68kcpu));
11604 uint32_t dst = AX(mc68kcpu);
11605 uint32_t res = dst - src;
11606
11607 (mc68kcpu)->n_flag = NFLAG_32(res);
11608 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11609 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11610 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11611 }
11612
11613
11614 static void m68k_op_cmpa_16_a(m68000_base_device* mc68kcpu)
11615 {
11616 uint32_t src = MAKE_INT_16(AY(mc68kcpu));
11617 uint32_t dst = AX(mc68kcpu);
11618 uint32_t res = dst - src;
11619
11620 (mc68kcpu)->n_flag = NFLAG_32(res);
11621 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11622 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11623 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11624 }
11625
11626
11627 static void m68k_op_cmpa_16_ai(m68000_base_device* mc68kcpu)
11628 {
11629 uint32_t src = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu));
11630 uint32_t dst = AX(mc68kcpu);
11631 uint32_t res = dst - src;
11632
11633 (mc68kcpu)->n_flag = NFLAG_32(res);
11634 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11635 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11636 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11637 }
11638
11639
11640 static void m68k_op_cmpa_16_pi(m68000_base_device* mc68kcpu)
11641 {
11642 uint32_t src = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu));
11643 uint32_t dst = AX(mc68kcpu);
11644 uint32_t res = dst - src;
11645
11646 (mc68kcpu)->n_flag = NFLAG_32(res);
11647 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11648 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11649 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11650 }
11651
11652
11653 static void m68k_op_cmpa_16_pd(m68000_base_device* mc68kcpu)
11654 {
11655 uint32_t src = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu));
11656 uint32_t dst = AX(mc68kcpu);
11657 uint32_t res = dst - src;
11658
11659 (mc68kcpu)->n_flag = NFLAG_32(res);
11660 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11661 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11662 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11663 }
11664
11665
11666 static void m68k_op_cmpa_16_di(m68000_base_device* mc68kcpu)
11667 {
11668 uint32_t src = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu));
11669 uint32_t dst = AX(mc68kcpu);
11670 uint32_t res = dst - src;
11671
11672 (mc68kcpu)->n_flag = NFLAG_32(res);
11673 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11674 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11675 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11676 }
11677
11678
11679 static void m68k_op_cmpa_16_ix(m68000_base_device* mc68kcpu)
11680 {
11681 uint32_t src = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu));
11682 uint32_t dst = AX(mc68kcpu);
11683 uint32_t res = dst - src;
11684
11685 (mc68kcpu)->n_flag = NFLAG_32(res);
11686 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11687 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11688 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11689 }
11690
11691
11692 static void m68k_op_cmpa_16_aw(m68000_base_device* mc68kcpu)
11693 {
11694 uint32_t src = MAKE_INT_16(OPER_AW_16(mc68kcpu));
11695 uint32_t dst = AX(mc68kcpu);
11696 uint32_t res = dst - src;
11697
11698 (mc68kcpu)->n_flag = NFLAG_32(res);
11699 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11700 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11701 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11702 }
11703
11704
11705 static void m68k_op_cmpa_16_al(m68000_base_device* mc68kcpu)
11706 {
11707 uint32_t src = MAKE_INT_16(OPER_AL_16(mc68kcpu));
11708 uint32_t dst = AX(mc68kcpu);
11709 uint32_t res = dst - src;
11710
11711 (mc68kcpu)->n_flag = NFLAG_32(res);
11712 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11713 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11714 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11715 }
11716
11717
11718 static void m68k_op_cmpa_16_pcdi(m68000_base_device* mc68kcpu)
11719 {
11720 uint32_t src = MAKE_INT_16(OPER_PCDI_16(mc68kcpu));
11721 uint32_t dst = AX(mc68kcpu);
11722 uint32_t res = dst - src;
11723
11724 (mc68kcpu)->n_flag = NFLAG_32(res);
11725 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11726 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11727 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11728 }
11729
11730
11731 static void m68k_op_cmpa_16_pcix(m68000_base_device* mc68kcpu)
11732 {
11733 uint32_t src = MAKE_INT_16(OPER_PCIX_16(mc68kcpu));
11734 uint32_t dst = AX(mc68kcpu);
11735 uint32_t res = dst - src;
11736
11737 (mc68kcpu)->n_flag = NFLAG_32(res);
11738 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11739 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11740 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11741 }
11742
11743
11744 static void m68k_op_cmpa_16_i(m68000_base_device* mc68kcpu)
11745 {
11746 uint32_t src = MAKE_INT_16(OPER_I_16(mc68kcpu));
11747 uint32_t dst = AX(mc68kcpu);
11748 uint32_t res = dst - src;
11749
11750 (mc68kcpu)->n_flag = NFLAG_32(res);
11751 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11752 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11753 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11754 }
11755
11756
11757 static void m68k_op_cmpa_32_d(m68000_base_device* mc68kcpu)
11758 {
11759 uint32_t src = DY(mc68kcpu);
11760 uint32_t dst = AX(mc68kcpu);
11761 uint32_t res = dst - src;
11762
11763 (mc68kcpu)->n_flag = NFLAG_32(res);
11764 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11765 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11766 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11767 }
11768
11769
11770 static void m68k_op_cmpa_32_a(m68000_base_device* mc68kcpu)
11771 {
11772 uint32_t src = AY(mc68kcpu);
11773 uint32_t dst = AX(mc68kcpu);
11774 uint32_t res = dst - src;
11775
11776 (mc68kcpu)->n_flag = NFLAG_32(res);
11777 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11778 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11779 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11780 }
11781
11782
11783 static void m68k_op_cmpa_32_ai(m68000_base_device* mc68kcpu)
11784 {
11785 uint32_t src = OPER_AY_AI_32(mc68kcpu);
11786 uint32_t dst = AX(mc68kcpu);
11787 uint32_t res = dst - src;
11788
11789 (mc68kcpu)->n_flag = NFLAG_32(res);
11790 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11791 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11792 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11793 }
11794
11795
11796 static void m68k_op_cmpa_32_pi(m68000_base_device* mc68kcpu)
11797 {
11798 uint32_t src = OPER_AY_PI_32(mc68kcpu);
11799 uint32_t dst = AX(mc68kcpu);
11800 uint32_t res = dst - src;
11801
11802 (mc68kcpu)->n_flag = NFLAG_32(res);
11803 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11804 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11805 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11806 }
11807
11808
11809 static void m68k_op_cmpa_32_pd(m68000_base_device* mc68kcpu)
11810 {
11811 uint32_t src = OPER_AY_PD_32(mc68kcpu);
11812 uint32_t dst = AX(mc68kcpu);
11813 uint32_t res = dst - src;
11814
11815 (mc68kcpu)->n_flag = NFLAG_32(res);
11816 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11817 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11818 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11819 }
11820
11821
11822 static void m68k_op_cmpa_32_di(m68000_base_device* mc68kcpu)
11823 {
11824 uint32_t src = OPER_AY_DI_32(mc68kcpu);
11825 uint32_t dst = AX(mc68kcpu);
11826 uint32_t res = dst - src;
11827
11828 (mc68kcpu)->n_flag = NFLAG_32(res);
11829 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11830 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11831 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11832 }
11833
11834
11835 static void m68k_op_cmpa_32_ix(m68000_base_device* mc68kcpu)
11836 {
11837 uint32_t src = OPER_AY_IX_32(mc68kcpu);
11838 uint32_t dst = AX(mc68kcpu);
11839 uint32_t res = dst - src;
11840
11841 (mc68kcpu)->n_flag = NFLAG_32(res);
11842 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11843 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11844 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11845 }
11846
11847
11848 static void m68k_op_cmpa_32_aw(m68000_base_device* mc68kcpu)
11849 {
11850 uint32_t src = OPER_AW_32(mc68kcpu);
11851 uint32_t dst = AX(mc68kcpu);
11852 uint32_t res = dst - src;
11853
11854 (mc68kcpu)->n_flag = NFLAG_32(res);
11855 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11856 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11857 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11858 }
11859
11860
11861 static void m68k_op_cmpa_32_al(m68000_base_device* mc68kcpu)
11862 {
11863 uint32_t src = OPER_AL_32(mc68kcpu);
11864 uint32_t dst = AX(mc68kcpu);
11865 uint32_t res = dst - src;
11866
11867 (mc68kcpu)->n_flag = NFLAG_32(res);
11868 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11869 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11870 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11871 }
11872
11873
11874 static void m68k_op_cmpa_32_pcdi(m68000_base_device* mc68kcpu)
11875 {
11876 uint32_t src = OPER_PCDI_32(mc68kcpu);
11877 uint32_t dst = AX(mc68kcpu);
11878 uint32_t res = dst - src;
11879
11880 (mc68kcpu)->n_flag = NFLAG_32(res);
11881 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11882 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11883 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11884 }
11885
11886
11887 static void m68k_op_cmpa_32_pcix(m68000_base_device* mc68kcpu)
11888 {
11889 uint32_t src = OPER_PCIX_32(mc68kcpu);
11890 uint32_t dst = AX(mc68kcpu);
11891 uint32_t res = dst - src;
11892
11893 (mc68kcpu)->n_flag = NFLAG_32(res);
11894 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11895 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11896 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11897 }
11898
11899
11900 static void m68k_op_cmpa_32_i(m68000_base_device* mc68kcpu)
11901 {
11902 uint32_t src = OPER_I_32(mc68kcpu);
11903 uint32_t dst = AX(mc68kcpu);
11904 uint32_t res = dst - src;
11905
11906 (mc68kcpu)->n_flag = NFLAG_32(res);
11907 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
11908 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
11909 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
11910 }
11911
11912
11913 static void m68k_op_cmpi_8_d(m68000_base_device* mc68kcpu)
11914 {
11915 uint32_t src = OPER_I_8(mc68kcpu);
11916 uint32_t dst = MASK_OUT_ABOVE_8(DY(mc68kcpu));
11917 uint32_t res = dst - src;
11918
11919 (mc68kcpu)->n_flag = NFLAG_8(res);
11920 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11921 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11922 (mc68kcpu)->c_flag = CFLAG_8(res);
11923 }
11924
11925
11926 static void m68k_op_cmpi_8_ai(m68000_base_device* mc68kcpu)
11927 {
11928 uint32_t src = OPER_I_8(mc68kcpu);
11929 uint32_t dst = OPER_AY_AI_8(mc68kcpu);
11930 uint32_t res = dst - src;
11931
11932 (mc68kcpu)->n_flag = NFLAG_8(res);
11933 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11934 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11935 (mc68kcpu)->c_flag = CFLAG_8(res);
11936 }
11937
11938
11939 static void m68k_op_cmpi_8_pi(m68000_base_device* mc68kcpu)
11940 {
11941 uint32_t src = OPER_I_8(mc68kcpu);
11942 uint32_t dst = OPER_AY_PI_8(mc68kcpu);
11943 uint32_t res = dst - src;
11944
11945 (mc68kcpu)->n_flag = NFLAG_8(res);
11946 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11947 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11948 (mc68kcpu)->c_flag = CFLAG_8(res);
11949 }
11950
11951
11952 static void m68k_op_cmpi_8_pi7(m68000_base_device* mc68kcpu)
11953 {
11954 uint32_t src = OPER_I_8(mc68kcpu);
11955 uint32_t dst = OPER_A7_PI_8(mc68kcpu);
11956 uint32_t res = dst - src;
11957
11958 (mc68kcpu)->n_flag = NFLAG_8(res);
11959 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11960 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11961 (mc68kcpu)->c_flag = CFLAG_8(res);
11962 }
11963
11964
11965 static void m68k_op_cmpi_8_pd(m68000_base_device* mc68kcpu)
11966 {
11967 uint32_t src = OPER_I_8(mc68kcpu);
11968 uint32_t dst = OPER_AY_PD_8(mc68kcpu);
11969 uint32_t res = dst - src;
11970
11971 (mc68kcpu)->n_flag = NFLAG_8(res);
11972 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11973 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11974 (mc68kcpu)->c_flag = CFLAG_8(res);
11975 }
11976
11977
11978 static void m68k_op_cmpi_8_pd7(m68000_base_device* mc68kcpu)
11979 {
11980 uint32_t src = OPER_I_8(mc68kcpu);
11981 uint32_t dst = OPER_A7_PD_8(mc68kcpu);
11982 uint32_t res = dst - src;
11983
11984 (mc68kcpu)->n_flag = NFLAG_8(res);
11985 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11986 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
11987 (mc68kcpu)->c_flag = CFLAG_8(res);
11988 }
11989
11990
11991 static void m68k_op_cmpi_8_di(m68000_base_device* mc68kcpu)
11992 {
11993 uint32_t src = OPER_I_8(mc68kcpu);
11994 uint32_t dst = OPER_AY_DI_8(mc68kcpu);
11995 uint32_t res = dst - src;
11996
11997 (mc68kcpu)->n_flag = NFLAG_8(res);
11998 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
11999 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12000 (mc68kcpu)->c_flag = CFLAG_8(res);
12001 }
12002
12003
12004 static void m68k_op_cmpi_8_ix(m68000_base_device* mc68kcpu)
12005 {
12006 uint32_t src = OPER_I_8(mc68kcpu);
12007 uint32_t dst = OPER_AY_IX_8(mc68kcpu);
12008 uint32_t res = dst - src;
12009
12010 (mc68kcpu)->n_flag = NFLAG_8(res);
12011 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12012 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12013 (mc68kcpu)->c_flag = CFLAG_8(res);
12014 }
12015
12016
12017 static void m68k_op_cmpi_8_aw(m68000_base_device* mc68kcpu)
12018 {
12019 uint32_t src = OPER_I_8(mc68kcpu);
12020 uint32_t dst = OPER_AW_8(mc68kcpu);
12021 uint32_t res = dst - src;
12022
12023 (mc68kcpu)->n_flag = NFLAG_8(res);
12024 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12025 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12026 (mc68kcpu)->c_flag = CFLAG_8(res);
12027 }
12028
12029
12030 static void m68k_op_cmpi_8_al(m68000_base_device* mc68kcpu)
12031 {
12032 uint32_t src = OPER_I_8(mc68kcpu);
12033 uint32_t dst = OPER_AL_8(mc68kcpu);
12034 uint32_t res = dst - src;
12035
12036 (mc68kcpu)->n_flag = NFLAG_8(res);
12037 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12038 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12039 (mc68kcpu)->c_flag = CFLAG_8(res);
12040 }
12041
12042
12043 static void m68k_op_cmpi_8_pcdi(m68000_base_device* mc68kcpu)
12044 {
12045 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12046 {
12047 uint32_t src = OPER_I_8(mc68kcpu);
12048 uint32_t dst = OPER_PCDI_8(mc68kcpu);
12049 uint32_t res = dst - src;
12050
12051 (mc68kcpu)->n_flag = NFLAG_8(res);
12052 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12053 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12054 (mc68kcpu)->c_flag = CFLAG_8(res);
12055 return;
12056 }
12057 m68ki_exception_illegal(mc68kcpu);
12058 }
12059
12060
12061 static void m68k_op_cmpi_8_pcix(m68000_base_device* mc68kcpu)
12062 {
12063 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12064 {
12065 uint32_t src = OPER_I_8(mc68kcpu);
12066 uint32_t dst = OPER_PCIX_8(mc68kcpu);
12067 uint32_t res = dst - src;
12068
12069 (mc68kcpu)->n_flag = NFLAG_8(res);
12070 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12071 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12072 (mc68kcpu)->c_flag = CFLAG_8(res);
12073 return;
12074 }
12075 m68ki_exception_illegal(mc68kcpu);
12076 }
12077
12078
12079 static void m68k_op_cmpi_16_d(m68000_base_device* mc68kcpu)
12080 {
12081 uint32_t src = OPER_I_16(mc68kcpu);
12082 uint32_t dst = MASK_OUT_ABOVE_16(DY(mc68kcpu));
12083 uint32_t res = dst - src;
12084
12085 (mc68kcpu)->n_flag = NFLAG_16(res);
12086 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12087 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12088 (mc68kcpu)->c_flag = CFLAG_16(res);
12089 }
12090
12091
12092 static void m68k_op_cmpi_16_ai(m68000_base_device* mc68kcpu)
12093 {
12094 uint32_t src = OPER_I_16(mc68kcpu);
12095 uint32_t dst = OPER_AY_AI_16(mc68kcpu);
12096 uint32_t res = dst - src;
12097
12098 (mc68kcpu)->n_flag = NFLAG_16(res);
12099 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12100 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12101 (mc68kcpu)->c_flag = CFLAG_16(res);
12102 }
12103
12104
12105 static void m68k_op_cmpi_16_pi(m68000_base_device* mc68kcpu)
12106 {
12107 uint32_t src = OPER_I_16(mc68kcpu);
12108 uint32_t dst = OPER_AY_PI_16(mc68kcpu);
12109 uint32_t res = dst - src;
12110
12111 (mc68kcpu)->n_flag = NFLAG_16(res);
12112 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12113 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12114 (mc68kcpu)->c_flag = CFLAG_16(res);
12115 }
12116
12117
12118 static void m68k_op_cmpi_16_pd(m68000_base_device* mc68kcpu)
12119 {
12120 uint32_t src = OPER_I_16(mc68kcpu);
12121 uint32_t dst = OPER_AY_PD_16(mc68kcpu);
12122 uint32_t res = dst - src;
12123
12124 (mc68kcpu)->n_flag = NFLAG_16(res);
12125 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12126 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12127 (mc68kcpu)->c_flag = CFLAG_16(res);
12128 }
12129
12130
12131 static void m68k_op_cmpi_16_di(m68000_base_device* mc68kcpu)
12132 {
12133 uint32_t src = OPER_I_16(mc68kcpu);
12134 uint32_t dst = OPER_AY_DI_16(mc68kcpu);
12135 uint32_t res = dst - src;
12136
12137 (mc68kcpu)->n_flag = NFLAG_16(res);
12138 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12139 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12140 (mc68kcpu)->c_flag = CFLAG_16(res);
12141 }
12142
12143
12144 static void m68k_op_cmpi_16_ix(m68000_base_device* mc68kcpu)
12145 {
12146 uint32_t src = OPER_I_16(mc68kcpu);
12147 uint32_t dst = OPER_AY_IX_16(mc68kcpu);
12148 uint32_t res = dst - src;
12149
12150 (mc68kcpu)->n_flag = NFLAG_16(res);
12151 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12152 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12153 (mc68kcpu)->c_flag = CFLAG_16(res);
12154 }
12155
12156
12157 static void m68k_op_cmpi_16_aw(m68000_base_device* mc68kcpu)
12158 {
12159 uint32_t src = OPER_I_16(mc68kcpu);
12160 uint32_t dst = OPER_AW_16(mc68kcpu);
12161 uint32_t res = dst - src;
12162
12163 (mc68kcpu)->n_flag = NFLAG_16(res);
12164 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12165 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12166 (mc68kcpu)->c_flag = CFLAG_16(res);
12167 }
12168
12169
12170 static void m68k_op_cmpi_16_al(m68000_base_device* mc68kcpu)
12171 {
12172 uint32_t src = OPER_I_16(mc68kcpu);
12173 uint32_t dst = OPER_AL_16(mc68kcpu);
12174 uint32_t res = dst - src;
12175
12176 (mc68kcpu)->n_flag = NFLAG_16(res);
12177 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12178 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12179 (mc68kcpu)->c_flag = CFLAG_16(res);
12180 }
12181
12182
12183 static void m68k_op_cmpi_16_pcdi(m68000_base_device* mc68kcpu)
12184 {
12185 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12186 {
12187 uint32_t src = OPER_I_16(mc68kcpu);
12188 uint32_t dst = OPER_PCDI_16(mc68kcpu);
12189 uint32_t res = dst - src;
12190
12191 (mc68kcpu)->n_flag = NFLAG_16(res);
12192 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12193 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12194 (mc68kcpu)->c_flag = CFLAG_16(res);
12195 return;
12196 }
12197 m68ki_exception_illegal(mc68kcpu);
12198 }
12199
12200
12201 static void m68k_op_cmpi_16_pcix(m68000_base_device* mc68kcpu)
12202 {
12203 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12204 {
12205 uint32_t src = OPER_I_16(mc68kcpu);
12206 uint32_t dst = OPER_PCIX_16(mc68kcpu);
12207 uint32_t res = dst - src;
12208
12209 (mc68kcpu)->n_flag = NFLAG_16(res);
12210 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12211 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12212 (mc68kcpu)->c_flag = CFLAG_16(res);
12213 return;
12214 }
12215 m68ki_exception_illegal(mc68kcpu);
12216 }
12217
12218
12219 static void m68k_op_cmpi_32_d(m68000_base_device* mc68kcpu)
12220 {
12221 uint32_t src = OPER_I_32(mc68kcpu);
12222 uint32_t dst = DY(mc68kcpu);
12223 uint32_t res = dst - src;
12224
12225 /* if (!(mc68kcpu)->cmpild_instr_callback.isnull())
12226 ((mc68kcpu)->cmpild_instr_callback)(*(mc68kcpu)->program, (mc68kcpu)->ir & 7, src, 0xffffffff);*/
12227
12228 (mc68kcpu)->n_flag = NFLAG_32(res);
12229 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12230 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12231 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12232 }
12233
12234
12235 static void m68k_op_cmpi_32_ai(m68000_base_device* mc68kcpu)
12236 {
12237 uint32_t src = OPER_I_32(mc68kcpu);
12238 uint32_t dst = OPER_AY_AI_32(mc68kcpu);
12239 uint32_t res = dst - src;
12240
12241 (mc68kcpu)->n_flag = NFLAG_32(res);
12242 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12243 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12244 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12245 }
12246
12247
12248 static void m68k_op_cmpi_32_pi(m68000_base_device* mc68kcpu)
12249 {
12250 uint32_t src = OPER_I_32(mc68kcpu);
12251 uint32_t dst = OPER_AY_PI_32(mc68kcpu);
12252 uint32_t res = dst - src;
12253
12254 (mc68kcpu)->n_flag = NFLAG_32(res);
12255 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12256 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12257 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12258 }
12259
12260
12261 static void m68k_op_cmpi_32_pd(m68000_base_device* mc68kcpu)
12262 {
12263 uint32_t src = OPER_I_32(mc68kcpu);
12264 uint32_t dst = OPER_AY_PD_32(mc68kcpu);
12265 uint32_t res = dst - src;
12266
12267 (mc68kcpu)->n_flag = NFLAG_32(res);
12268 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12269 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12270 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12271 }
12272
12273
12274 static void m68k_op_cmpi_32_di(m68000_base_device* mc68kcpu)
12275 {
12276 uint32_t src = OPER_I_32(mc68kcpu);
12277 uint32_t dst = OPER_AY_DI_32(mc68kcpu);
12278 uint32_t res = dst - src;
12279
12280 (mc68kcpu)->n_flag = NFLAG_32(res);
12281 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12282 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12283 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12284 }
12285
12286
12287 static void m68k_op_cmpi_32_ix(m68000_base_device* mc68kcpu)
12288 {
12289 uint32_t src = OPER_I_32(mc68kcpu);
12290 uint32_t dst = OPER_AY_IX_32(mc68kcpu);
12291 uint32_t res = dst - src;
12292
12293 (mc68kcpu)->n_flag = NFLAG_32(res);
12294 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12295 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12296 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12297 }
12298
12299
12300 static void m68k_op_cmpi_32_aw(m68000_base_device* mc68kcpu)
12301 {
12302 uint32_t src = OPER_I_32(mc68kcpu);
12303 uint32_t dst = OPER_AW_32(mc68kcpu);
12304 uint32_t res = dst - src;
12305
12306 (mc68kcpu)->n_flag = NFLAG_32(res);
12307 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12308 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12309 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12310 }
12311
12312
12313 static void m68k_op_cmpi_32_al(m68000_base_device* mc68kcpu)
12314 {
12315 uint32_t src = OPER_I_32(mc68kcpu);
12316 uint32_t dst = OPER_AL_32(mc68kcpu);
12317 uint32_t res = dst - src;
12318
12319 (mc68kcpu)->n_flag = NFLAG_32(res);
12320 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12321 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12322 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12323 }
12324
12325
12326 static void m68k_op_cmpi_32_pcdi(m68000_base_device* mc68kcpu)
12327 {
12328 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12329 {
12330 uint32_t src = OPER_I_32(mc68kcpu);
12331 uint32_t dst = OPER_PCDI_32(mc68kcpu);
12332 uint32_t res = dst - src;
12333
12334 (mc68kcpu)->n_flag = NFLAG_32(res);
12335 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12336 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12337 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12338 return;
12339 }
12340 m68ki_exception_illegal(mc68kcpu);
12341 }
12342
12343
12344 static void m68k_op_cmpi_32_pcix(m68000_base_device* mc68kcpu)
12345 {
12346 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12347 {
12348 uint32_t src = OPER_I_32(mc68kcpu);
12349 uint32_t dst = OPER_PCIX_32(mc68kcpu);
12350 uint32_t res = dst - src;
12351
12352 (mc68kcpu)->n_flag = NFLAG_32(res);
12353 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12354 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12355 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12356 return;
12357 }
12358 m68ki_exception_illegal(mc68kcpu);
12359 }
12360
12361
12362 static void m68k_op_cmpm_8_ax7(m68000_base_device* mc68kcpu)
12363 {
12364 uint32_t src = OPER_AY_PI_8(mc68kcpu);
12365 uint32_t dst = OPER_A7_PI_8(mc68kcpu);
12366 uint32_t res = dst - src;
12367
12368 (mc68kcpu)->n_flag = NFLAG_8(res);
12369 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12370 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12371 (mc68kcpu)->c_flag = CFLAG_8(res);
12372 }
12373
12374
12375 static void m68k_op_cmpm_8_ay7(m68000_base_device* mc68kcpu)
12376 {
12377 uint32_t src = OPER_A7_PI_8(mc68kcpu);
12378 uint32_t dst = OPER_AX_PI_8(mc68kcpu);
12379 uint32_t res = dst - src;
12380
12381 (mc68kcpu)->n_flag = NFLAG_8(res);
12382 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12383 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12384 (mc68kcpu)->c_flag = CFLAG_8(res);
12385 }
12386
12387
12388 static void m68k_op_cmpm_8_axy7(m68000_base_device* mc68kcpu)
12389 {
12390 uint32_t src = OPER_A7_PI_8(mc68kcpu);
12391 uint32_t dst = OPER_A7_PI_8(mc68kcpu);
12392 uint32_t res = dst - src;
12393
12394 (mc68kcpu)->n_flag = NFLAG_8(res);
12395 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12396 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12397 (mc68kcpu)->c_flag = CFLAG_8(res);
12398 }
12399
12400
12401 static void m68k_op_cmpm_8(m68000_base_device* mc68kcpu)
12402 {
12403 uint32_t src = OPER_AY_PI_8(mc68kcpu);
12404 uint32_t dst = OPER_AX_PI_8(mc68kcpu);
12405 uint32_t res = dst - src;
12406
12407 (mc68kcpu)->n_flag = NFLAG_8(res);
12408 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
12409 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
12410 (mc68kcpu)->c_flag = CFLAG_8(res);
12411 }
12412
12413
12414 static void m68k_op_cmpm_16(m68000_base_device* mc68kcpu)
12415 {
12416 uint32_t src = OPER_AY_PI_16(mc68kcpu);
12417 uint32_t dst = OPER_AX_PI_16(mc68kcpu);
12418 uint32_t res = dst - src;
12419
12420 (mc68kcpu)->n_flag = NFLAG_16(res);
12421 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
12422 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
12423 (mc68kcpu)->c_flag = CFLAG_16(res);
12424 }
12425
12426
12427 static void m68k_op_cmpm_32(m68000_base_device* mc68kcpu)
12428 {
12429 uint32_t src = OPER_AY_PI_32(mc68kcpu);
12430 uint32_t dst = OPER_AX_PI_32(mc68kcpu);
12431 uint32_t res = dst - src;
12432
12433 (mc68kcpu)->n_flag = NFLAG_32(res);
12434 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
12435 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
12436 (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
12437 }
12438
12439
12440 static void m68k_op_cpbcc_32(m68000_base_device* mc68kcpu)
12441 {
12442 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12443 {
12444 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cpbcc)\n",
12445 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
12446 return;
12447 }*/
12448 m68ki_exception_1111(mc68kcpu);
12449 }
12450
12451
12452 static void m68k_op_cpdbcc_32(m68000_base_device* mc68kcpu)
12453 {
12454 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12455 {
12456 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cpdbcc)\n",
12457 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
12458 return;
12459 }*/
12460 m68ki_exception_1111(mc68kcpu);
12461 }
12462
12463
12464 static void m68k_op_cpgen_32(m68000_base_device* mc68kcpu)
12465 {
12466 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type) && (mc68kcpu->get_fpu_enable() || mc68kcpu->has_pmmu))
12467 {
12468 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cpgen)\n",
12469 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
12470 return;
12471 }*/
12472 m68ki_exception_1111(mc68kcpu);
12473 }
12474
12475
12476 static void m68k_op_cpscc_32(m68000_base_device* mc68kcpu)
12477 {
12478 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12479 {
12480 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cpscc)\n",
12481 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
12482 return;
12483 }*/
12484 m68ki_exception_1111(mc68kcpu);
12485 }
12486
12487
12488 static void m68k_op_cptrapcc_32(m68000_base_device* mc68kcpu)
12489 {
12490 /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
12491 {
12492 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cptrapcc)\n",
12493 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
12494 return;
12495 }*/
12496 m68ki_exception_1111(mc68kcpu);
12497 }
12498
12499
12500 static void m68k_op_ftrapcc_32(m68000_base_device* mc68kcpu)
12501 {
12502 /* if((mc68kcpu)->get_fpu_enable())
12503 {
12504 m68881_ftrap(mc68kcpu);
12505 return;
12506 }*/
12507 m68ki_exception_1111(mc68kcpu);
12508 }
12509
12510
12511 static void m68k_op_dbt_16(m68000_base_device* mc68kcpu)
12512 {
12513 REG_PC(mc68kcpu) += 2;
12514 }
12515
12516
12517 static void m68k_op_dbf_16(m68000_base_device* mc68kcpu)
12518 {
12519 uint32_t* r_dst = &DY(mc68kcpu);
12520 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12521
12522 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12523 if(res != 0xffff)
12524 {
12525 uint32_t offset = OPER_I_16(mc68kcpu);
12526 REG_PC(mc68kcpu) -= 2;
12527 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12528 m68ki_branch_16((mc68kcpu), offset);
12529 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12530 return;
12531 }
12532 REG_PC(mc68kcpu) += 2;
12533 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12534 }
12535
12536
12537 static void m68k_op_dbhi_16(m68000_base_device* mc68kcpu)
12538 {
12539 if(COND_NOT_HI(mc68kcpu))
12540 {
12541 uint32_t* r_dst = &DY(mc68kcpu);
12542 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12543
12544 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12545 if(res != 0xffff)
12546 {
12547 uint32_t offset = OPER_I_16(mc68kcpu);
12548 REG_PC(mc68kcpu) -= 2;
12549 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12550 m68ki_branch_16((mc68kcpu), offset);
12551 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12552 return;
12553 }
12554 REG_PC(mc68kcpu) += 2;
12555 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12556 return;
12557 }
12558 REG_PC(mc68kcpu) += 2;
12559 }
12560
12561
12562 static void m68k_op_dbls_16(m68000_base_device* mc68kcpu)
12563 {
12564 if(COND_NOT_LS(mc68kcpu))
12565 {
12566 uint32_t* r_dst = &DY(mc68kcpu);
12567 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12568
12569 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12570 if(res != 0xffff)
12571 {
12572 uint32_t offset = OPER_I_16(mc68kcpu);
12573 REG_PC(mc68kcpu) -= 2;
12574 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12575 m68ki_branch_16((mc68kcpu), offset);
12576 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12577 return;
12578 }
12579 REG_PC(mc68kcpu) += 2;
12580 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12581 return;
12582 }
12583 REG_PC(mc68kcpu) += 2;
12584 }
12585
12586
12587 static void m68k_op_dbcc_16(m68000_base_device* mc68kcpu)
12588 {
12589 if(COND_NOT_CC(mc68kcpu))
12590 {
12591 uint32_t* r_dst = &DY(mc68kcpu);
12592 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12593
12594 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12595 if(res != 0xffff)
12596 {
12597 uint32_t offset = OPER_I_16(mc68kcpu);
12598 REG_PC(mc68kcpu) -= 2;
12599 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12600 m68ki_branch_16((mc68kcpu), offset);
12601 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12602 return;
12603 }
12604 REG_PC(mc68kcpu) += 2;
12605 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12606 return;
12607 }
12608 REG_PC(mc68kcpu) += 2;
12609 }
12610
12611
12612 static void m68k_op_dbcs_16(m68000_base_device* mc68kcpu)
12613 {
12614 if(COND_NOT_CS(mc68kcpu))
12615 {
12616 uint32_t* r_dst = &DY(mc68kcpu);
12617 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12618
12619 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12620 if(res != 0xffff)
12621 {
12622 uint32_t offset = OPER_I_16(mc68kcpu);
12623 REG_PC(mc68kcpu) -= 2;
12624 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12625 m68ki_branch_16((mc68kcpu), offset);
12626 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12627 return;
12628 }
12629 REG_PC(mc68kcpu) += 2;
12630 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12631 return;
12632 }
12633 REG_PC(mc68kcpu) += 2;
12634 }
12635
12636
12637 static void m68k_op_dbne_16(m68000_base_device* mc68kcpu)
12638 {
12639 if(COND_NOT_NE(mc68kcpu))
12640 {
12641 uint32_t* r_dst = &DY(mc68kcpu);
12642 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12643
12644 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12645 if(res != 0xffff)
12646 {
12647 uint32_t offset = OPER_I_16(mc68kcpu);
12648 REG_PC(mc68kcpu) -= 2;
12649 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12650 m68ki_branch_16((mc68kcpu), offset);
12651 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12652 return;
12653 }
12654 REG_PC(mc68kcpu) += 2;
12655 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12656 return;
12657 }
12658 REG_PC(mc68kcpu) += 2;
12659 }
12660
12661
12662 static void m68k_op_dbeq_16(m68000_base_device* mc68kcpu)
12663 {
12664 if(COND_NOT_EQ(mc68kcpu))
12665 {
12666 uint32_t* r_dst = &DY(mc68kcpu);
12667 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12668
12669 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12670 if(res != 0xffff)
12671 {
12672 uint32_t offset = OPER_I_16(mc68kcpu);
12673 REG_PC(mc68kcpu) -= 2;
12674 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12675 m68ki_branch_16((mc68kcpu), offset);
12676 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12677 return;
12678 }
12679 REG_PC(mc68kcpu) += 2;
12680 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12681 return;
12682 }
12683 REG_PC(mc68kcpu) += 2;
12684 }
12685
12686
12687 static void m68k_op_dbvc_16(m68000_base_device* mc68kcpu)
12688 {
12689 if(COND_NOT_VC(mc68kcpu))
12690 {
12691 uint32_t* r_dst = &DY(mc68kcpu);
12692 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12693
12694 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12695 if(res != 0xffff)
12696 {
12697 uint32_t offset = OPER_I_16(mc68kcpu);
12698 REG_PC(mc68kcpu) -= 2;
12699 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12700 m68ki_branch_16((mc68kcpu), offset);
12701 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12702 return;
12703 }
12704 REG_PC(mc68kcpu) += 2;
12705 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12706 return;
12707 }
12708 REG_PC(mc68kcpu) += 2;
12709 }
12710
12711
12712 static void m68k_op_dbvs_16(m68000_base_device* mc68kcpu)
12713 {
12714 if(COND_NOT_VS(mc68kcpu))
12715 {
12716 uint32_t* r_dst = &DY(mc68kcpu);
12717 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12718
12719 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12720 if(res != 0xffff)
12721 {
12722 uint32_t offset = OPER_I_16(mc68kcpu);
12723 REG_PC(mc68kcpu) -= 2;
12724 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12725 m68ki_branch_16((mc68kcpu), offset);
12726 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12727 return;
12728 }
12729 REG_PC(mc68kcpu) += 2;
12730 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12731 return;
12732 }
12733 REG_PC(mc68kcpu) += 2;
12734 }
12735
12736
12737 static void m68k_op_dbpl_16(m68000_base_device* mc68kcpu)
12738 {
12739 if(COND_NOT_PL(mc68kcpu))
12740 {
12741 uint32_t* r_dst = &DY(mc68kcpu);
12742 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12743
12744 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12745 if(res != 0xffff)
12746 {
12747 uint32_t offset = OPER_I_16(mc68kcpu);
12748 REG_PC(mc68kcpu) -= 2;
12749 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12750 m68ki_branch_16((mc68kcpu), offset);
12751 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12752 return;
12753 }
12754 REG_PC(mc68kcpu) += 2;
12755 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12756 return;
12757 }
12758 REG_PC(mc68kcpu) += 2;
12759 }
12760
12761
12762 static void m68k_op_dbmi_16(m68000_base_device* mc68kcpu)
12763 {
12764 if(COND_NOT_MI(mc68kcpu))
12765 {
12766 uint32_t* r_dst = &DY(mc68kcpu);
12767 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12768
12769 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12770 if(res != 0xffff)
12771 {
12772 uint32_t offset = OPER_I_16(mc68kcpu);
12773 REG_PC(mc68kcpu) -= 2;
12774 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12775 m68ki_branch_16((mc68kcpu), offset);
12776 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12777 return;
12778 }
12779 REG_PC(mc68kcpu) += 2;
12780 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12781 return;
12782 }
12783 REG_PC(mc68kcpu) += 2;
12784 }
12785
12786
12787 static void m68k_op_dbge_16(m68000_base_device* mc68kcpu)
12788 {
12789 if(COND_NOT_GE(mc68kcpu))
12790 {
12791 uint32_t* r_dst = &DY(mc68kcpu);
12792 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12793
12794 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12795 if(res != 0xffff)
12796 {
12797 uint32_t offset = OPER_I_16(mc68kcpu);
12798 REG_PC(mc68kcpu) -= 2;
12799 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12800 m68ki_branch_16((mc68kcpu), offset);
12801 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12802 return;
12803 }
12804 REG_PC(mc68kcpu) += 2;
12805 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12806 return;
12807 }
12808 REG_PC(mc68kcpu) += 2;
12809 }
12810
12811
12812 static void m68k_op_dblt_16(m68000_base_device* mc68kcpu)
12813 {
12814 if(COND_NOT_LT(mc68kcpu))
12815 {
12816 uint32_t* r_dst = &DY(mc68kcpu);
12817 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12818
12819 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12820 if(res != 0xffff)
12821 {
12822 uint32_t offset = OPER_I_16(mc68kcpu);
12823 REG_PC(mc68kcpu) -= 2;
12824 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12825 m68ki_branch_16((mc68kcpu), offset);
12826 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12827 return;
12828 }
12829 REG_PC(mc68kcpu) += 2;
12830 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12831 return;
12832 }
12833 REG_PC(mc68kcpu) += 2;
12834 }
12835
12836
12837 static void m68k_op_dbgt_16(m68000_base_device* mc68kcpu)
12838 {
12839 if(COND_NOT_GT(mc68kcpu))
12840 {
12841 uint32_t* r_dst = &DY(mc68kcpu);
12842 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12843
12844 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12845 if(res != 0xffff)
12846 {
12847 uint32_t offset = OPER_I_16(mc68kcpu);
12848 REG_PC(mc68kcpu) -= 2;
12849 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12850 m68ki_branch_16((mc68kcpu), offset);
12851 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12852 return;
12853 }
12854 REG_PC(mc68kcpu) += 2;
12855 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12856 return;
12857 }
12858 REG_PC(mc68kcpu) += 2;
12859 }
12860
12861
12862 static void m68k_op_dble_16(m68000_base_device* mc68kcpu)
12863 {
12864 if(COND_NOT_LE(mc68kcpu))
12865 {
12866 uint32_t* r_dst = &DY(mc68kcpu);
12867 uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1);
12868
12869 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
12870 if(res != 0xffff)
12871 {
12872 uint32_t offset = OPER_I_16(mc68kcpu);
12873 REG_PC(mc68kcpu) -= 2;
12874 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
12875 m68ki_branch_16((mc68kcpu), offset);
12876 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp;
12877 return;
12878 }
12879 REG_PC(mc68kcpu) += 2;
12880 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp;
12881 return;
12882 }
12883 REG_PC(mc68kcpu) += 2;
12884 }
12885
12886
12887 static void m68k_op_divs_16_d(m68000_base_device* mc68kcpu)
12888 {
12889 uint32_t* r_dst = &DX(mc68kcpu);
12890 int32_t src = MAKE_INT_16(DY(mc68kcpu));
12891 int32_t quotient;
12892 int32_t remainder;
12893
12894 if(src != 0)
12895 {
12896 if((uint32_t)*r_dst == 0x80000000 && src == -1)
12897 {
12898 (mc68kcpu)->not_z_flag = 0;
12899 (mc68kcpu)->n_flag = NFLAG_CLEAR;
12900 (mc68kcpu)->v_flag = VFLAG_CLEAR;
12901 (mc68kcpu)->c_flag = CFLAG_CLEAR;
12902 *r_dst = 0;
12903 return;
12904 }
12905
12906 quotient = MAKE_INT_32(*r_dst) / src;
12907 remainder = MAKE_INT_32(*r_dst) % src;
12908
12909 if(quotient == MAKE_INT_16(quotient))
12910 {
12911 (mc68kcpu)->not_z_flag = quotient;
12912 (mc68kcpu)->n_flag = NFLAG_16(quotient);
12913 (mc68kcpu)->v_flag = VFLAG_CLEAR;
12914 (mc68kcpu)->c_flag = CFLAG_CLEAR;
12915 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12916 return;
12917 }
12918 (mc68kcpu)->v_flag = VFLAG_SET;
12919 return;
12920 }
12921 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
12922 }
12923
12924
12925 static void m68k_op_divs_16_ai(m68000_base_device* mc68kcpu)
12926 {
12927 uint32_t* r_dst = &DX(mc68kcpu);
12928 int32_t src = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu));
12929 int32_t quotient;
12930 int32_t remainder;
12931
12932 if(src != 0)
12933 {
12934 if((uint32_t)*r_dst == 0x80000000 && src == -1)
12935 {
12936 (mc68kcpu)->not_z_flag = 0;
12937 (mc68kcpu)->n_flag = NFLAG_CLEAR;
12938 (mc68kcpu)->v_flag = VFLAG_CLEAR;
12939 (mc68kcpu)->c_flag = CFLAG_CLEAR;
12940 *r_dst = 0;
12941 return;
12942 }
12943
12944 quotient = MAKE_INT_32(*r_dst) / src;
12945 remainder = MAKE_INT_32(*r_dst) % src;
12946
12947 if(quotient == MAKE_INT_16(quotient))
12948 {
12949 (mc68kcpu)->not_z_flag = quotient;
12950 (mc68kcpu)->n_flag = NFLAG_16(quotient);
12951 (mc68kcpu)->v_flag = VFLAG_CLEAR;
12952 (mc68kcpu)->c_flag = CFLAG_CLEAR;
12953 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12954 return;
12955 }
12956 (mc68kcpu)->v_flag = VFLAG_SET;
12957 return;
12958 }
12959 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
12960 }
12961
12962
12963 static void m68k_op_divs_16_pi(m68000_base_device* mc68kcpu)
12964 {
12965 uint32_t* r_dst = &DX(mc68kcpu);
12966 int32_t src = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu));
12967 int32_t quotient;
12968 int32_t remainder;
12969
12970 if(src != 0)
12971 {
12972 if((uint32_t)*r_dst == 0x80000000 && src == -1)
12973 {
12974 (mc68kcpu)->not_z_flag = 0;
12975 (mc68kcpu)->n_flag = NFLAG_CLEAR;
12976 (mc68kcpu)->v_flag = VFLAG_CLEAR;
12977 (mc68kcpu)->c_flag = CFLAG_CLEAR;
12978 *r_dst = 0;
12979 return;
12980 }
12981
12982 quotient = MAKE_INT_32(*r_dst) / src;
12983 remainder = MAKE_INT_32(*r_dst) % src;
12984
12985 if(quotient == MAKE_INT_16(quotient))
12986 {
12987 (mc68kcpu)->not_z_flag = quotient;
12988 (mc68kcpu)->n_flag = NFLAG_16(quotient);
12989 (mc68kcpu)->v_flag = VFLAG_CLEAR;
12990 (mc68kcpu)->c_flag = CFLAG_CLEAR;
12991 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
12992 return;
12993 }
12994 (mc68kcpu)->v_flag = VFLAG_SET;
12995 return;
12996 }
12997 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
12998 }
12999
13000
13001 static void m68k_op_divs_16_pd(m68000_base_device* mc68kcpu)
13002 {
13003 uint32_t* r_dst = &DX(mc68kcpu);
13004 int32_t src = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu));
13005 int32_t quotient;
13006 int32_t remainder;
13007
13008 if(src != 0)
13009 {
13010 if((uint32_t)*r_dst == 0x80000000 && src == -1)
13011 {
13012 (mc68kcpu)->not_z_flag = 0;
13013 (mc68kcpu)->n_flag = NFLAG_CLEAR;
13014 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13015 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13016 *r_dst = 0;
13017 return;
13018 }
13019
13020 quotient = MAKE_INT_32(*r_dst) / src;
13021 remainder = MAKE_INT_32(*r_dst) % src;
13022
13023 if(quotient == MAKE_INT_16(quotient))
13024 {
13025 (mc68kcpu)->not_z_flag = quotient;
13026 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13027 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13028 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13029 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13030 return;
13031 }
13032 (mc68kcpu)->v_flag = VFLAG_SET;
13033 return;
13034 }
13035 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13036 }
13037
13038
13039 static void m68k_op_divs_16_di(m68000_base_device* mc68kcpu)
13040 {
13041 uint32_t* r_dst = &DX(mc68kcpu);
13042 int32_t src = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu));
13043 int32_t quotient;
13044 int32_t remainder;
13045
13046 if(src != 0)
13047 {
13048 if((uint32_t)*r_dst == 0x80000000 && src == -1)
13049 {
13050 (mc68kcpu)->not_z_flag = 0;
13051 (mc68kcpu)->n_flag = NFLAG_CLEAR;
13052 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13053 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13054 *r_dst = 0;
13055 return;
13056 }
13057
13058 quotient = MAKE_INT_32(*r_dst) / src;
13059 remainder = MAKE_INT_32(*r_dst) % src;
13060
13061 if(quotient == MAKE_INT_16(quotient))
13062 {
13063 (mc68kcpu)->not_z_flag = quotient;
13064 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13065 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13066 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13067 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13068 return;
13069 }
13070 (mc68kcpu)->v_flag = VFLAG_SET;
13071 return;
13072 }
13073 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13074 }
13075
13076
13077 static void m68k_op_divs_16_ix(m68000_base_device* mc68kcpu)
13078 {
13079 uint32_t* r_dst = &DX(mc68kcpu);
13080 int32_t src = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu));
13081 int32_t quotient;
13082 int32_t remainder;
13083
13084 if(src != 0)
13085 {
13086 if((uint32_t)*r_dst == 0x80000000 && src == -1)
13087 {
13088 (mc68kcpu)->not_z_flag = 0;
13089 (mc68kcpu)->n_flag = NFLAG_CLEAR;
13090 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13091 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13092 *r_dst = 0;
13093 return;
13094 }
13095
13096 quotient = MAKE_INT_32(*r_dst) / src;
13097 remainder = MAKE_INT_32(*r_dst) % src;
13098
13099 if(quotient == MAKE_INT_16(quotient))
13100 {
13101 (mc68kcpu)->not_z_flag = quotient;
13102 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13103 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13104 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13105 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13106 return;
13107 }
13108 (mc68kcpu)->v_flag = VFLAG_SET;
13109 return;
13110 }
13111 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13112 }
13113
13114
13115 static void m68k_op_divs_16_aw(m68000_base_device* mc68kcpu)
13116 {
13117 uint32_t* r_dst = &DX(mc68kcpu);
13118 int32_t src = MAKE_INT_16(OPER_AW_16(mc68kcpu));
13119 int32_t quotient;
13120 int32_t remainder;
13121
13122 if(src != 0)
13123 {
13124 if((uint32_t)*r_dst == 0x80000000 && src == -1)
13125 {
13126 (mc68kcpu)->not_z_flag = 0;
13127 (mc68kcpu)->n_flag = NFLAG_CLEAR;
13128 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13129 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13130 *r_dst = 0;
13131 return;
13132 }
13133
13134 quotient = MAKE_INT_32(*r_dst) / src;
13135 remainder = MAKE_INT_32(*r_dst) % src;
13136
13137 if(quotient == MAKE_INT_16(quotient))
13138 {
13139 (mc68kcpu)->not_z_flag = quotient;
13140 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13141 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13142 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13143 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13144 return;
13145 }
13146 (mc68kcpu)->v_flag = VFLAG_SET;
13147 return;
13148 }
13149 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13150 }
13151
13152
13153 static void m68k_op_divs_16_al(m68000_base_device* mc68kcpu)
13154 {
13155 uint32_t* r_dst = &DX(mc68kcpu);
13156 int32_t src = MAKE_INT_16(OPER_AL_16(mc68kcpu));
13157 int32_t quotient;
13158 int32_t remainder;
13159
13160 if(src != 0)
13161 {
13162 if((uint32_t)*r_dst == 0x80000000 && src == -1)
13163 {
13164 (mc68kcpu)->not_z_flag = 0;
13165 (mc68kcpu)->n_flag = NFLAG_CLEAR;
13166 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13167 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13168 *r_dst = 0;
13169 return;
13170 }
13171
13172 quotient = MAKE_INT_32(*r_dst) / src;
13173 remainder = MAKE_INT_32(*r_dst) % src;
13174
13175 if(quotient == MAKE_INT_16(quotient))
13176 {
13177 (mc68kcpu)->not_z_flag = quotient;
13178 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13179 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13180 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13181 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13182 return;
13183 }
13184 (mc68kcpu)->v_flag = VFLAG_SET;
13185 return;
13186 }
13187 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13188 }
13189
13190
13191 static void m68k_op_divs_16_pcdi(m68000_base_device* mc68kcpu)
13192 {
13193 uint32_t* r_dst = &DX(mc68kcpu);
13194 int32_t src = MAKE_INT_16(OPER_PCDI_16(mc68kcpu));
13195 int32_t quotient;
13196 int32_t remainder;
13197
13198 if(src != 0)
13199 {
13200 if((uint32_t)*r_dst == 0x80000000 && src == -1)
13201 {
13202 (mc68kcpu)->not_z_flag = 0;
13203 (mc68kcpu)->n_flag = NFLAG_CLEAR;
13204 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13205 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13206 *r_dst = 0;
13207 return;
13208 }
13209
13210 quotient = MAKE_INT_32(*r_dst) / src;
13211 remainder = MAKE_INT_32(*r_dst) % src;
13212
13213 if(quotient == MAKE_INT_16(quotient))
13214 {
13215 (mc68kcpu)->not_z_flag = quotient;
13216 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13217 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13218 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13219 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13220 return;
13221 }
13222 (mc68kcpu)->v_flag = VFLAG_SET;
13223 return;
13224 }
13225 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13226 }
13227
13228
13229 static void m68k_op_divs_16_pcix(m68000_base_device* mc68kcpu)
13230 {
13231 uint32_t* r_dst = &DX(mc68kcpu);
13232 int32_t src = MAKE_INT_16(OPER_PCIX_16(mc68kcpu));
13233 int32_t quotient;
13234 int32_t remainder;
13235
13236 if(src != 0)
13237 {
13238 if((uint32_t)*r_dst == 0x80000000 && src == -1)
13239 {
13240 (mc68kcpu)->not_z_flag = 0;
13241 (mc68kcpu)->n_flag = NFLAG_CLEAR;
13242 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13243 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13244 *r_dst = 0;
13245 return;
13246 }
13247
13248 quotient = MAKE_INT_32(*r_dst) / src;
13249 remainder = MAKE_INT_32(*r_dst) % src;
13250
13251 if(quotient == MAKE_INT_16(quotient))
13252 {
13253 (mc68kcpu)->not_z_flag = quotient;
13254 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13255 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13256 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13257 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13258 return;
13259 }
13260 (mc68kcpu)->v_flag = VFLAG_SET;
13261 return;
13262 }
13263 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13264 }
13265
13266
13267 static void m68k_op_divs_16_i(m68000_base_device* mc68kcpu)
13268 {
13269 uint32_t* r_dst = &DX(mc68kcpu);
13270 int32_t src = MAKE_INT_16(OPER_I_16(mc68kcpu));
13271 int32_t quotient;
13272 int32_t remainder;
13273
13274 if(src != 0)
13275 {
13276 if((uint32_t)*r_dst == 0x80000000 && src == -1)
13277 {
13278 (mc68kcpu)->not_z_flag = 0;
13279 (mc68kcpu)->n_flag = NFLAG_CLEAR;
13280 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13281 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13282 *r_dst = 0;
13283 return;
13284 }
13285
13286 quotient = MAKE_INT_32(*r_dst) / src;
13287 remainder = MAKE_INT_32(*r_dst) % src;
13288
13289 if(quotient == MAKE_INT_16(quotient))
13290 {
13291 (mc68kcpu)->not_z_flag = quotient;
13292 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13293 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13294 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13295 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13296 return;
13297 }
13298 (mc68kcpu)->v_flag = VFLAG_SET;
13299 return;
13300 }
13301 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13302 }
13303
13304
13305 static void m68k_op_divu_16_d(m68000_base_device* mc68kcpu)
13306 {
13307 uint32_t* r_dst = &DX(mc68kcpu);
13308 uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu));
13309
13310 if(src != 0)
13311 {
13312 uint32_t quotient = *r_dst / src;
13313 uint32_t remainder = *r_dst % src;
13314
13315 if(quotient < 0x10000)
13316 {
13317 (mc68kcpu)->not_z_flag = quotient;
13318 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13319 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13320 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13321 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13322 return;
13323 }
13324 (mc68kcpu)->v_flag = VFLAG_SET;
13325 return;
13326 }
13327 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13328 }
13329
13330
13331 static void m68k_op_divu_16_ai(m68000_base_device* mc68kcpu)
13332 {
13333 uint32_t* r_dst = &DX(mc68kcpu);
13334 uint32_t src = OPER_AY_AI_16(mc68kcpu);
13335
13336 if(src != 0)
13337 {
13338 uint32_t quotient = *r_dst / src;
13339 uint32_t remainder = *r_dst % src;
13340
13341 if(quotient < 0x10000)
13342 {
13343 (mc68kcpu)->not_z_flag = quotient;
13344 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13345 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13346 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13347 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13348 return;
13349 }
13350 (mc68kcpu)->v_flag = VFLAG_SET;
13351 return;
13352 }
13353 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13354 }
13355
13356
13357 static void m68k_op_divu_16_pi(m68000_base_device* mc68kcpu)
13358 {
13359 uint32_t* r_dst = &DX(mc68kcpu);
13360 uint32_t src = OPER_AY_PI_16(mc68kcpu);
13361
13362 if(src != 0)
13363 {
13364 uint32_t quotient = *r_dst / src;
13365 uint32_t remainder = *r_dst % src;
13366
13367 if(quotient < 0x10000)
13368 {
13369 (mc68kcpu)->not_z_flag = quotient;
13370 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13371 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13372 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13373 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13374 return;
13375 }
13376 (mc68kcpu)->v_flag = VFLAG_SET;
13377 return;
13378 }
13379 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13380 }
13381
13382
13383 static void m68k_op_divu_16_pd(m68000_base_device* mc68kcpu)
13384 {
13385 uint32_t* r_dst = &DX(mc68kcpu);
13386 uint32_t src = OPER_AY_PD_16(mc68kcpu);
13387
13388 if(src != 0)
13389 {
13390 uint32_t quotient = *r_dst / src;
13391 uint32_t remainder = *r_dst % src;
13392
13393 if(quotient < 0x10000)
13394 {
13395 (mc68kcpu)->not_z_flag = quotient;
13396 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13397 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13398 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13399 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13400 return;
13401 }
13402 (mc68kcpu)->v_flag = VFLAG_SET;
13403 return;
13404 }
13405 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13406 }
13407
13408
13409 static void m68k_op_divu_16_di(m68000_base_device* mc68kcpu)
13410 {
13411 uint32_t* r_dst = &DX(mc68kcpu);
13412 uint32_t src = OPER_AY_DI_16(mc68kcpu);
13413
13414 if(src != 0)
13415 {
13416 uint32_t quotient = *r_dst / src;
13417 uint32_t remainder = *r_dst % src;
13418
13419 if(quotient < 0x10000)
13420 {
13421 (mc68kcpu)->not_z_flag = quotient;
13422 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13423 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13424 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13425 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13426 return;
13427 }
13428 (mc68kcpu)->v_flag = VFLAG_SET;
13429 return;
13430 }
13431 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13432 }
13433
13434
13435 static void m68k_op_divu_16_ix(m68000_base_device* mc68kcpu)
13436 {
13437 uint32_t* r_dst = &DX(mc68kcpu);
13438 uint32_t src = OPER_AY_IX_16(mc68kcpu);
13439
13440 if(src != 0)
13441 {
13442 uint32_t quotient = *r_dst / src;
13443 uint32_t remainder = *r_dst % src;
13444
13445 if(quotient < 0x10000)
13446 {
13447 (mc68kcpu)->not_z_flag = quotient;
13448 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13449 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13450 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13451 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13452 return;
13453 }
13454 (mc68kcpu)->v_flag = VFLAG_SET;
13455 return;
13456 }
13457 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13458 }
13459
13460
13461 static void m68k_op_divu_16_aw(m68000_base_device* mc68kcpu)
13462 {
13463 uint32_t* r_dst = &DX(mc68kcpu);
13464 uint32_t src = OPER_AW_16(mc68kcpu);
13465
13466 if(src != 0)
13467 {
13468 uint32_t quotient = *r_dst / src;
13469 uint32_t remainder = *r_dst % src;
13470
13471 if(quotient < 0x10000)
13472 {
13473 (mc68kcpu)->not_z_flag = quotient;
13474 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13475 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13476 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13477 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13478 return;
13479 }
13480 (mc68kcpu)->v_flag = VFLAG_SET;
13481 return;
13482 }
13483 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13484 }
13485
13486
13487 static void m68k_op_divu_16_al(m68000_base_device* mc68kcpu)
13488 {
13489 uint32_t* r_dst = &DX(mc68kcpu);
13490 uint32_t src = OPER_AL_16(mc68kcpu);
13491
13492 if(src != 0)
13493 {
13494 uint32_t quotient = *r_dst / src;
13495 uint32_t remainder = *r_dst % src;
13496
13497 if(quotient < 0x10000)
13498 {
13499 (mc68kcpu)->not_z_flag = quotient;
13500 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13501 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13502 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13503 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13504 return;
13505 }
13506 (mc68kcpu)->v_flag = VFLAG_SET;
13507 return;
13508 }
13509 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13510 }
13511
13512
13513 static void m68k_op_divu_16_pcdi(m68000_base_device* mc68kcpu)
13514 {
13515 uint32_t* r_dst = &DX(mc68kcpu);
13516 uint32_t src = OPER_PCDI_16(mc68kcpu);
13517
13518 if(src != 0)
13519 {
13520 uint32_t quotient = *r_dst / src;
13521 uint32_t remainder = *r_dst % src;
13522
13523 if(quotient < 0x10000)
13524 {
13525 (mc68kcpu)->not_z_flag = quotient;
13526 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13527 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13528 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13529 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13530 return;
13531 }
13532 (mc68kcpu)->v_flag = VFLAG_SET;
13533 return;
13534 }
13535 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13536 }
13537
13538
13539 static void m68k_op_divu_16_pcix(m68000_base_device* mc68kcpu)
13540 {
13541 uint32_t* r_dst = &DX(mc68kcpu);
13542 uint32_t src = OPER_PCIX_16(mc68kcpu);
13543
13544 if(src != 0)
13545 {
13546 uint32_t quotient = *r_dst / src;
13547 uint32_t remainder = *r_dst % src;
13548
13549 if(quotient < 0x10000)
13550 {
13551 (mc68kcpu)->not_z_flag = quotient;
13552 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13553 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13554 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13555 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13556 return;
13557 }
13558 (mc68kcpu)->v_flag = VFLAG_SET;
13559 return;
13560 }
13561 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13562 }
13563
13564
13565 static void m68k_op_divu_16_i(m68000_base_device* mc68kcpu)
13566 {
13567 uint32_t* r_dst = &DX(mc68kcpu);
13568 uint32_t src = OPER_I_16(mc68kcpu);
13569
13570 if(src != 0)
13571 {
13572 uint32_t quotient = *r_dst / src;
13573 uint32_t remainder = *r_dst % src;
13574
13575 if(quotient < 0x10000)
13576 {
13577 (mc68kcpu)->not_z_flag = quotient;
13578 (mc68kcpu)->n_flag = NFLAG_16(quotient);
13579 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13580 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13581 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
13582 return;
13583 }
13584 (mc68kcpu)->v_flag = VFLAG_SET;
13585 return;
13586 }
13587 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13588 }
13589
13590
13591 static void m68k_op_divl_32_d(m68000_base_device* mc68kcpu)
13592 {
13593 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
13594 {
13595 uint32_t word2 = OPER_I_16(mc68kcpu);
13596 uint64_t divisor = DY(mc68kcpu);
13597 uint64_t dividend = 0;
13598 uint64_t quotient = 0;
13599 uint64_t remainder = 0;
13600
13601 if(divisor != 0)
13602 {
13603 if(BIT_A(word2)) /* 64 bit */
13604 {
13605 dividend = REG_D(mc68kcpu)[word2 & 7];
13606 dividend <<= 32;
13607 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
13608
13609 if(BIT_B(word2)) /* signed */
13610 {
13611 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
13612 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
13613 if((int64_t)quotient != (int64_t)((int32_t)quotient))
13614 {
13615 (mc68kcpu)->v_flag = VFLAG_SET;
13616 return;
13617 }
13618 }
13619 else /* unsigned */
13620 {
13621 quotient = dividend / divisor;
13622 if(quotient > 0xffffffff)
13623 {
13624 (mc68kcpu)->v_flag = VFLAG_SET;
13625 return;
13626 }
13627 remainder = dividend % divisor;
13628 }
13629 }
13630 else /* 32 bit */
13631 {
13632 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
13633 if(BIT_B(word2)) /* signed */
13634 {
13635 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
13636 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
13637 }
13638 else /* unsigned */
13639 {
13640 quotient = dividend / divisor;
13641 remainder = dividend % divisor;
13642 }
13643 }
13644
13645 REG_D(mc68kcpu)[word2 & 7] = remainder;
13646 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
13647
13648 (mc68kcpu)->n_flag = NFLAG_32(quotient);
13649 (mc68kcpu)->not_z_flag = quotient;
13650 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13651 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13652 return;
13653 }
13654 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13655 return;
13656 }
13657 m68ki_exception_illegal(mc68kcpu);
13658 }
13659
13660
13661 static void m68k_op_divl_32_ai(m68000_base_device* mc68kcpu)
13662 {
13663 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
13664 {
13665 uint32_t word2 = OPER_I_16(mc68kcpu);
13666 uint64_t divisor = OPER_AY_AI_32(mc68kcpu);
13667 uint64_t dividend = 0;
13668 uint64_t quotient = 0;
13669 uint64_t remainder = 0;
13670
13671 if(divisor != 0)
13672 {
13673 if(BIT_A(word2)) /* 64 bit */
13674 {
13675 dividend = REG_D(mc68kcpu)[word2 & 7];
13676 dividend <<= 32;
13677 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
13678
13679 if(BIT_B(word2)) /* signed */
13680 {
13681 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
13682 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
13683 if((int64_t)quotient != (int64_t)((int32_t)quotient))
13684 {
13685 (mc68kcpu)->v_flag = VFLAG_SET;
13686 return;
13687 }
13688 }
13689 else /* unsigned */
13690 {
13691 quotient = dividend / divisor;
13692 if(quotient > 0xffffffff)
13693 {
13694 (mc68kcpu)->v_flag = VFLAG_SET;
13695 return;
13696 }
13697 remainder = dividend % divisor;
13698 }
13699 }
13700 else /* 32 bit */
13701 {
13702 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
13703 if(BIT_B(word2)) /* signed */
13704 {
13705 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
13706 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
13707 }
13708 else /* unsigned */
13709 {
13710 quotient = dividend / divisor;
13711 remainder = dividend % divisor;
13712 }
13713 }
13714
13715 REG_D(mc68kcpu)[word2 & 7] = remainder;
13716 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
13717
13718 (mc68kcpu)->n_flag = NFLAG_32(quotient);
13719 (mc68kcpu)->not_z_flag = quotient;
13720 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13721 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13722 return;
13723 }
13724 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13725 return;
13726 }
13727 m68ki_exception_illegal(mc68kcpu);
13728 }
13729
13730
13731 static void m68k_op_divl_32_pi(m68000_base_device* mc68kcpu)
13732 {
13733 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
13734 {
13735 uint32_t word2 = OPER_I_16(mc68kcpu);
13736 uint64_t divisor = OPER_AY_PI_32(mc68kcpu);
13737 uint64_t dividend = 0;
13738 uint64_t quotient = 0;
13739 uint64_t remainder = 0;
13740
13741 if(divisor != 0)
13742 {
13743 if(BIT_A(word2)) /* 64 bit */
13744 {
13745 dividend = REG_D(mc68kcpu)[word2 & 7];
13746 dividend <<= 32;
13747 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
13748
13749 if(BIT_B(word2)) /* signed */
13750 {
13751 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
13752 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
13753 if((int64_t)quotient != (int64_t)((int32_t)quotient))
13754 {
13755 (mc68kcpu)->v_flag = VFLAG_SET;
13756 return;
13757 }
13758 }
13759 else /* unsigned */
13760 {
13761 quotient = dividend / divisor;
13762 if(quotient > 0xffffffff)
13763 {
13764 (mc68kcpu)->v_flag = VFLAG_SET;
13765 return;
13766 }
13767 remainder = dividend % divisor;
13768 }
13769 }
13770 else /* 32 bit */
13771 {
13772 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
13773 if(BIT_B(word2)) /* signed */
13774 {
13775 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
13776 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
13777 }
13778 else /* unsigned */
13779 {
13780 quotient = dividend / divisor;
13781 remainder = dividend % divisor;
13782 }
13783 }
13784
13785 REG_D(mc68kcpu)[word2 & 7] = remainder;
13786 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
13787
13788 (mc68kcpu)->n_flag = NFLAG_32(quotient);
13789 (mc68kcpu)->not_z_flag = quotient;
13790 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13791 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13792 return;
13793 }
13794 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13795 return;
13796 }
13797 m68ki_exception_illegal(mc68kcpu);
13798 }
13799
13800
13801 static void m68k_op_divl_32_pd(m68000_base_device* mc68kcpu)
13802 {
13803 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
13804 {
13805 uint32_t word2 = OPER_I_16(mc68kcpu);
13806 uint64_t divisor = OPER_AY_PD_32(mc68kcpu);
13807 uint64_t dividend = 0;
13808 uint64_t quotient = 0;
13809 uint64_t remainder = 0;
13810
13811 if(divisor != 0)
13812 {
13813 if(BIT_A(word2)) /* 64 bit */
13814 {
13815 dividend = REG_D(mc68kcpu)[word2 & 7];
13816 dividend <<= 32;
13817 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
13818
13819 if(BIT_B(word2)) /* signed */
13820 {
13821 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
13822 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
13823 if((int64_t)quotient != (int64_t)((int32_t)quotient))
13824 {
13825 (mc68kcpu)->v_flag = VFLAG_SET;
13826 return;
13827 }
13828 }
13829 else /* unsigned */
13830 {
13831 quotient = dividend / divisor;
13832 if(quotient > 0xffffffff)
13833 {
13834 (mc68kcpu)->v_flag = VFLAG_SET;
13835 return;
13836 }
13837 remainder = dividend % divisor;
13838 }
13839 }
13840 else /* 32 bit */
13841 {
13842 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
13843 if(BIT_B(word2)) /* signed */
13844 {
13845 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
13846 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
13847 }
13848 else /* unsigned */
13849 {
13850 quotient = dividend / divisor;
13851 remainder = dividend % divisor;
13852 }
13853 }
13854
13855 REG_D(mc68kcpu)[word2 & 7] = remainder;
13856 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
13857
13858 (mc68kcpu)->n_flag = NFLAG_32(quotient);
13859 (mc68kcpu)->not_z_flag = quotient;
13860 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13861 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13862 return;
13863 }
13864 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13865 return;
13866 }
13867 m68ki_exception_illegal(mc68kcpu);
13868 }
13869
13870
13871 static void m68k_op_divl_32_di(m68000_base_device* mc68kcpu)
13872 {
13873 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
13874 {
13875 uint32_t word2 = OPER_I_16(mc68kcpu);
13876 uint64_t divisor = OPER_AY_DI_32(mc68kcpu);
13877 uint64_t dividend = 0;
13878 uint64_t quotient = 0;
13879 uint64_t remainder = 0;
13880
13881 if(divisor != 0)
13882 {
13883 if(BIT_A(word2)) /* 64 bit */
13884 {
13885 dividend = REG_D(mc68kcpu)[word2 & 7];
13886 dividend <<= 32;
13887 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
13888
13889 if(BIT_B(word2)) /* signed */
13890 {
13891 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
13892 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
13893 if((int64_t)quotient != (int64_t)((int32_t)quotient))
13894 {
13895 (mc68kcpu)->v_flag = VFLAG_SET;
13896 return;
13897 }
13898 }
13899 else /* unsigned */
13900 {
13901 quotient = dividend / divisor;
13902 if(quotient > 0xffffffff)
13903 {
13904 (mc68kcpu)->v_flag = VFLAG_SET;
13905 return;
13906 }
13907 remainder = dividend % divisor;
13908 }
13909 }
13910 else /* 32 bit */
13911 {
13912 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
13913 if(BIT_B(word2)) /* signed */
13914 {
13915 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
13916 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
13917 }
13918 else /* unsigned */
13919 {
13920 quotient = dividend / divisor;
13921 remainder = dividend % divisor;
13922 }
13923 }
13924
13925 REG_D(mc68kcpu)[word2 & 7] = remainder;
13926 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
13927
13928 (mc68kcpu)->n_flag = NFLAG_32(quotient);
13929 (mc68kcpu)->not_z_flag = quotient;
13930 (mc68kcpu)->v_flag = VFLAG_CLEAR;
13931 (mc68kcpu)->c_flag = CFLAG_CLEAR;
13932 return;
13933 }
13934 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
13935 return;
13936 }
13937 m68ki_exception_illegal(mc68kcpu);
13938 }
13939
13940
13941 static void m68k_op_divl_32_ix(m68000_base_device* mc68kcpu)
13942 {
13943 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
13944 {
13945 uint32_t word2 = OPER_I_16(mc68kcpu);
13946 uint64_t divisor = OPER_AY_IX_32(mc68kcpu);
13947 uint64_t dividend = 0;
13948 uint64_t quotient = 0;
13949 uint64_t remainder = 0;
13950
13951 if(divisor != 0)
13952 {
13953 if(BIT_A(word2)) /* 64 bit */
13954 {
13955 dividend = REG_D(mc68kcpu)[word2 & 7];
13956 dividend <<= 32;
13957 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
13958
13959 if(BIT_B(word2)) /* signed */
13960 {
13961 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
13962 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
13963 if((int64_t)quotient != (int64_t)((int32_t)quotient))
13964 {
13965 (mc68kcpu)->v_flag = VFLAG_SET;
13966 return;
13967 }
13968 }
13969 else /* unsigned */
13970 {
13971 quotient = dividend / divisor;
13972 if(quotient > 0xffffffff)
13973 {
13974 (mc68kcpu)->v_flag = VFLAG_SET;
13975 return;
13976 }
13977 remainder = dividend % divisor;
13978 }
13979 }
13980 else /* 32 bit */
13981 {
13982 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
13983 if(BIT_B(word2)) /* signed */
13984 {
13985 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
13986 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
13987 }
13988 else /* unsigned */
13989 {
13990 quotient = dividend / divisor;
13991 remainder = dividend % divisor;
13992 }
13993 }
13994
13995 REG_D(mc68kcpu)[word2 & 7] = remainder;
13996 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
13997
13998 (mc68kcpu)->n_flag = NFLAG_32(quotient);
13999 (mc68kcpu)->not_z_flag = quotient;
14000 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14001 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14002 return;
14003 }
14004 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
14005 return;
14006 }
14007 m68ki_exception_illegal(mc68kcpu);
14008 }
14009
14010
14011 static void m68k_op_divl_32_aw(m68000_base_device* mc68kcpu)
14012 {
14013 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
14014 {
14015 uint32_t word2 = OPER_I_16(mc68kcpu);
14016 uint64_t divisor = OPER_AW_32(mc68kcpu);
14017 uint64_t dividend = 0;
14018 uint64_t quotient = 0;
14019 uint64_t remainder = 0;
14020
14021 if(divisor != 0)
14022 {
14023 if(BIT_A(word2)) /* 64 bit */
14024 {
14025 dividend = REG_D(mc68kcpu)[word2 & 7];
14026 dividend <<= 32;
14027 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
14028
14029 if(BIT_B(word2)) /* signed */
14030 {
14031 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
14032 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
14033 if((int64_t)quotient != (int64_t)((int32_t)quotient))
14034 {
14035 (mc68kcpu)->v_flag = VFLAG_SET;
14036 return;
14037 }
14038 }
14039 else /* unsigned */
14040 {
14041 quotient = dividend / divisor;
14042 if(quotient > 0xffffffff)
14043 {
14044 (mc68kcpu)->v_flag = VFLAG_SET;
14045 return;
14046 }
14047 remainder = dividend % divisor;
14048 }
14049 }
14050 else /* 32 bit */
14051 {
14052 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
14053 if(BIT_B(word2)) /* signed */
14054 {
14055 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
14056 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
14057 }
14058 else /* unsigned */
14059 {
14060 quotient = dividend / divisor;
14061 remainder = dividend % divisor;
14062 }
14063 }
14064
14065 REG_D(mc68kcpu)[word2 & 7] = remainder;
14066 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
14067
14068 (mc68kcpu)->n_flag = NFLAG_32(quotient);
14069 (mc68kcpu)->not_z_flag = quotient;
14070 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14071 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14072 return;
14073 }
14074 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
14075 return;
14076 }
14077 m68ki_exception_illegal(mc68kcpu);
14078 }
14079
14080
14081 static void m68k_op_divl_32_al(m68000_base_device* mc68kcpu)
14082 {
14083 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
14084 {
14085 uint32_t word2 = OPER_I_16(mc68kcpu);
14086 uint64_t divisor = OPER_AL_32(mc68kcpu);
14087 uint64_t dividend = 0;
14088 uint64_t quotient = 0;
14089 uint64_t remainder = 0;
14090
14091 if(divisor != 0)
14092 {
14093 if(BIT_A(word2)) /* 64 bit */
14094 {
14095 dividend = REG_D(mc68kcpu)[word2 & 7];
14096 dividend <<= 32;
14097 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
14098
14099 if(BIT_B(word2)) /* signed */
14100 {
14101 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
14102 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
14103 if((int64_t)quotient != (int64_t)((int32_t)quotient))
14104 {
14105 (mc68kcpu)->v_flag = VFLAG_SET;
14106 return;
14107 }
14108 }
14109 else /* unsigned */
14110 {
14111 quotient = dividend / divisor;
14112 if(quotient > 0xffffffff)
14113 {
14114 (mc68kcpu)->v_flag = VFLAG_SET;
14115 return;
14116 }
14117 remainder = dividend % divisor;
14118 }
14119 }
14120 else /* 32 bit */
14121 {
14122 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
14123 if(BIT_B(word2)) /* signed */
14124 {
14125 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
14126 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
14127 }
14128 else /* unsigned */
14129 {
14130 quotient = dividend / divisor;
14131 remainder = dividend % divisor;
14132 }
14133 }
14134
14135 REG_D(mc68kcpu)[word2 & 7] = remainder;
14136 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
14137
14138 (mc68kcpu)->n_flag = NFLAG_32(quotient);
14139 (mc68kcpu)->not_z_flag = quotient;
14140 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14141 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14142 return;
14143 }
14144 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
14145 return;
14146 }
14147 m68ki_exception_illegal(mc68kcpu);
14148 }
14149
14150
14151 static void m68k_op_divl_32_pcdi(m68000_base_device* mc68kcpu)
14152 {
14153 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
14154 {
14155 uint32_t word2 = OPER_I_16(mc68kcpu);
14156 uint64_t divisor = OPER_PCDI_32(mc68kcpu);
14157 uint64_t dividend = 0;
14158 uint64_t quotient = 0;
14159 uint64_t remainder = 0;
14160
14161 if(divisor != 0)
14162 {
14163 if(BIT_A(word2)) /* 64 bit */
14164 {
14165 dividend = REG_D(mc68kcpu)[word2 & 7];
14166 dividend <<= 32;
14167 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
14168
14169 if(BIT_B(word2)) /* signed */
14170 {
14171 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
14172 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
14173 if((int64_t)quotient != (int64_t)((int32_t)quotient))
14174 {
14175 (mc68kcpu)->v_flag = VFLAG_SET;
14176 return;
14177 }
14178 }
14179 else /* unsigned */
14180 {
14181 quotient = dividend / divisor;
14182 if(quotient > 0xffffffff)
14183 {
14184 (mc68kcpu)->v_flag = VFLAG_SET;
14185 return;
14186 }
14187 remainder = dividend % divisor;
14188 }
14189 }
14190 else /* 32 bit */
14191 {
14192 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
14193 if(BIT_B(word2)) /* signed */
14194 {
14195 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
14196 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
14197 }
14198 else /* unsigned */
14199 {
14200 quotient = dividend / divisor;
14201 remainder = dividend % divisor;
14202 }
14203 }
14204
14205 REG_D(mc68kcpu)[word2 & 7] = remainder;
14206 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
14207
14208 (mc68kcpu)->n_flag = NFLAG_32(quotient);
14209 (mc68kcpu)->not_z_flag = quotient;
14210 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14211 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14212 return;
14213 }
14214 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
14215 return;
14216 }
14217 m68ki_exception_illegal(mc68kcpu);
14218 }
14219
14220
14221 static void m68k_op_divl_32_pcix(m68000_base_device* mc68kcpu)
14222 {
14223 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
14224 {
14225 uint32_t word2 = OPER_I_16(mc68kcpu);
14226 uint64_t divisor = OPER_PCIX_32(mc68kcpu);
14227 uint64_t dividend = 0;
14228 uint64_t quotient = 0;
14229 uint64_t remainder = 0;
14230
14231 if(divisor != 0)
14232 {
14233 if(BIT_A(word2)) /* 64 bit */
14234 {
14235 dividend = REG_D(mc68kcpu)[word2 & 7];
14236 dividend <<= 32;
14237 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
14238
14239 if(BIT_B(word2)) /* signed */
14240 {
14241 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
14242 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
14243 if((int64_t)quotient != (int64_t)((int32_t)quotient))
14244 {
14245 (mc68kcpu)->v_flag = VFLAG_SET;
14246 return;
14247 }
14248 }
14249 else /* unsigned */
14250 {
14251 quotient = dividend / divisor;
14252 if(quotient > 0xffffffff)
14253 {
14254 (mc68kcpu)->v_flag = VFLAG_SET;
14255 return;
14256 }
14257 remainder = dividend % divisor;
14258 }
14259 }
14260 else /* 32 bit */
14261 {
14262 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
14263 if(BIT_B(word2)) /* signed */
14264 {
14265 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
14266 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
14267 }
14268 else /* unsigned */
14269 {
14270 quotient = dividend / divisor;
14271 remainder = dividend % divisor;
14272 }
14273 }
14274
14275 REG_D(mc68kcpu)[word2 & 7] = remainder;
14276 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
14277
14278 (mc68kcpu)->n_flag = NFLAG_32(quotient);
14279 (mc68kcpu)->not_z_flag = quotient;
14280 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14281 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14282 return;
14283 }
14284 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
14285 return;
14286 }
14287 m68ki_exception_illegal(mc68kcpu);
14288 }
14289
14290
14291 static void m68k_op_divl_32_i(m68000_base_device* mc68kcpu)
14292 {
14293 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
14294 {
14295 uint32_t word2 = OPER_I_16(mc68kcpu);
14296 uint64_t divisor = OPER_I_32(mc68kcpu);
14297 uint64_t dividend = 0;
14298 uint64_t quotient = 0;
14299 uint64_t remainder = 0;
14300
14301 if(divisor != 0)
14302 {
14303 if(BIT_A(word2)) /* 64 bit */
14304 {
14305 dividend = REG_D(mc68kcpu)[word2 & 7];
14306 dividend <<= 32;
14307 dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7];
14308
14309 if(BIT_B(word2)) /* signed */
14310 {
14311 quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor));
14312 remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor));
14313 if((int64_t)quotient != (int64_t)((int32_t)quotient))
14314 {
14315 (mc68kcpu)->v_flag = VFLAG_SET;
14316 return;
14317 }
14318 }
14319 else /* unsigned */
14320 {
14321 quotient = dividend / divisor;
14322 if(quotient > 0xffffffff)
14323 {
14324 (mc68kcpu)->v_flag = VFLAG_SET;
14325 return;
14326 }
14327 remainder = dividend % divisor;
14328 }
14329 }
14330 else /* 32 bit */
14331 {
14332 dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7];
14333 if(BIT_B(word2)) /* signed */
14334 {
14335 quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor));
14336 remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor));
14337 }
14338 else /* unsigned */
14339 {
14340 quotient = dividend / divisor;
14341 remainder = dividend % divisor;
14342 }
14343 }
14344
14345 REG_D(mc68kcpu)[word2 & 7] = remainder;
14346 REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient;
14347
14348 (mc68kcpu)->n_flag = NFLAG_32(quotient);
14349 (mc68kcpu)->not_z_flag = quotient;
14350 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14351 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14352 return;
14353 }
14354 m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE);
14355 return;
14356 }
14357 m68ki_exception_illegal(mc68kcpu);
14358 }
14359
14360
14361 static void m68k_op_eor_8_d(m68000_base_device* mc68kcpu)
14362 {
14363 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu) ^= MASK_OUT_ABOVE_8(DX(mc68kcpu)));
14364
14365 (mc68kcpu)->n_flag = NFLAG_8(res);
14366 (mc68kcpu)->not_z_flag = res;
14367 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14368 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14369 }
14370
14371
14372 static void m68k_op_eor_8_ai(m68000_base_device* mc68kcpu)
14373 {
14374 uint32_t ea = EA_AY_AI_8(mc68kcpu);
14375 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14376
14377 m68ki_write_8((mc68kcpu), ea, res);
14378
14379 (mc68kcpu)->n_flag = NFLAG_8(res);
14380 (mc68kcpu)->not_z_flag = res;
14381 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14382 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14383 }
14384
14385
14386 static void m68k_op_eor_8_pi(m68000_base_device* mc68kcpu)
14387 {
14388 uint32_t ea = EA_AY_PI_8(mc68kcpu);
14389 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14390
14391 m68ki_write_8((mc68kcpu), ea, res);
14392
14393 (mc68kcpu)->n_flag = NFLAG_8(res);
14394 (mc68kcpu)->not_z_flag = res;
14395 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14396 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14397 }
14398
14399
14400 static void m68k_op_eor_8_pi7(m68000_base_device* mc68kcpu)
14401 {
14402 uint32_t ea = EA_A7_PI_8(mc68kcpu);
14403 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14404
14405 m68ki_write_8((mc68kcpu), ea, res);
14406
14407 (mc68kcpu)->n_flag = NFLAG_8(res);
14408 (mc68kcpu)->not_z_flag = res;
14409 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14410 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14411 }
14412
14413
14414 static void m68k_op_eor_8_pd(m68000_base_device* mc68kcpu)
14415 {
14416 uint32_t ea = EA_AY_PD_8(mc68kcpu);
14417 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14418
14419 m68ki_write_8((mc68kcpu), ea, res);
14420
14421 (mc68kcpu)->n_flag = NFLAG_8(res);
14422 (mc68kcpu)->not_z_flag = res;
14423 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14424 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14425 }
14426
14427
14428 static void m68k_op_eor_8_pd7(m68000_base_device* mc68kcpu)
14429 {
14430 uint32_t ea = EA_A7_PD_8(mc68kcpu);
14431 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14432
14433 m68ki_write_8((mc68kcpu), ea, res);
14434
14435 (mc68kcpu)->n_flag = NFLAG_8(res);
14436 (mc68kcpu)->not_z_flag = res;
14437 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14438 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14439 }
14440
14441
14442 static void m68k_op_eor_8_di(m68000_base_device* mc68kcpu)
14443 {
14444 uint32_t ea = EA_AY_DI_8(mc68kcpu);
14445 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14446
14447 m68ki_write_8((mc68kcpu), ea, res);
14448
14449 (mc68kcpu)->n_flag = NFLAG_8(res);
14450 (mc68kcpu)->not_z_flag = res;
14451 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14452 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14453 }
14454
14455
14456 static void m68k_op_eor_8_ix(m68000_base_device* mc68kcpu)
14457 {
14458 uint32_t ea = EA_AY_IX_8(mc68kcpu);
14459 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14460
14461 m68ki_write_8((mc68kcpu), ea, res);
14462
14463 (mc68kcpu)->n_flag = NFLAG_8(res);
14464 (mc68kcpu)->not_z_flag = res;
14465 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14466 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14467 }
14468
14469
14470 static void m68k_op_eor_8_aw(m68000_base_device* mc68kcpu)
14471 {
14472 uint32_t ea = EA_AW_8(mc68kcpu);
14473 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14474
14475 m68ki_write_8((mc68kcpu), ea, res);
14476
14477 (mc68kcpu)->n_flag = NFLAG_8(res);
14478 (mc68kcpu)->not_z_flag = res;
14479 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14480 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14481 }
14482
14483
14484 static void m68k_op_eor_8_al(m68000_base_device* mc68kcpu)
14485 {
14486 uint32_t ea = EA_AL_8(mc68kcpu);
14487 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea));
14488
14489 m68ki_write_8((mc68kcpu), ea, res);
14490
14491 (mc68kcpu)->n_flag = NFLAG_8(res);
14492 (mc68kcpu)->not_z_flag = res;
14493 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14494 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14495 }
14496
14497
14498 static void m68k_op_eor_16_d(m68000_base_device* mc68kcpu)
14499 {
14500 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu) ^= MASK_OUT_ABOVE_16(DX(mc68kcpu)));
14501
14502 (mc68kcpu)->n_flag = NFLAG_16(res);
14503 (mc68kcpu)->not_z_flag = res;
14504 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14505 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14506 }
14507
14508
14509 static void m68k_op_eor_16_ai(m68000_base_device* mc68kcpu)
14510 {
14511 uint32_t ea = EA_AY_AI_16(mc68kcpu);
14512 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea));
14513
14514 m68ki_write_16((mc68kcpu), ea, res);
14515
14516 (mc68kcpu)->n_flag = NFLAG_16(res);
14517 (mc68kcpu)->not_z_flag = res;
14518 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14519 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14520 }
14521
14522
14523 static void m68k_op_eor_16_pi(m68000_base_device* mc68kcpu)
14524 {
14525 uint32_t ea = EA_AY_PI_16(mc68kcpu);
14526 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea));
14527
14528 m68ki_write_16((mc68kcpu), ea, res);
14529
14530 (mc68kcpu)->n_flag = NFLAG_16(res);
14531 (mc68kcpu)->not_z_flag = res;
14532 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14533 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14534 }
14535
14536
14537 static void m68k_op_eor_16_pd(m68000_base_device* mc68kcpu)
14538 {
14539 uint32_t ea = EA_AY_PD_16(mc68kcpu);
14540 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea));
14541
14542 m68ki_write_16((mc68kcpu), ea, res);
14543
14544 (mc68kcpu)->n_flag = NFLAG_16(res);
14545 (mc68kcpu)->not_z_flag = res;
14546 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14547 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14548 }
14549
14550
14551 static void m68k_op_eor_16_di(m68000_base_device* mc68kcpu)
14552 {
14553 uint32_t ea = EA_AY_DI_16(mc68kcpu);
14554 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea));
14555
14556 m68ki_write_16((mc68kcpu), ea, res);
14557
14558 (mc68kcpu)->n_flag = NFLAG_16(res);
14559 (mc68kcpu)->not_z_flag = res;
14560 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14561 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14562 }
14563
14564
14565 static void m68k_op_eor_16_ix(m68000_base_device* mc68kcpu)
14566 {
14567 uint32_t ea = EA_AY_IX_16(mc68kcpu);
14568 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea));
14569
14570 m68ki_write_16((mc68kcpu), ea, res);
14571
14572 (mc68kcpu)->n_flag = NFLAG_16(res);
14573 (mc68kcpu)->not_z_flag = res;
14574 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14575 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14576 }
14577
14578
14579 static void m68k_op_eor_16_aw(m68000_base_device* mc68kcpu)
14580 {
14581 uint32_t ea = EA_AW_16(mc68kcpu);
14582 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea));
14583
14584 m68ki_write_16((mc68kcpu), ea, res);
14585
14586 (mc68kcpu)->n_flag = NFLAG_16(res);
14587 (mc68kcpu)->not_z_flag = res;
14588 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14589 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14590 }
14591
14592
14593 static void m68k_op_eor_16_al(m68000_base_device* mc68kcpu)
14594 {
14595 uint32_t ea = EA_AL_16(mc68kcpu);
14596 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea));
14597
14598 m68ki_write_16((mc68kcpu), ea, res);
14599
14600 (mc68kcpu)->n_flag = NFLAG_16(res);
14601 (mc68kcpu)->not_z_flag = res;
14602 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14603 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14604 }
14605
14606
14607 static void m68k_op_eor_32_d(m68000_base_device* mc68kcpu)
14608 {
14609 uint32_t res = DY(mc68kcpu) ^= DX(mc68kcpu);
14610
14611 (mc68kcpu)->n_flag = NFLAG_32(res);
14612 (mc68kcpu)->not_z_flag = res;
14613 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14614 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14615 }
14616
14617
14618 static void m68k_op_eor_32_ai(m68000_base_device* mc68kcpu)
14619 {
14620 uint32_t ea = EA_AY_AI_32(mc68kcpu);
14621 uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea);
14622
14623 m68ki_write_32((mc68kcpu), ea, res);
14624
14625 (mc68kcpu)->n_flag = NFLAG_32(res);
14626 (mc68kcpu)->not_z_flag = res;
14627 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14628 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14629 }
14630
14631
14632 static void m68k_op_eor_32_pi(m68000_base_device* mc68kcpu)
14633 {
14634 uint32_t ea = EA_AY_PI_32(mc68kcpu);
14635 uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea);
14636
14637 m68ki_write_32((mc68kcpu), ea, res);
14638
14639 (mc68kcpu)->n_flag = NFLAG_32(res);
14640 (mc68kcpu)->not_z_flag = res;
14641 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14642 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14643 }
14644
14645
14646 static void m68k_op_eor_32_pd(m68000_base_device* mc68kcpu)
14647 {
14648 uint32_t ea = EA_AY_PD_32(mc68kcpu);
14649 uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea);
14650
14651 m68ki_write_32((mc68kcpu), ea, res);
14652
14653 (mc68kcpu)->n_flag = NFLAG_32(res);
14654 (mc68kcpu)->not_z_flag = res;
14655 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14656 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14657 }
14658
14659
14660 static void m68k_op_eor_32_di(m68000_base_device* mc68kcpu)
14661 {
14662 uint32_t ea = EA_AY_DI_32(mc68kcpu);
14663 uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea);
14664
14665 m68ki_write_32((mc68kcpu), ea, res);
14666
14667 (mc68kcpu)->n_flag = NFLAG_32(res);
14668 (mc68kcpu)->not_z_flag = res;
14669 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14670 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14671 }
14672
14673
14674 static void m68k_op_eor_32_ix(m68000_base_device* mc68kcpu)
14675 {
14676 uint32_t ea = EA_AY_IX_32(mc68kcpu);
14677 uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea);
14678
14679 m68ki_write_32((mc68kcpu), ea, res);
14680
14681 (mc68kcpu)->n_flag = NFLAG_32(res);
14682 (mc68kcpu)->not_z_flag = res;
14683 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14684 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14685 }
14686
14687
14688 static void m68k_op_eor_32_aw(m68000_base_device* mc68kcpu)
14689 {
14690 uint32_t ea = EA_AW_32(mc68kcpu);
14691 uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea);
14692
14693 m68ki_write_32((mc68kcpu), ea, res);
14694
14695 (mc68kcpu)->n_flag = NFLAG_32(res);
14696 (mc68kcpu)->not_z_flag = res;
14697 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14698 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14699 }
14700
14701
14702 static void m68k_op_eor_32_al(m68000_base_device* mc68kcpu)
14703 {
14704 uint32_t ea = EA_AL_32(mc68kcpu);
14705 uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea);
14706
14707 m68ki_write_32((mc68kcpu), ea, res);
14708
14709 (mc68kcpu)->n_flag = NFLAG_32(res);
14710 (mc68kcpu)->not_z_flag = res;
14711 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14712 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14713 }
14714
14715
14716 static void m68k_op_eori_8_d(m68000_base_device* mc68kcpu)
14717 {
14718 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu) ^= OPER_I_8(mc68kcpu));
14719
14720 (mc68kcpu)->n_flag = NFLAG_8(res);
14721 (mc68kcpu)->not_z_flag = res;
14722 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14723 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14724 }
14725
14726
14727 static void m68k_op_eori_8_ai(m68000_base_device* mc68kcpu)
14728 {
14729 uint32_t src = OPER_I_8(mc68kcpu);
14730 uint32_t ea = EA_AY_AI_8(mc68kcpu);
14731 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14732
14733 m68ki_write_8((mc68kcpu), ea, res);
14734
14735 (mc68kcpu)->n_flag = NFLAG_8(res);
14736 (mc68kcpu)->not_z_flag = res;
14737 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14738 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14739 }
14740
14741
14742 static void m68k_op_eori_8_pi(m68000_base_device* mc68kcpu)
14743 {
14744 uint32_t src = OPER_I_8(mc68kcpu);
14745 uint32_t ea = EA_AY_PI_8(mc68kcpu);
14746 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14747
14748 m68ki_write_8((mc68kcpu), ea, res);
14749
14750 (mc68kcpu)->n_flag = NFLAG_8(res);
14751 (mc68kcpu)->not_z_flag = res;
14752 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14753 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14754 }
14755
14756
14757 static void m68k_op_eori_8_pi7(m68000_base_device* mc68kcpu)
14758 {
14759 uint32_t src = OPER_I_8(mc68kcpu);
14760 uint32_t ea = EA_A7_PI_8(mc68kcpu);
14761 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14762
14763 m68ki_write_8((mc68kcpu), ea, res);
14764
14765 (mc68kcpu)->n_flag = NFLAG_8(res);
14766 (mc68kcpu)->not_z_flag = res;
14767 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14768 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14769 }
14770
14771
14772 static void m68k_op_eori_8_pd(m68000_base_device* mc68kcpu)
14773 {
14774 uint32_t src = OPER_I_8(mc68kcpu);
14775 uint32_t ea = EA_AY_PD_8(mc68kcpu);
14776 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14777
14778 m68ki_write_8((mc68kcpu), ea, res);
14779
14780 (mc68kcpu)->n_flag = NFLAG_8(res);
14781 (mc68kcpu)->not_z_flag = res;
14782 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14783 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14784 }
14785
14786
14787 static void m68k_op_eori_8_pd7(m68000_base_device* mc68kcpu)
14788 {
14789 uint32_t src = OPER_I_8(mc68kcpu);
14790 uint32_t ea = EA_A7_PD_8(mc68kcpu);
14791 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14792
14793 m68ki_write_8((mc68kcpu), ea, res);
14794
14795 (mc68kcpu)->n_flag = NFLAG_8(res);
14796 (mc68kcpu)->not_z_flag = res;
14797 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14798 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14799 }
14800
14801
14802 static void m68k_op_eori_8_di(m68000_base_device* mc68kcpu)
14803 {
14804 uint32_t src = OPER_I_8(mc68kcpu);
14805 uint32_t ea = EA_AY_DI_8(mc68kcpu);
14806 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14807
14808 m68ki_write_8((mc68kcpu), ea, res);
14809
14810 (mc68kcpu)->n_flag = NFLAG_8(res);
14811 (mc68kcpu)->not_z_flag = res;
14812 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14813 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14814 }
14815
14816
14817 static void m68k_op_eori_8_ix(m68000_base_device* mc68kcpu)
14818 {
14819 uint32_t src = OPER_I_8(mc68kcpu);
14820 uint32_t ea = EA_AY_IX_8(mc68kcpu);
14821 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14822
14823 m68ki_write_8((mc68kcpu), ea, res);
14824
14825 (mc68kcpu)->n_flag = NFLAG_8(res);
14826 (mc68kcpu)->not_z_flag = res;
14827 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14828 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14829 }
14830
14831
14832 static void m68k_op_eori_8_aw(m68000_base_device* mc68kcpu)
14833 {
14834 uint32_t src = OPER_I_8(mc68kcpu);
14835 uint32_t ea = EA_AW_8(mc68kcpu);
14836 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14837
14838 m68ki_write_8((mc68kcpu), ea, res);
14839
14840 (mc68kcpu)->n_flag = NFLAG_8(res);
14841 (mc68kcpu)->not_z_flag = res;
14842 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14843 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14844 }
14845
14846
14847 static void m68k_op_eori_8_al(m68000_base_device* mc68kcpu)
14848 {
14849 uint32_t src = OPER_I_8(mc68kcpu);
14850 uint32_t ea = EA_AL_8(mc68kcpu);
14851 uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea);
14852
14853 m68ki_write_8((mc68kcpu), ea, res);
14854
14855 (mc68kcpu)->n_flag = NFLAG_8(res);
14856 (mc68kcpu)->not_z_flag = res;
14857 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14858 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14859 }
14860
14861
14862 static void m68k_op_eori_16_d(m68000_base_device* mc68kcpu)
14863 {
14864 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu) ^= OPER_I_16(mc68kcpu));
14865
14866 (mc68kcpu)->n_flag = NFLAG_16(res);
14867 (mc68kcpu)->not_z_flag = res;
14868 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14869 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14870 }
14871
14872
14873 static void m68k_op_eori_16_ai(m68000_base_device* mc68kcpu)
14874 {
14875 uint32_t src = OPER_I_16(mc68kcpu);
14876 uint32_t ea = EA_AY_AI_16(mc68kcpu);
14877 uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea);
14878
14879 m68ki_write_16((mc68kcpu), ea, res);
14880
14881 (mc68kcpu)->n_flag = NFLAG_16(res);
14882 (mc68kcpu)->not_z_flag = res;
14883 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14884 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14885 }
14886
14887
14888 static void m68k_op_eori_16_pi(m68000_base_device* mc68kcpu)
14889 {
14890 uint32_t src = OPER_I_16(mc68kcpu);
14891 uint32_t ea = EA_AY_PI_16(mc68kcpu);
14892 uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea);
14893
14894 m68ki_write_16((mc68kcpu), ea, res);
14895
14896 (mc68kcpu)->n_flag = NFLAG_16(res);
14897 (mc68kcpu)->not_z_flag = res;
14898 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14899 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14900 }
14901
14902
14903 static void m68k_op_eori_16_pd(m68000_base_device* mc68kcpu)
14904 {
14905 uint32_t src = OPER_I_16(mc68kcpu);
14906 uint32_t ea = EA_AY_PD_16(mc68kcpu);
14907 uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea);
14908
14909 m68ki_write_16((mc68kcpu), ea, res);
14910
14911 (mc68kcpu)->n_flag = NFLAG_16(res);
14912 (mc68kcpu)->not_z_flag = res;
14913 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14914 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14915 }
14916
14917
14918 static void m68k_op_eori_16_di(m68000_base_device* mc68kcpu)
14919 {
14920 uint32_t src = OPER_I_16(mc68kcpu);
14921 uint32_t ea = EA_AY_DI_16(mc68kcpu);
14922 uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea);
14923
14924 m68ki_write_16((mc68kcpu), ea, res);
14925
14926 (mc68kcpu)->n_flag = NFLAG_16(res);
14927 (mc68kcpu)->not_z_flag = res;
14928 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14929 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14930 }
14931
14932
14933 static void m68k_op_eori_16_ix(m68000_base_device* mc68kcpu)
14934 {
14935 uint32_t src = OPER_I_16(mc68kcpu);
14936 uint32_t ea = EA_AY_IX_16(mc68kcpu);
14937 uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea);
14938
14939 m68ki_write_16((mc68kcpu), ea, res);
14940
14941 (mc68kcpu)->n_flag = NFLAG_16(res);
14942 (mc68kcpu)->not_z_flag = res;
14943 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14944 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14945 }
14946
14947
14948 static void m68k_op_eori_16_aw(m68000_base_device* mc68kcpu)
14949 {
14950 uint32_t src = OPER_I_16(mc68kcpu);
14951 uint32_t ea = EA_AW_16(mc68kcpu);
14952 uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea);
14953
14954 m68ki_write_16((mc68kcpu), ea, res);
14955
14956 (mc68kcpu)->n_flag = NFLAG_16(res);
14957 (mc68kcpu)->not_z_flag = res;
14958 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14959 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14960 }
14961
14962
14963 static void m68k_op_eori_16_al(m68000_base_device* mc68kcpu)
14964 {
14965 uint32_t src = OPER_I_16(mc68kcpu);
14966 uint32_t ea = EA_AL_16(mc68kcpu);
14967 uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea);
14968
14969 m68ki_write_16((mc68kcpu), ea, res);
14970
14971 (mc68kcpu)->n_flag = NFLAG_16(res);
14972 (mc68kcpu)->not_z_flag = res;
14973 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14974 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14975 }
14976
14977
14978 static void m68k_op_eori_32_d(m68000_base_device* mc68kcpu)
14979 {
14980 uint32_t res = DY(mc68kcpu) ^= OPER_I_32(mc68kcpu);
14981
14982 (mc68kcpu)->n_flag = NFLAG_32(res);
14983 (mc68kcpu)->not_z_flag = res;
14984 (mc68kcpu)->c_flag = CFLAG_CLEAR;
14985 (mc68kcpu)->v_flag = VFLAG_CLEAR;
14986 }
14987
14988
14989 static void m68k_op_eori_32_ai(m68000_base_device* mc68kcpu)
14990 {
14991 uint32_t src = OPER_I_32(mc68kcpu);
14992 uint32_t ea = EA_AY_AI_32(mc68kcpu);
14993 uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea);
14994
14995 m68ki_write_32((mc68kcpu), ea, res);
14996
14997 (mc68kcpu)->n_flag = NFLAG_32(res);
14998 (mc68kcpu)->not_z_flag = res;
14999 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15000 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15001 }
15002
15003
15004 static void m68k_op_eori_32_pi(m68000_base_device* mc68kcpu)
15005 {
15006 uint32_t src = OPER_I_32(mc68kcpu);
15007 uint32_t ea = EA_AY_PI_32(mc68kcpu);
15008 uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea);
15009
15010 m68ki_write_32((mc68kcpu), ea, res);
15011
15012 (mc68kcpu)->n_flag = NFLAG_32(res);
15013 (mc68kcpu)->not_z_flag = res;
15014 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15015 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15016 }
15017
15018
15019 static void m68k_op_eori_32_pd(m68000_base_device* mc68kcpu)
15020 {
15021 uint32_t src = OPER_I_32(mc68kcpu);
15022 uint32_t ea = EA_AY_PD_32(mc68kcpu);
15023 uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea);
15024
15025 m68ki_write_32((mc68kcpu), ea, res);
15026
15027 (mc68kcpu)->n_flag = NFLAG_32(res);
15028 (mc68kcpu)->not_z_flag = res;
15029 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15030 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15031 }
15032
15033
15034 static void m68k_op_eori_32_di(m68000_base_device* mc68kcpu)
15035 {
15036 uint32_t src = OPER_I_32(mc68kcpu);
15037 uint32_t ea = EA_AY_DI_32(mc68kcpu);
15038 uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea);
15039
15040 m68ki_write_32((mc68kcpu), ea, res);
15041
15042 (mc68kcpu)->n_flag = NFLAG_32(res);
15043 (mc68kcpu)->not_z_flag = res;
15044 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15045 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15046 }
15047
15048
15049 static void m68k_op_eori_32_ix(m68000_base_device* mc68kcpu)
15050 {
15051 uint32_t src = OPER_I_32(mc68kcpu);
15052 uint32_t ea = EA_AY_IX_32(mc68kcpu);
15053 uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea);
15054
15055 m68ki_write_32((mc68kcpu), ea, res);
15056
15057 (mc68kcpu)->n_flag = NFLAG_32(res);
15058 (mc68kcpu)->not_z_flag = res;
15059 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15060 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15061 }
15062
15063
15064 static void m68k_op_eori_32_aw(m68000_base_device* mc68kcpu)
15065 {
15066 uint32_t src = OPER_I_32(mc68kcpu);
15067 uint32_t ea = EA_AW_32(mc68kcpu);
15068 uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea);
15069
15070 m68ki_write_32((mc68kcpu), ea, res);
15071
15072 (mc68kcpu)->n_flag = NFLAG_32(res);
15073 (mc68kcpu)->not_z_flag = res;
15074 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15075 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15076 }
15077
15078
15079 static void m68k_op_eori_32_al(m68000_base_device* mc68kcpu)
15080 {
15081 uint32_t src = OPER_I_32(mc68kcpu);
15082 uint32_t ea = EA_AL_32(mc68kcpu);
15083 uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea);
15084
15085 m68ki_write_32((mc68kcpu), ea, res);
15086
15087 (mc68kcpu)->n_flag = NFLAG_32(res);
15088 (mc68kcpu)->not_z_flag = res;
15089 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15090 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15091 }
15092
15093
15094 static void m68k_op_eori_16_toc(m68000_base_device* mc68kcpu)
15095 {
15096 m68ki_set_ccr((mc68kcpu), m68ki_get_ccr(mc68kcpu) ^ OPER_I_16(mc68kcpu));
15097 }
15098
15099
15100 static void m68k_op_eori_16_tos(m68000_base_device* mc68kcpu)
15101 {
15102 if((mc68kcpu)->s_flag)
15103 {
15104 uint32_t src = OPER_I_16(mc68kcpu);
15105 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15106 m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) ^ src);
15107 return;
15108 }
15109 m68ki_exception_privilege_violation(mc68kcpu);
15110 }
15111
15112
15113 static void m68k_op_exg_32_dd(m68000_base_device* mc68kcpu)
15114 {
15115 uint32_t* reg_a = &DX(mc68kcpu);
15116 uint32_t* reg_b = &DY(mc68kcpu);
15117 uint32_t tmp = *reg_a;
15118 *reg_a = *reg_b;
15119 *reg_b = tmp;
15120 }
15121
15122
15123 static void m68k_op_exg_32_aa(m68000_base_device* mc68kcpu)
15124 {
15125 uint32_t* reg_a = &AX(mc68kcpu);
15126 uint32_t* reg_b = &AY(mc68kcpu);
15127 uint32_t tmp = *reg_a;
15128 *reg_a = *reg_b;
15129 *reg_b = tmp;
15130 }
15131
15132
15133 static void m68k_op_exg_32_da(m68000_base_device* mc68kcpu)
15134 {
15135 uint32_t* reg_a = &DX(mc68kcpu);
15136 uint32_t* reg_b = &AY(mc68kcpu);
15137 uint32_t tmp = *reg_a;
15138 *reg_a = *reg_b;
15139 *reg_b = tmp;
15140 }
15141
15142
15143 static void m68k_op_ext_16(m68000_base_device* mc68kcpu)
15144 {
15145 uint32_t* r_dst = &DY(mc68kcpu);
15146
15147 *r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0);
15148
15149 (mc68kcpu)->n_flag = NFLAG_16(*r_dst);
15150 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(*r_dst);
15151 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15152 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15153 }
15154
15155
15156 static void m68k_op_ext_32(m68000_base_device* mc68kcpu)
15157 {
15158 uint32_t* r_dst = &DY(mc68kcpu);
15159
15160 *r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0);
15161
15162 (mc68kcpu)->n_flag = NFLAG_32(*r_dst);
15163 (mc68kcpu)->not_z_flag = *r_dst;
15164 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15165 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15166 }
15167
15168
15169 static void m68k_op_extb_32(m68000_base_device* mc68kcpu)
15170 {
15171 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
15172 {
15173 uint32_t* r_dst = &DY(mc68kcpu);
15174
15175 *r_dst = MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xffffff00 : 0);
15176
15177 (mc68kcpu)->n_flag = NFLAG_32(*r_dst);
15178 (mc68kcpu)->not_z_flag = *r_dst;
15179 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15180 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15181 return;
15182 }
15183 m68ki_exception_illegal(mc68kcpu);
15184 }
15185
15186
15187 static void m68k_op_illegal(m68000_base_device* mc68kcpu)
15188 {
15189 m68ki_exception_illegal(mc68kcpu);
15190 }
15191
15192
15193 static void m68k_op_jmp_32_ai(m68000_base_device* mc68kcpu)
15194 {
15195 m68ki_jump((mc68kcpu), EA_AY_AI_32(mc68kcpu));
15196 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15197 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
15198 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
15199 }
15200
15201
15202 static void m68k_op_jmp_32_di(m68000_base_device* mc68kcpu)
15203 {
15204 m68ki_jump((mc68kcpu), EA_AY_DI_32(mc68kcpu));
15205 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15206 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
15207 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
15208 }
15209
15210
15211 static void m68k_op_jmp_32_ix(m68000_base_device* mc68kcpu)
15212 {
15213 m68ki_jump((mc68kcpu), EA_AY_IX_32(mc68kcpu));
15214 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15215 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
15216 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
15217 }
15218
15219
15220 static void m68k_op_jmp_32_aw(m68000_base_device* mc68kcpu)
15221 {
15222 m68ki_jump((mc68kcpu), EA_AW_32(mc68kcpu));
15223 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15224 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
15225 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
15226 }
15227
15228
15229 static void m68k_op_jmp_32_al(m68000_base_device* mc68kcpu)
15230 {
15231 m68ki_jump((mc68kcpu), EA_AL_32(mc68kcpu));
15232 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15233 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
15234 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
15235 }
15236
15237
15238 static void m68k_op_jmp_32_pcdi(m68000_base_device* mc68kcpu)
15239 {
15240 m68ki_jump((mc68kcpu), EA_PCDI_32(mc68kcpu));
15241 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15242 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
15243 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
15244 }
15245
15246
15247 static void m68k_op_jmp_32_pcix(m68000_base_device* mc68kcpu)
15248 {
15249 m68ki_jump((mc68kcpu), EA_PCIX_32(mc68kcpu));
15250 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15251 if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle)
15252 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
15253 }
15254
15255
15256 static void m68k_op_jsr_32_ai(m68000_base_device* mc68kcpu)
15257 {
15258 uint32_t ea = EA_AY_AI_32(mc68kcpu);
15259 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15260 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
15261 m68ki_jump((mc68kcpu), ea);
15262 }
15263
15264
15265 static void m68k_op_jsr_32_di(m68000_base_device* mc68kcpu)
15266 {
15267 uint32_t ea = EA_AY_DI_32(mc68kcpu);
15268 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15269 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
15270 m68ki_jump((mc68kcpu), ea);
15271 }
15272
15273
15274 static void m68k_op_jsr_32_ix(m68000_base_device* mc68kcpu)
15275 {
15276 uint32_t ea = EA_AY_IX_32(mc68kcpu);
15277 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15278 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
15279 m68ki_jump((mc68kcpu), ea);
15280 }
15281
15282
15283 static void m68k_op_jsr_32_aw(m68000_base_device* mc68kcpu)
15284 {
15285 uint32_t ea = EA_AW_32(mc68kcpu);
15286 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15287 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
15288 m68ki_jump((mc68kcpu), ea);
15289 }
15290
15291
15292 static void m68k_op_jsr_32_al(m68000_base_device* mc68kcpu)
15293 {
15294 uint32_t ea = EA_AL_32(mc68kcpu);
15295 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15296 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
15297 m68ki_jump((mc68kcpu), ea);
15298 }
15299
15300
15301 static void m68k_op_jsr_32_pcdi(m68000_base_device* mc68kcpu)
15302 {
15303 uint32_t ea = EA_PCDI_32(mc68kcpu);
15304 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15305 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
15306 m68ki_jump((mc68kcpu), ea);
15307 }
15308
15309
15310 static void m68k_op_jsr_32_pcix(m68000_base_device* mc68kcpu)
15311 {
15312 uint32_t ea = EA_PCIX_32(mc68kcpu);
15313 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
15314 m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu));
15315 m68ki_jump((mc68kcpu), ea);
15316 }
15317
15318
15319 static void m68k_op_lea_32_ai(m68000_base_device* mc68kcpu)
15320 {
15321 AX(mc68kcpu) = EA_AY_AI_32(mc68kcpu);
15322 }
15323
15324
15325 static void m68k_op_lea_32_di(m68000_base_device* mc68kcpu)
15326 {
15327 AX(mc68kcpu) = EA_AY_DI_32(mc68kcpu);
15328 }
15329
15330
15331 static void m68k_op_lea_32_ix(m68000_base_device* mc68kcpu)
15332 {
15333 AX(mc68kcpu) = EA_AY_IX_32(mc68kcpu);
15334 }
15335
15336
15337 static void m68k_op_lea_32_aw(m68000_base_device* mc68kcpu)
15338 {
15339 AX(mc68kcpu) = EA_AW_32(mc68kcpu);
15340 }
15341
15342
15343 static void m68k_op_lea_32_al(m68000_base_device* mc68kcpu)
15344 {
15345 AX(mc68kcpu) = EA_AL_32(mc68kcpu);
15346 }
15347
15348
15349 static void m68k_op_lea_32_pcdi(m68000_base_device* mc68kcpu)
15350 {
15351 AX(mc68kcpu) = EA_PCDI_32(mc68kcpu);
15352 }
15353
15354
15355 static void m68k_op_lea_32_pcix(m68000_base_device* mc68kcpu)
15356 {
15357 AX(mc68kcpu) = EA_PCIX_32(mc68kcpu);
15358 }
15359
15360
15361 static void m68k_op_link_16_a7(m68000_base_device* mc68kcpu)
15362 {
15363 REG_A(mc68kcpu)[7] -= 4;
15364 m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[7], REG_A(mc68kcpu)[7]);
15365 REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + MAKE_INT_16(OPER_I_16(mc68kcpu)));
15366 }
15367
15368
15369 static void m68k_op_link_16(m68000_base_device* mc68kcpu)
15370 {
15371 uint32_t* r_dst = &AY(mc68kcpu);
15372
15373 m68ki_push_32((mc68kcpu), *r_dst);
15374 *r_dst = REG_A(mc68kcpu)[7];
15375 REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + MAKE_INT_16(OPER_I_16(mc68kcpu)));
15376 }
15377
15378
15379 static void m68k_op_link_32_a7(m68000_base_device* mc68kcpu)
15380 {
15381 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
15382 {
15383 REG_A(mc68kcpu)[7] -= 4;
15384 m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[7], REG_A(mc68kcpu)[7]);
15385 REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + OPER_I_32(mc68kcpu));
15386 return;
15387 }
15388 m68ki_exception_illegal(mc68kcpu);
15389 }
15390
15391
15392 static void m68k_op_link_32(m68000_base_device* mc68kcpu)
15393 {
15394 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
15395 {
15396 uint32_t* r_dst = &AY(mc68kcpu);
15397
15398 m68ki_push_32((mc68kcpu), *r_dst);
15399 *r_dst = REG_A(mc68kcpu)[7];
15400 REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + OPER_I_32(mc68kcpu));
15401 return;
15402 }
15403 m68ki_exception_illegal(mc68kcpu);
15404 }
15405
15406
15407 static void m68k_op_lsr_8_s(m68000_base_device* mc68kcpu)
15408 {
15409 uint32_t* r_dst = &DY(mc68kcpu);
15410 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
15411 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
15412 uint32_t res = src >> shift;
15413
15414 if(shift != 0)
15415 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15416
15417 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
15418
15419 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15420 (mc68kcpu)->not_z_flag = res;
15421 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift);
15422 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15423 }
15424
15425
15426 static void m68k_op_lsr_16_s(m68000_base_device* mc68kcpu)
15427 {
15428 uint32_t* r_dst = &DY(mc68kcpu);
15429 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
15430 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
15431 uint32_t res = src >> shift;
15432
15433 if(shift != 0)
15434 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15435
15436 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
15437
15438 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15439 (mc68kcpu)->not_z_flag = res;
15440 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift);
15441 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15442 }
15443
15444
15445 static void m68k_op_lsr_32_s(m68000_base_device* mc68kcpu)
15446 {
15447 uint32_t* r_dst = &DY(mc68kcpu);
15448 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
15449 uint32_t src = *r_dst;
15450 uint32_t res = src >> shift;
15451
15452 if(shift != 0)
15453 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15454
15455 *r_dst = res;
15456
15457 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15458 (mc68kcpu)->not_z_flag = res;
15459 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift);
15460 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15461 }
15462
15463
15464 static void m68k_op_lsr_8_r(m68000_base_device* mc68kcpu)
15465 {
15466 uint32_t* r_dst = &DY(mc68kcpu);
15467 uint32_t shift = DX(mc68kcpu) & 0x3f;
15468 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
15469 uint32_t res = src >> shift;
15470
15471 if(shift != 0)
15472 {
15473 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15474
15475 if(shift <= 8)
15476 {
15477 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
15478 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift);
15479 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15480 (mc68kcpu)->not_z_flag = res;
15481 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15482 return;
15483 }
15484
15485 *r_dst &= 0xffffff00;
15486 (mc68kcpu)->x_flag = XFLAG_CLEAR;
15487 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15488 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15489 (mc68kcpu)->not_z_flag = ZFLAG_SET;
15490 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15491 return;
15492 }
15493
15494 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15495 (mc68kcpu)->n_flag = NFLAG_8(src);
15496 (mc68kcpu)->not_z_flag = src;
15497 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15498 }
15499
15500
15501 static void m68k_op_lsr_16_r(m68000_base_device* mc68kcpu)
15502 {
15503 uint32_t* r_dst = &DY(mc68kcpu);
15504 uint32_t shift = DX(mc68kcpu) & 0x3f;
15505 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
15506 uint32_t res = src >> shift;
15507
15508 if(shift != 0)
15509 {
15510 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15511
15512 if(shift <= 16)
15513 {
15514 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
15515 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = (src >> (shift - 1))<<8;
15516 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15517 (mc68kcpu)->not_z_flag = res;
15518 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15519 return;
15520 }
15521
15522 *r_dst &= 0xffff0000;
15523 (mc68kcpu)->x_flag = XFLAG_CLEAR;
15524 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15525 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15526 (mc68kcpu)->not_z_flag = ZFLAG_SET;
15527 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15528 return;
15529 }
15530
15531 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15532 (mc68kcpu)->n_flag = NFLAG_16(src);
15533 (mc68kcpu)->not_z_flag = src;
15534 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15535 }
15536
15537
15538 static void m68k_op_lsr_32_r(m68000_base_device* mc68kcpu)
15539 {
15540 uint32_t* r_dst = &DY(mc68kcpu);
15541 uint32_t shift = DX(mc68kcpu) & 0x3f;
15542 uint32_t src = *r_dst;
15543 uint32_t res = src >> shift;
15544
15545 if(shift != 0)
15546 {
15547 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15548
15549 if(shift < 32)
15550 {
15551 *r_dst = res;
15552 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = (src >> (shift - 1))<<8;
15553 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15554 (mc68kcpu)->not_z_flag = res;
15555 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15556 return;
15557 }
15558
15559 *r_dst = 0;
15560 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (shift == 32 ? GET_MSB_32(src)>>23 : 0);
15561 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15562 (mc68kcpu)->not_z_flag = ZFLAG_SET;
15563 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15564 return;
15565 }
15566
15567 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15568 (mc68kcpu)->n_flag = NFLAG_32(src);
15569 (mc68kcpu)->not_z_flag = src;
15570 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15571 }
15572
15573
15574 static void m68k_op_lsr_16_ai(m68000_base_device* mc68kcpu)
15575 {
15576 uint32_t ea = EA_AY_AI_16(mc68kcpu);
15577 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15578 uint32_t res = src >> 1;
15579
15580 m68ki_write_16((mc68kcpu), ea, res);
15581
15582 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15583 (mc68kcpu)->not_z_flag = res;
15584 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
15585 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15586 }
15587
15588
15589 static void m68k_op_lsr_16_pi(m68000_base_device* mc68kcpu)
15590 {
15591 uint32_t ea = EA_AY_PI_16(mc68kcpu);
15592 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15593 uint32_t res = src >> 1;
15594
15595 m68ki_write_16((mc68kcpu), ea, res);
15596
15597 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15598 (mc68kcpu)->not_z_flag = res;
15599 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
15600 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15601 }
15602
15603
15604 static void m68k_op_lsr_16_pd(m68000_base_device* mc68kcpu)
15605 {
15606 uint32_t ea = EA_AY_PD_16(mc68kcpu);
15607 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15608 uint32_t res = src >> 1;
15609
15610 m68ki_write_16((mc68kcpu), ea, res);
15611
15612 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15613 (mc68kcpu)->not_z_flag = res;
15614 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
15615 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15616 }
15617
15618
15619 static void m68k_op_lsr_16_di(m68000_base_device* mc68kcpu)
15620 {
15621 uint32_t ea = EA_AY_DI_16(mc68kcpu);
15622 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15623 uint32_t res = src >> 1;
15624
15625 m68ki_write_16((mc68kcpu), ea, res);
15626
15627 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15628 (mc68kcpu)->not_z_flag = res;
15629 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
15630 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15631 }
15632
15633
15634 static void m68k_op_lsr_16_ix(m68000_base_device* mc68kcpu)
15635 {
15636 uint32_t ea = EA_AY_IX_16(mc68kcpu);
15637 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15638 uint32_t res = src >> 1;
15639
15640 m68ki_write_16((mc68kcpu), ea, res);
15641
15642 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15643 (mc68kcpu)->not_z_flag = res;
15644 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
15645 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15646 }
15647
15648
15649 static void m68k_op_lsr_16_aw(m68000_base_device* mc68kcpu)
15650 {
15651 uint32_t ea = EA_AW_16(mc68kcpu);
15652 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15653 uint32_t res = src >> 1;
15654
15655 m68ki_write_16((mc68kcpu), ea, res);
15656
15657 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15658 (mc68kcpu)->not_z_flag = res;
15659 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
15660 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15661 }
15662
15663
15664 static void m68k_op_lsr_16_al(m68000_base_device* mc68kcpu)
15665 {
15666 uint32_t ea = EA_AL_16(mc68kcpu);
15667 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15668 uint32_t res = src >> 1;
15669
15670 m68ki_write_16((mc68kcpu), ea, res);
15671
15672 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15673 (mc68kcpu)->not_z_flag = res;
15674 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8;
15675 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15676 }
15677
15678
15679 static void m68k_op_lsl_8_s(m68000_base_device* mc68kcpu)
15680 {
15681 uint32_t* r_dst = &DY(mc68kcpu);
15682 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
15683 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
15684 uint32_t res = MASK_OUT_ABOVE_8(src << shift);
15685
15686 if(shift != 0)
15687 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15688
15689 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
15690
15691 (mc68kcpu)->n_flag = NFLAG_8(res);
15692 (mc68kcpu)->not_z_flag = res;
15693 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << shift;
15694 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15695 }
15696
15697
15698 static void m68k_op_lsl_16_s(m68000_base_device* mc68kcpu)
15699 {
15700 uint32_t* r_dst = &DY(mc68kcpu);
15701 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
15702 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
15703 uint32_t res = MASK_OUT_ABOVE_16(src << shift);
15704
15705 if(shift != 0)
15706 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15707
15708 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
15709
15710 (mc68kcpu)->n_flag = NFLAG_16(res);
15711 (mc68kcpu)->not_z_flag = res;
15712 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> (8-shift);
15713 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15714 }
15715
15716
15717 static void m68k_op_lsl_32_s(m68000_base_device* mc68kcpu)
15718 {
15719 uint32_t* r_dst = &DY(mc68kcpu);
15720 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
15721 uint32_t src = *r_dst;
15722 uint32_t res = MASK_OUT_ABOVE_32(src << shift);
15723
15724 if(shift != 0)
15725 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15726
15727 *r_dst = res;
15728
15729 (mc68kcpu)->n_flag = NFLAG_32(res);
15730 (mc68kcpu)->not_z_flag = res;
15731 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> (24-shift);
15732 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15733 }
15734
15735
15736 static void m68k_op_lsl_8_r(m68000_base_device* mc68kcpu)
15737 {
15738 uint32_t* r_dst = &DY(mc68kcpu);
15739 uint32_t shift = DX(mc68kcpu) & 0x3f;
15740 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
15741 uint32_t res = MASK_OUT_ABOVE_8(src << shift);
15742
15743 if(shift != 0)
15744 {
15745 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15746
15747 if(shift <= 8)
15748 {
15749 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
15750 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << shift;
15751 (mc68kcpu)->n_flag = NFLAG_8(res);
15752 (mc68kcpu)->not_z_flag = res;
15753 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15754 return;
15755 }
15756
15757 *r_dst &= 0xffffff00;
15758 (mc68kcpu)->x_flag = XFLAG_CLEAR;
15759 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15760 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15761 (mc68kcpu)->not_z_flag = ZFLAG_SET;
15762 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15763 return;
15764 }
15765
15766 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15767 (mc68kcpu)->n_flag = NFLAG_8(src);
15768 (mc68kcpu)->not_z_flag = src;
15769 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15770 }
15771
15772
15773 static void m68k_op_lsl_16_r(m68000_base_device* mc68kcpu)
15774 {
15775 uint32_t* r_dst = &DY(mc68kcpu);
15776 uint32_t shift = DX(mc68kcpu) & 0x3f;
15777 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
15778 uint32_t res = MASK_OUT_ABOVE_16(src << shift);
15779
15780 if(shift != 0)
15781 {
15782 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15783
15784 if(shift <= 16)
15785 {
15786 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
15787 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (src << shift) >> 8;
15788 (mc68kcpu)->n_flag = NFLAG_16(res);
15789 (mc68kcpu)->not_z_flag = res;
15790 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15791 return;
15792 }
15793
15794 *r_dst &= 0xffff0000;
15795 (mc68kcpu)->x_flag = XFLAG_CLEAR;
15796 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15797 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15798 (mc68kcpu)->not_z_flag = ZFLAG_SET;
15799 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15800 return;
15801 }
15802
15803 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15804 (mc68kcpu)->n_flag = NFLAG_16(src);
15805 (mc68kcpu)->not_z_flag = src;
15806 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15807 }
15808
15809
15810 static void m68k_op_lsl_32_r(m68000_base_device* mc68kcpu)
15811 {
15812 uint32_t* r_dst = &DY(mc68kcpu);
15813 uint32_t shift = DX(mc68kcpu) & 0x3f;
15814 uint32_t src = *r_dst;
15815 uint32_t res = MASK_OUT_ABOVE_32(src << shift);
15816
15817 if(shift != 0)
15818 {
15819 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
15820
15821 if(shift < 32)
15822 {
15823 *r_dst = res;
15824 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (src >> (32 - shift)) << 8;
15825 (mc68kcpu)->n_flag = NFLAG_32(res);
15826 (mc68kcpu)->not_z_flag = res;
15827 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15828 return;
15829 }
15830
15831 *r_dst = 0;
15832 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = ((shift == 32 ? src & 1 : 0))<<8;
15833 (mc68kcpu)->n_flag = NFLAG_CLEAR;
15834 (mc68kcpu)->not_z_flag = ZFLAG_SET;
15835 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15836 return;
15837 }
15838
15839 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15840 (mc68kcpu)->n_flag = NFLAG_32(src);
15841 (mc68kcpu)->not_z_flag = src;
15842 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15843 }
15844
15845
15846 static void m68k_op_lsl_16_ai(m68000_base_device* mc68kcpu)
15847 {
15848 uint32_t ea = EA_AY_AI_16(mc68kcpu);
15849 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15850 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
15851
15852 m68ki_write_16((mc68kcpu), ea, res);
15853
15854 (mc68kcpu)->n_flag = NFLAG_16(res);
15855 (mc68kcpu)->not_z_flag = res;
15856 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
15857 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15858 }
15859
15860
15861 static void m68k_op_lsl_16_pi(m68000_base_device* mc68kcpu)
15862 {
15863 uint32_t ea = EA_AY_PI_16(mc68kcpu);
15864 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15865 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
15866
15867 m68ki_write_16((mc68kcpu), ea, res);
15868
15869 (mc68kcpu)->n_flag = NFLAG_16(res);
15870 (mc68kcpu)->not_z_flag = res;
15871 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
15872 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15873 }
15874
15875
15876 static void m68k_op_lsl_16_pd(m68000_base_device* mc68kcpu)
15877 {
15878 uint32_t ea = EA_AY_PD_16(mc68kcpu);
15879 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15880 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
15881
15882 m68ki_write_16((mc68kcpu), ea, res);
15883
15884 (mc68kcpu)->n_flag = NFLAG_16(res);
15885 (mc68kcpu)->not_z_flag = res;
15886 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
15887 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15888 }
15889
15890
15891 static void m68k_op_lsl_16_di(m68000_base_device* mc68kcpu)
15892 {
15893 uint32_t ea = EA_AY_DI_16(mc68kcpu);
15894 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15895 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
15896
15897 m68ki_write_16((mc68kcpu), ea, res);
15898
15899 (mc68kcpu)->n_flag = NFLAG_16(res);
15900 (mc68kcpu)->not_z_flag = res;
15901 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
15902 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15903 }
15904
15905
15906 static void m68k_op_lsl_16_ix(m68000_base_device* mc68kcpu)
15907 {
15908 uint32_t ea = EA_AY_IX_16(mc68kcpu);
15909 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15910 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
15911
15912 m68ki_write_16((mc68kcpu), ea, res);
15913
15914 (mc68kcpu)->n_flag = NFLAG_16(res);
15915 (mc68kcpu)->not_z_flag = res;
15916 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
15917 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15918 }
15919
15920
15921 static void m68k_op_lsl_16_aw(m68000_base_device* mc68kcpu)
15922 {
15923 uint32_t ea = EA_AW_16(mc68kcpu);
15924 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15925 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
15926
15927 m68ki_write_16((mc68kcpu), ea, res);
15928
15929 (mc68kcpu)->n_flag = NFLAG_16(res);
15930 (mc68kcpu)->not_z_flag = res;
15931 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
15932 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15933 }
15934
15935
15936 static void m68k_op_lsl_16_al(m68000_base_device* mc68kcpu)
15937 {
15938 uint32_t ea = EA_AL_16(mc68kcpu);
15939 uint32_t src = m68ki_read_16((mc68kcpu), ea);
15940 uint32_t res = MASK_OUT_ABOVE_16(src << 1);
15941
15942 m68ki_write_16((mc68kcpu), ea, res);
15943
15944 (mc68kcpu)->n_flag = NFLAG_16(res);
15945 (mc68kcpu)->not_z_flag = res;
15946 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7;
15947 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15948 }
15949
15950
15951 static void m68k_op_move_8_d_d(m68000_base_device* mc68kcpu)
15952 {
15953 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
15954 uint32_t* r_dst = &DX(mc68kcpu);
15955
15956 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
15957
15958 (mc68kcpu)->n_flag = NFLAG_8(res);
15959 (mc68kcpu)->not_z_flag = res;
15960 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15961 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15962 }
15963
15964
15965 static void m68k_op_move_8_d_ai(m68000_base_device* mc68kcpu)
15966 {
15967 uint32_t res = OPER_AY_AI_8(mc68kcpu);
15968 uint32_t* r_dst = &DX(mc68kcpu);
15969
15970 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
15971
15972 (mc68kcpu)->n_flag = NFLAG_8(res);
15973 (mc68kcpu)->not_z_flag = res;
15974 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15975 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15976 }
15977
15978
15979 static void m68k_op_move_8_d_pi(m68000_base_device* mc68kcpu)
15980 {
15981 uint32_t res = OPER_AY_PI_8(mc68kcpu);
15982 uint32_t* r_dst = &DX(mc68kcpu);
15983
15984 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
15985
15986 (mc68kcpu)->n_flag = NFLAG_8(res);
15987 (mc68kcpu)->not_z_flag = res;
15988 (mc68kcpu)->v_flag = VFLAG_CLEAR;
15989 (mc68kcpu)->c_flag = CFLAG_CLEAR;
15990 }
15991
15992
15993 static void m68k_op_move_8_d_pi7(m68000_base_device* mc68kcpu)
15994 {
15995 uint32_t res = OPER_A7_PI_8(mc68kcpu);
15996 uint32_t* r_dst = &DX(mc68kcpu);
15997
15998 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
15999
16000 (mc68kcpu)->n_flag = NFLAG_8(res);
16001 (mc68kcpu)->not_z_flag = res;
16002 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16003 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16004 }
16005
16006
16007 static void m68k_op_move_8_d_pd(m68000_base_device* mc68kcpu)
16008 {
16009 uint32_t res = OPER_AY_PD_8(mc68kcpu);
16010 uint32_t* r_dst = &DX(mc68kcpu);
16011
16012 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16013
16014 (mc68kcpu)->n_flag = NFLAG_8(res);
16015 (mc68kcpu)->not_z_flag = res;
16016 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16017 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16018 }
16019
16020
16021 static void m68k_op_move_8_d_pd7(m68000_base_device* mc68kcpu)
16022 {
16023 uint32_t res = OPER_A7_PD_8(mc68kcpu);
16024 uint32_t* r_dst = &DX(mc68kcpu);
16025
16026 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16027
16028 (mc68kcpu)->n_flag = NFLAG_8(res);
16029 (mc68kcpu)->not_z_flag = res;
16030 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16031 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16032 }
16033
16034
16035 static void m68k_op_move_8_d_di(m68000_base_device* mc68kcpu)
16036 {
16037 uint32_t res = OPER_AY_DI_8(mc68kcpu);
16038 uint32_t* r_dst = &DX(mc68kcpu);
16039
16040 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16041
16042 (mc68kcpu)->n_flag = NFLAG_8(res);
16043 (mc68kcpu)->not_z_flag = res;
16044 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16045 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16046 }
16047
16048
16049 static void m68k_op_move_8_d_ix(m68000_base_device* mc68kcpu)
16050 {
16051 uint32_t res = OPER_AY_IX_8(mc68kcpu);
16052 uint32_t* r_dst = &DX(mc68kcpu);
16053
16054 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16055
16056 (mc68kcpu)->n_flag = NFLAG_8(res);
16057 (mc68kcpu)->not_z_flag = res;
16058 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16059 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16060 }
16061
16062
16063 static void m68k_op_move_8_d_aw(m68000_base_device* mc68kcpu)
16064 {
16065 uint32_t res = OPER_AW_8(mc68kcpu);
16066 uint32_t* r_dst = &DX(mc68kcpu);
16067
16068 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16069
16070 (mc68kcpu)->n_flag = NFLAG_8(res);
16071 (mc68kcpu)->not_z_flag = res;
16072 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16073 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16074 }
16075
16076
16077 static void m68k_op_move_8_d_al(m68000_base_device* mc68kcpu)
16078 {
16079 uint32_t res = OPER_AL_8(mc68kcpu);
16080 uint32_t* r_dst = &DX(mc68kcpu);
16081
16082 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16083
16084 (mc68kcpu)->n_flag = NFLAG_8(res);
16085 (mc68kcpu)->not_z_flag = res;
16086 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16087 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16088 }
16089
16090
16091 static void m68k_op_move_8_d_pcdi(m68000_base_device* mc68kcpu)
16092 {
16093 uint32_t res = OPER_PCDI_8(mc68kcpu);
16094 uint32_t* r_dst = &DX(mc68kcpu);
16095
16096 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16097
16098 (mc68kcpu)->n_flag = NFLAG_8(res);
16099 (mc68kcpu)->not_z_flag = res;
16100 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16101 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16102 }
16103
16104
16105 static void m68k_op_move_8_d_pcix(m68000_base_device* mc68kcpu)
16106 {
16107 uint32_t res = OPER_PCIX_8(mc68kcpu);
16108 uint32_t* r_dst = &DX(mc68kcpu);
16109
16110 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16111
16112 (mc68kcpu)->n_flag = NFLAG_8(res);
16113 (mc68kcpu)->not_z_flag = res;
16114 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16115 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16116 }
16117
16118
16119 static void m68k_op_move_8_d_i(m68000_base_device* mc68kcpu)
16120 {
16121 uint32_t res = OPER_I_8(mc68kcpu);
16122 uint32_t* r_dst = &DX(mc68kcpu);
16123
16124 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
16125
16126 (mc68kcpu)->n_flag = NFLAG_8(res);
16127 (mc68kcpu)->not_z_flag = res;
16128 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16129 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16130 }
16131
16132
16133 static void m68k_op_move_8_ai_d(m68000_base_device* mc68kcpu)
16134 {
16135 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
16136 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16137
16138 m68ki_write_8((mc68kcpu), ea, res);
16139
16140 (mc68kcpu)->n_flag = NFLAG_8(res);
16141 (mc68kcpu)->not_z_flag = res;
16142 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16143 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16144 }
16145
16146
16147 static void m68k_op_move_8_ai_ai(m68000_base_device* mc68kcpu)
16148 {
16149 uint32_t res = OPER_AY_AI_8(mc68kcpu);
16150 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16151
16152 m68ki_write_8((mc68kcpu), ea, res);
16153
16154 (mc68kcpu)->n_flag = NFLAG_8(res);
16155 (mc68kcpu)->not_z_flag = res;
16156 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16157 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16158 }
16159
16160
16161 static void m68k_op_move_8_ai_pi(m68000_base_device* mc68kcpu)
16162 {
16163 uint32_t res = OPER_AY_PI_8(mc68kcpu);
16164 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16165
16166 m68ki_write_8((mc68kcpu), ea, res);
16167
16168 (mc68kcpu)->n_flag = NFLAG_8(res);
16169 (mc68kcpu)->not_z_flag = res;
16170 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16171 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16172 }
16173
16174
16175 static void m68k_op_move_8_ai_pi7(m68000_base_device* mc68kcpu)
16176 {
16177 uint32_t res = OPER_A7_PI_8(mc68kcpu);
16178 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16179
16180 m68ki_write_8((mc68kcpu), ea, res);
16181
16182 (mc68kcpu)->n_flag = NFLAG_8(res);
16183 (mc68kcpu)->not_z_flag = res;
16184 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16185 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16186 }
16187
16188
16189 static void m68k_op_move_8_ai_pd(m68000_base_device* mc68kcpu)
16190 {
16191 uint32_t res = OPER_AY_PD_8(mc68kcpu);
16192 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16193
16194 m68ki_write_8((mc68kcpu), ea, res);
16195
16196 (mc68kcpu)->n_flag = NFLAG_8(res);
16197 (mc68kcpu)->not_z_flag = res;
16198 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16199 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16200 }
16201
16202
16203 static void m68k_op_move_8_ai_pd7(m68000_base_device* mc68kcpu)
16204 {
16205 uint32_t res = OPER_A7_PD_8(mc68kcpu);
16206 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16207
16208 m68ki_write_8((mc68kcpu), ea, res);
16209
16210 (mc68kcpu)->n_flag = NFLAG_8(res);
16211 (mc68kcpu)->not_z_flag = res;
16212 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16213 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16214 }
16215
16216
16217 static void m68k_op_move_8_ai_di(m68000_base_device* mc68kcpu)
16218 {
16219 uint32_t res = OPER_AY_DI_8(mc68kcpu);
16220 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16221
16222 m68ki_write_8((mc68kcpu), ea, res);
16223
16224 (mc68kcpu)->n_flag = NFLAG_8(res);
16225 (mc68kcpu)->not_z_flag = res;
16226 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16227 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16228 }
16229
16230
16231 static void m68k_op_move_8_ai_ix(m68000_base_device* mc68kcpu)
16232 {
16233 uint32_t res = OPER_AY_IX_8(mc68kcpu);
16234 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16235
16236 m68ki_write_8((mc68kcpu), ea, res);
16237
16238 (mc68kcpu)->n_flag = NFLAG_8(res);
16239 (mc68kcpu)->not_z_flag = res;
16240 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16241 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16242 }
16243
16244
16245 static void m68k_op_move_8_ai_aw(m68000_base_device* mc68kcpu)
16246 {
16247 uint32_t res = OPER_AW_8(mc68kcpu);
16248 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16249
16250 m68ki_write_8((mc68kcpu), ea, res);
16251
16252 (mc68kcpu)->n_flag = NFLAG_8(res);
16253 (mc68kcpu)->not_z_flag = res;
16254 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16255 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16256 }
16257
16258
16259 static void m68k_op_move_8_ai_al(m68000_base_device* mc68kcpu)
16260 {
16261 uint32_t res = OPER_AL_8(mc68kcpu);
16262 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16263
16264 m68ki_write_8((mc68kcpu), ea, res);
16265
16266 (mc68kcpu)->n_flag = NFLAG_8(res);
16267 (mc68kcpu)->not_z_flag = res;
16268 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16269 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16270 }
16271
16272
16273 static void m68k_op_move_8_ai_pcdi(m68000_base_device* mc68kcpu)
16274 {
16275 uint32_t res = OPER_PCDI_8(mc68kcpu);
16276 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16277
16278 m68ki_write_8((mc68kcpu), ea, res);
16279
16280 (mc68kcpu)->n_flag = NFLAG_8(res);
16281 (mc68kcpu)->not_z_flag = res;
16282 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16283 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16284 }
16285
16286
16287 static void m68k_op_move_8_ai_pcix(m68000_base_device* mc68kcpu)
16288 {
16289 uint32_t res = OPER_PCIX_8(mc68kcpu);
16290 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16291
16292 m68ki_write_8((mc68kcpu), ea, res);
16293
16294 (mc68kcpu)->n_flag = NFLAG_8(res);
16295 (mc68kcpu)->not_z_flag = res;
16296 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16297 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16298 }
16299
16300
16301 static void m68k_op_move_8_ai_i(m68000_base_device* mc68kcpu)
16302 {
16303 uint32_t res = OPER_I_8(mc68kcpu);
16304 uint32_t ea = EA_AX_AI_8(mc68kcpu);
16305
16306 m68ki_write_8((mc68kcpu), ea, res);
16307
16308 (mc68kcpu)->n_flag = NFLAG_8(res);
16309 (mc68kcpu)->not_z_flag = res;
16310 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16311 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16312 }
16313
16314
16315 static void m68k_op_move_8_pi7_d(m68000_base_device* mc68kcpu)
16316 {
16317 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
16318 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16319
16320 m68ki_write_8((mc68kcpu), ea, res);
16321
16322 (mc68kcpu)->n_flag = NFLAG_8(res);
16323 (mc68kcpu)->not_z_flag = res;
16324 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16325 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16326 }
16327
16328
16329 static void m68k_op_move_8_pi_d(m68000_base_device* mc68kcpu)
16330 {
16331 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
16332 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16333
16334 m68ki_write_8((mc68kcpu), ea, res);
16335
16336 (mc68kcpu)->n_flag = NFLAG_8(res);
16337 (mc68kcpu)->not_z_flag = res;
16338 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16339 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16340 }
16341
16342
16343 static void m68k_op_move_8_pi7_ai(m68000_base_device* mc68kcpu)
16344 {
16345 uint32_t res = OPER_AY_AI_8(mc68kcpu);
16346 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16347
16348 m68ki_write_8((mc68kcpu), ea, res);
16349
16350 (mc68kcpu)->n_flag = NFLAG_8(res);
16351 (mc68kcpu)->not_z_flag = res;
16352 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16353 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16354 }
16355
16356
16357 static void m68k_op_move_8_pi7_pi(m68000_base_device* mc68kcpu)
16358 {
16359 uint32_t res = OPER_AY_PI_8(mc68kcpu);
16360 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16361
16362 m68ki_write_8((mc68kcpu), ea, res);
16363
16364 (mc68kcpu)->n_flag = NFLAG_8(res);
16365 (mc68kcpu)->not_z_flag = res;
16366 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16367 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16368 }
16369
16370
16371 static void m68k_op_move_8_pi7_pi7(m68000_base_device* mc68kcpu)
16372 {
16373 uint32_t res = OPER_A7_PI_8(mc68kcpu);
16374 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16375
16376 m68ki_write_8((mc68kcpu), ea, res);
16377
16378 (mc68kcpu)->n_flag = NFLAG_8(res);
16379 (mc68kcpu)->not_z_flag = res;
16380 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16381 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16382 }
16383
16384
16385 static void m68k_op_move_8_pi7_pd(m68000_base_device* mc68kcpu)
16386 {
16387 uint32_t res = OPER_AY_PD_8(mc68kcpu);
16388 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16389
16390 m68ki_write_8((mc68kcpu), ea, res);
16391
16392 (mc68kcpu)->n_flag = NFLAG_8(res);
16393 (mc68kcpu)->not_z_flag = res;
16394 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16395 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16396 }
16397
16398
16399 static void m68k_op_move_8_pi7_pd7(m68000_base_device* mc68kcpu)
16400 {
16401 uint32_t res = OPER_A7_PD_8(mc68kcpu);
16402 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16403
16404 m68ki_write_8((mc68kcpu), ea, res);
16405
16406 (mc68kcpu)->n_flag = NFLAG_8(res);
16407 (mc68kcpu)->not_z_flag = res;
16408 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16409 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16410 }
16411
16412
16413 static void m68k_op_move_8_pi7_di(m68000_base_device* mc68kcpu)
16414 {
16415 uint32_t res = OPER_AY_DI_8(mc68kcpu);
16416 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16417
16418 m68ki_write_8((mc68kcpu), ea, res);
16419
16420 (mc68kcpu)->n_flag = NFLAG_8(res);
16421 (mc68kcpu)->not_z_flag = res;
16422 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16423 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16424 }
16425
16426
16427 static void m68k_op_move_8_pi7_ix(m68000_base_device* mc68kcpu)
16428 {
16429 uint32_t res = OPER_AY_IX_8(mc68kcpu);
16430 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16431
16432 m68ki_write_8((mc68kcpu), ea, res);
16433
16434 (mc68kcpu)->n_flag = NFLAG_8(res);
16435 (mc68kcpu)->not_z_flag = res;
16436 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16437 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16438 }
16439
16440
16441 static void m68k_op_move_8_pi7_aw(m68000_base_device* mc68kcpu)
16442 {
16443 uint32_t res = OPER_AW_8(mc68kcpu);
16444 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16445
16446 m68ki_write_8((mc68kcpu), ea, res);
16447
16448 (mc68kcpu)->n_flag = NFLAG_8(res);
16449 (mc68kcpu)->not_z_flag = res;
16450 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16451 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16452 }
16453
16454
16455 static void m68k_op_move_8_pi7_al(m68000_base_device* mc68kcpu)
16456 {
16457 uint32_t res = OPER_AL_8(mc68kcpu);
16458 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16459
16460 m68ki_write_8((mc68kcpu), ea, res);
16461
16462 (mc68kcpu)->n_flag = NFLAG_8(res);
16463 (mc68kcpu)->not_z_flag = res;
16464 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16465 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16466 }
16467
16468
16469 static void m68k_op_move_8_pi7_pcdi(m68000_base_device* mc68kcpu)
16470 {
16471 uint32_t res = OPER_PCDI_8(mc68kcpu);
16472 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16473
16474 m68ki_write_8((mc68kcpu), ea, res);
16475
16476 (mc68kcpu)->n_flag = NFLAG_8(res);
16477 (mc68kcpu)->not_z_flag = res;
16478 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16479 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16480 }
16481
16482
16483 static void m68k_op_move_8_pi7_pcix(m68000_base_device* mc68kcpu)
16484 {
16485 uint32_t res = OPER_PCIX_8(mc68kcpu);
16486 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16487
16488 m68ki_write_8((mc68kcpu), ea, res);
16489
16490 (mc68kcpu)->n_flag = NFLAG_8(res);
16491 (mc68kcpu)->not_z_flag = res;
16492 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16493 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16494 }
16495
16496
16497 static void m68k_op_move_8_pi7_i(m68000_base_device* mc68kcpu)
16498 {
16499 uint32_t res = OPER_I_8(mc68kcpu);
16500 uint32_t ea = EA_A7_PI_8(mc68kcpu);
16501
16502 m68ki_write_8((mc68kcpu), ea, res);
16503
16504 (mc68kcpu)->n_flag = NFLAG_8(res);
16505 (mc68kcpu)->not_z_flag = res;
16506 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16507 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16508 }
16509
16510
16511 static void m68k_op_move_8_pi_ai(m68000_base_device* mc68kcpu)
16512 {
16513 uint32_t res = OPER_AY_AI_8(mc68kcpu);
16514 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16515
16516 m68ki_write_8((mc68kcpu), ea, res);
16517
16518 (mc68kcpu)->n_flag = NFLAG_8(res);
16519 (mc68kcpu)->not_z_flag = res;
16520 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16521 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16522 }
16523
16524
16525 static void m68k_op_move_8_pi_pi(m68000_base_device* mc68kcpu)
16526 {
16527 uint32_t res = OPER_AY_PI_8(mc68kcpu);
16528 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16529
16530 m68ki_write_8((mc68kcpu), ea, res);
16531
16532 (mc68kcpu)->n_flag = NFLAG_8(res);
16533 (mc68kcpu)->not_z_flag = res;
16534 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16535 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16536 }
16537
16538
16539 static void m68k_op_move_8_pi_pi7(m68000_base_device* mc68kcpu)
16540 {
16541 uint32_t res = OPER_A7_PI_8(mc68kcpu);
16542 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16543
16544 m68ki_write_8((mc68kcpu), ea, res);
16545
16546 (mc68kcpu)->n_flag = NFLAG_8(res);
16547 (mc68kcpu)->not_z_flag = res;
16548 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16549 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16550 }
16551
16552
16553 static void m68k_op_move_8_pi_pd(m68000_base_device* mc68kcpu)
16554 {
16555 uint32_t res = OPER_AY_PD_8(mc68kcpu);
16556 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16557
16558 m68ki_write_8((mc68kcpu), ea, res);
16559
16560 (mc68kcpu)->n_flag = NFLAG_8(res);
16561 (mc68kcpu)->not_z_flag = res;
16562 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16563 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16564 }
16565
16566
16567 static void m68k_op_move_8_pi_pd7(m68000_base_device* mc68kcpu)
16568 {
16569 uint32_t res = OPER_A7_PD_8(mc68kcpu);
16570 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16571
16572 m68ki_write_8((mc68kcpu), ea, res);
16573
16574 (mc68kcpu)->n_flag = NFLAG_8(res);
16575 (mc68kcpu)->not_z_flag = res;
16576 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16577 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16578 }
16579
16580
16581 static void m68k_op_move_8_pi_di(m68000_base_device* mc68kcpu)
16582 {
16583 uint32_t res = OPER_AY_DI_8(mc68kcpu);
16584 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16585
16586 m68ki_write_8((mc68kcpu), ea, res);
16587
16588 (mc68kcpu)->n_flag = NFLAG_8(res);
16589 (mc68kcpu)->not_z_flag = res;
16590 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16591 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16592 }
16593
16594
16595 static void m68k_op_move_8_pi_ix(m68000_base_device* mc68kcpu)
16596 {
16597 uint32_t res = OPER_AY_IX_8(mc68kcpu);
16598 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16599
16600 m68ki_write_8((mc68kcpu), ea, res);
16601
16602 (mc68kcpu)->n_flag = NFLAG_8(res);
16603 (mc68kcpu)->not_z_flag = res;
16604 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16605 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16606 }
16607
16608
16609 static void m68k_op_move_8_pi_aw(m68000_base_device* mc68kcpu)
16610 {
16611 uint32_t res = OPER_AW_8(mc68kcpu);
16612 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16613
16614 m68ki_write_8((mc68kcpu), ea, res);
16615
16616 (mc68kcpu)->n_flag = NFLAG_8(res);
16617 (mc68kcpu)->not_z_flag = res;
16618 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16619 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16620 }
16621
16622
16623 static void m68k_op_move_8_pi_al(m68000_base_device* mc68kcpu)
16624 {
16625 uint32_t res = OPER_AL_8(mc68kcpu);
16626 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16627
16628 m68ki_write_8((mc68kcpu), ea, res);
16629
16630 (mc68kcpu)->n_flag = NFLAG_8(res);
16631 (mc68kcpu)->not_z_flag = res;
16632 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16633 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16634 }
16635
16636
16637 static void m68k_op_move_8_pi_pcdi(m68000_base_device* mc68kcpu)
16638 {
16639 uint32_t res = OPER_PCDI_8(mc68kcpu);
16640 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16641
16642 m68ki_write_8((mc68kcpu), ea, res);
16643
16644 (mc68kcpu)->n_flag = NFLAG_8(res);
16645 (mc68kcpu)->not_z_flag = res;
16646 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16647 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16648 }
16649
16650
16651 static void m68k_op_move_8_pi_pcix(m68000_base_device* mc68kcpu)
16652 {
16653 uint32_t res = OPER_PCIX_8(mc68kcpu);
16654 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16655
16656 m68ki_write_8((mc68kcpu), ea, res);
16657
16658 (mc68kcpu)->n_flag = NFLAG_8(res);
16659 (mc68kcpu)->not_z_flag = res;
16660 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16661 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16662 }
16663
16664
16665 static void m68k_op_move_8_pi_i(m68000_base_device* mc68kcpu)
16666 {
16667 uint32_t res = OPER_I_8(mc68kcpu);
16668 uint32_t ea = EA_AX_PI_8(mc68kcpu);
16669
16670 m68ki_write_8((mc68kcpu), ea, res);
16671
16672 (mc68kcpu)->n_flag = NFLAG_8(res);
16673 (mc68kcpu)->not_z_flag = res;
16674 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16675 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16676 }
16677
16678
16679 static void m68k_op_move_8_pd7_d(m68000_base_device* mc68kcpu)
16680 {
16681 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
16682 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16683
16684 m68ki_write_8((mc68kcpu), ea, res);
16685
16686 (mc68kcpu)->n_flag = NFLAG_8(res);
16687 (mc68kcpu)->not_z_flag = res;
16688 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16689 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16690 }
16691
16692
16693 static void m68k_op_move_8_pd_d(m68000_base_device* mc68kcpu)
16694 {
16695 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
16696 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16697
16698 m68ki_write_8((mc68kcpu), ea, res);
16699
16700 (mc68kcpu)->n_flag = NFLAG_8(res);
16701 (mc68kcpu)->not_z_flag = res;
16702 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16703 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16704 }
16705
16706
16707 static void m68k_op_move_8_pd7_ai(m68000_base_device* mc68kcpu)
16708 {
16709 uint32_t res = OPER_AY_AI_8(mc68kcpu);
16710 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16711
16712 m68ki_write_8((mc68kcpu), ea, res);
16713
16714 (mc68kcpu)->n_flag = NFLAG_8(res);
16715 (mc68kcpu)->not_z_flag = res;
16716 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16717 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16718 }
16719
16720
16721 static void m68k_op_move_8_pd7_pi(m68000_base_device* mc68kcpu)
16722 {
16723 uint32_t res = OPER_AY_PI_8(mc68kcpu);
16724 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16725
16726 m68ki_write_8((mc68kcpu), ea, res);
16727
16728 (mc68kcpu)->n_flag = NFLAG_8(res);
16729 (mc68kcpu)->not_z_flag = res;
16730 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16731 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16732 }
16733
16734
16735 static void m68k_op_move_8_pd7_pi7(m68000_base_device* mc68kcpu)
16736 {
16737 uint32_t res = OPER_A7_PI_8(mc68kcpu);
16738 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16739
16740 m68ki_write_8((mc68kcpu), ea, res);
16741
16742 (mc68kcpu)->n_flag = NFLAG_8(res);
16743 (mc68kcpu)->not_z_flag = res;
16744 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16745 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16746 }
16747
16748
16749 static void m68k_op_move_8_pd7_pd(m68000_base_device* mc68kcpu)
16750 {
16751 uint32_t res = OPER_AY_PD_8(mc68kcpu);
16752 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16753
16754 m68ki_write_8((mc68kcpu), ea, res);
16755
16756 (mc68kcpu)->n_flag = NFLAG_8(res);
16757 (mc68kcpu)->not_z_flag = res;
16758 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16759 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16760 }
16761
16762
16763 static void m68k_op_move_8_pd7_pd7(m68000_base_device* mc68kcpu)
16764 {
16765 uint32_t res = OPER_A7_PD_8(mc68kcpu);
16766 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16767
16768 m68ki_write_8((mc68kcpu), ea, res);
16769
16770 (mc68kcpu)->n_flag = NFLAG_8(res);
16771 (mc68kcpu)->not_z_flag = res;
16772 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16773 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16774 }
16775
16776
16777 static void m68k_op_move_8_pd7_di(m68000_base_device* mc68kcpu)
16778 {
16779 uint32_t res = OPER_AY_DI_8(mc68kcpu);
16780 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16781
16782 m68ki_write_8((mc68kcpu), ea, res);
16783
16784 (mc68kcpu)->n_flag = NFLAG_8(res);
16785 (mc68kcpu)->not_z_flag = res;
16786 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16787 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16788 }
16789
16790
16791 static void m68k_op_move_8_pd7_ix(m68000_base_device* mc68kcpu)
16792 {
16793 uint32_t res = OPER_AY_IX_8(mc68kcpu);
16794 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16795
16796 m68ki_write_8((mc68kcpu), ea, res);
16797
16798 (mc68kcpu)->n_flag = NFLAG_8(res);
16799 (mc68kcpu)->not_z_flag = res;
16800 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16801 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16802 }
16803
16804
16805 static void m68k_op_move_8_pd7_aw(m68000_base_device* mc68kcpu)
16806 {
16807 uint32_t res = OPER_AW_8(mc68kcpu);
16808 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16809
16810 m68ki_write_8((mc68kcpu), ea, res);
16811
16812 (mc68kcpu)->n_flag = NFLAG_8(res);
16813 (mc68kcpu)->not_z_flag = res;
16814 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16815 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16816 }
16817
16818
16819 static void m68k_op_move_8_pd7_al(m68000_base_device* mc68kcpu)
16820 {
16821 uint32_t res = OPER_AL_8(mc68kcpu);
16822 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16823
16824 m68ki_write_8((mc68kcpu), ea, res);
16825
16826 (mc68kcpu)->n_flag = NFLAG_8(res);
16827 (mc68kcpu)->not_z_flag = res;
16828 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16829 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16830 }
16831
16832
16833 static void m68k_op_move_8_pd7_pcdi(m68000_base_device* mc68kcpu)
16834 {
16835 uint32_t res = OPER_PCDI_8(mc68kcpu);
16836 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16837
16838 m68ki_write_8((mc68kcpu), ea, res);
16839
16840 (mc68kcpu)->n_flag = NFLAG_8(res);
16841 (mc68kcpu)->not_z_flag = res;
16842 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16843 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16844 }
16845
16846
16847 static void m68k_op_move_8_pd7_pcix(m68000_base_device* mc68kcpu)
16848 {
16849 uint32_t res = OPER_PCIX_8(mc68kcpu);
16850 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16851
16852 m68ki_write_8((mc68kcpu), ea, res);
16853
16854 (mc68kcpu)->n_flag = NFLAG_8(res);
16855 (mc68kcpu)->not_z_flag = res;
16856 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16857 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16858 }
16859
16860
16861 static void m68k_op_move_8_pd7_i(m68000_base_device* mc68kcpu)
16862 {
16863 uint32_t res = OPER_I_8(mc68kcpu);
16864 uint32_t ea = EA_A7_PD_8(mc68kcpu);
16865
16866 m68ki_write_8((mc68kcpu), ea, res);
16867
16868 (mc68kcpu)->n_flag = NFLAG_8(res);
16869 (mc68kcpu)->not_z_flag = res;
16870 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16871 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16872 }
16873
16874
16875 static void m68k_op_move_8_pd_ai(m68000_base_device* mc68kcpu)
16876 {
16877 uint32_t res = OPER_AY_AI_8(mc68kcpu);
16878 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16879
16880 m68ki_write_8((mc68kcpu), ea, res);
16881
16882 (mc68kcpu)->n_flag = NFLAG_8(res);
16883 (mc68kcpu)->not_z_flag = res;
16884 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16885 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16886 }
16887
16888
16889 static void m68k_op_move_8_pd_pi(m68000_base_device* mc68kcpu)
16890 {
16891 uint32_t res = OPER_AY_PI_8(mc68kcpu);
16892 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16893
16894 m68ki_write_8((mc68kcpu), ea, res);
16895
16896 (mc68kcpu)->n_flag = NFLAG_8(res);
16897 (mc68kcpu)->not_z_flag = res;
16898 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16899 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16900 }
16901
16902
16903 static void m68k_op_move_8_pd_pi7(m68000_base_device* mc68kcpu)
16904 {
16905 uint32_t res = OPER_A7_PI_8(mc68kcpu);
16906 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16907
16908 m68ki_write_8((mc68kcpu), ea, res);
16909
16910 (mc68kcpu)->n_flag = NFLAG_8(res);
16911 (mc68kcpu)->not_z_flag = res;
16912 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16913 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16914 }
16915
16916
16917 static void m68k_op_move_8_pd_pd(m68000_base_device* mc68kcpu)
16918 {
16919 uint32_t res = OPER_AY_PD_8(mc68kcpu);
16920 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16921
16922 m68ki_write_8((mc68kcpu), ea, res);
16923
16924 (mc68kcpu)->n_flag = NFLAG_8(res);
16925 (mc68kcpu)->not_z_flag = res;
16926 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16927 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16928 }
16929
16930
16931 static void m68k_op_move_8_pd_pd7(m68000_base_device* mc68kcpu)
16932 {
16933 uint32_t res = OPER_A7_PD_8(mc68kcpu);
16934 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16935
16936 m68ki_write_8((mc68kcpu), ea, res);
16937
16938 (mc68kcpu)->n_flag = NFLAG_8(res);
16939 (mc68kcpu)->not_z_flag = res;
16940 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16941 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16942 }
16943
16944
16945 static void m68k_op_move_8_pd_di(m68000_base_device* mc68kcpu)
16946 {
16947 uint32_t res = OPER_AY_DI_8(mc68kcpu);
16948 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16949
16950 m68ki_write_8((mc68kcpu), ea, res);
16951
16952 (mc68kcpu)->n_flag = NFLAG_8(res);
16953 (mc68kcpu)->not_z_flag = res;
16954 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16955 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16956 }
16957
16958
16959 static void m68k_op_move_8_pd_ix(m68000_base_device* mc68kcpu)
16960 {
16961 uint32_t res = OPER_AY_IX_8(mc68kcpu);
16962 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16963
16964 m68ki_write_8((mc68kcpu), ea, res);
16965
16966 (mc68kcpu)->n_flag = NFLAG_8(res);
16967 (mc68kcpu)->not_z_flag = res;
16968 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16969 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16970 }
16971
16972
16973 static void m68k_op_move_8_pd_aw(m68000_base_device* mc68kcpu)
16974 {
16975 uint32_t res = OPER_AW_8(mc68kcpu);
16976 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16977
16978 m68ki_write_8((mc68kcpu), ea, res);
16979
16980 (mc68kcpu)->n_flag = NFLAG_8(res);
16981 (mc68kcpu)->not_z_flag = res;
16982 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16983 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16984 }
16985
16986
16987 static void m68k_op_move_8_pd_al(m68000_base_device* mc68kcpu)
16988 {
16989 uint32_t res = OPER_AL_8(mc68kcpu);
16990 uint32_t ea = EA_AX_PD_8(mc68kcpu);
16991
16992 m68ki_write_8((mc68kcpu), ea, res);
16993
16994 (mc68kcpu)->n_flag = NFLAG_8(res);
16995 (mc68kcpu)->not_z_flag = res;
16996 (mc68kcpu)->v_flag = VFLAG_CLEAR;
16997 (mc68kcpu)->c_flag = CFLAG_CLEAR;
16998 }
16999
17000
17001 static void m68k_op_move_8_pd_pcdi(m68000_base_device* mc68kcpu)
17002 {
17003 uint32_t res = OPER_PCDI_8(mc68kcpu);
17004 uint32_t ea = EA_AX_PD_8(mc68kcpu);
17005
17006 m68ki_write_8((mc68kcpu), ea, res);
17007
17008 (mc68kcpu)->n_flag = NFLAG_8(res);
17009 (mc68kcpu)->not_z_flag = res;
17010 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17011 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17012 }
17013
17014
17015 static void m68k_op_move_8_pd_pcix(m68000_base_device* mc68kcpu)
17016 {
17017 uint32_t res = OPER_PCIX_8(mc68kcpu);
17018 uint32_t ea = EA_AX_PD_8(mc68kcpu);
17019
17020 m68ki_write_8((mc68kcpu), ea, res);
17021
17022 (mc68kcpu)->n_flag = NFLAG_8(res);
17023 (mc68kcpu)->not_z_flag = res;
17024 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17025 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17026 }
17027
17028
17029 static void m68k_op_move_8_pd_i(m68000_base_device* mc68kcpu)
17030 {
17031 uint32_t res = OPER_I_8(mc68kcpu);
17032 uint32_t ea = EA_AX_PD_8(mc68kcpu);
17033
17034 m68ki_write_8((mc68kcpu), ea, res);
17035
17036 (mc68kcpu)->n_flag = NFLAG_8(res);
17037 (mc68kcpu)->not_z_flag = res;
17038 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17039 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17040 }
17041
17042
17043 static void m68k_op_move_8_di_d(m68000_base_device* mc68kcpu)
17044 {
17045 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
17046 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17047
17048 m68ki_write_8((mc68kcpu), ea, res);
17049
17050 (mc68kcpu)->n_flag = NFLAG_8(res);
17051 (mc68kcpu)->not_z_flag = res;
17052 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17053 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17054 }
17055
17056
17057 static void m68k_op_move_8_di_ai(m68000_base_device* mc68kcpu)
17058 {
17059 uint32_t res = OPER_AY_AI_8(mc68kcpu);
17060 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17061
17062 m68ki_write_8((mc68kcpu), ea, res);
17063
17064 (mc68kcpu)->n_flag = NFLAG_8(res);
17065 (mc68kcpu)->not_z_flag = res;
17066 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17067 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17068 }
17069
17070
17071 static void m68k_op_move_8_di_pi(m68000_base_device* mc68kcpu)
17072 {
17073 uint32_t res = OPER_AY_PI_8(mc68kcpu);
17074 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17075
17076 m68ki_write_8((mc68kcpu), ea, res);
17077
17078 (mc68kcpu)->n_flag = NFLAG_8(res);
17079 (mc68kcpu)->not_z_flag = res;
17080 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17081 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17082 }
17083
17084
17085 static void m68k_op_move_8_di_pi7(m68000_base_device* mc68kcpu)
17086 {
17087 uint32_t res = OPER_A7_PI_8(mc68kcpu);
17088 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17089
17090 m68ki_write_8((mc68kcpu), ea, res);
17091
17092 (mc68kcpu)->n_flag = NFLAG_8(res);
17093 (mc68kcpu)->not_z_flag = res;
17094 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17095 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17096 }
17097
17098
17099 static void m68k_op_move_8_di_pd(m68000_base_device* mc68kcpu)
17100 {
17101 uint32_t res = OPER_AY_PD_8(mc68kcpu);
17102 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17103
17104 m68ki_write_8((mc68kcpu), ea, res);
17105
17106 (mc68kcpu)->n_flag = NFLAG_8(res);
17107 (mc68kcpu)->not_z_flag = res;
17108 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17109 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17110 }
17111
17112
17113 static void m68k_op_move_8_di_pd7(m68000_base_device* mc68kcpu)
17114 {
17115 uint32_t res = OPER_A7_PD_8(mc68kcpu);
17116 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17117
17118 m68ki_write_8((mc68kcpu), ea, res);
17119
17120 (mc68kcpu)->n_flag = NFLAG_8(res);
17121 (mc68kcpu)->not_z_flag = res;
17122 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17123 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17124 }
17125
17126
17127 static void m68k_op_move_8_di_di(m68000_base_device* mc68kcpu)
17128 {
17129 uint32_t res = OPER_AY_DI_8(mc68kcpu);
17130 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17131
17132 m68ki_write_8((mc68kcpu), ea, res);
17133
17134 (mc68kcpu)->n_flag = NFLAG_8(res);
17135 (mc68kcpu)->not_z_flag = res;
17136 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17137 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17138 }
17139
17140
17141 static void m68k_op_move_8_di_ix(m68000_base_device* mc68kcpu)
17142 {
17143 uint32_t res = OPER_AY_IX_8(mc68kcpu);
17144 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17145
17146 m68ki_write_8((mc68kcpu), ea, res);
17147
17148 (mc68kcpu)->n_flag = NFLAG_8(res);
17149 (mc68kcpu)->not_z_flag = res;
17150 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17151 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17152 }
17153
17154
17155 static void m68k_op_move_8_di_aw(m68000_base_device* mc68kcpu)
17156 {
17157 uint32_t res = OPER_AW_8(mc68kcpu);
17158 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17159
17160 m68ki_write_8((mc68kcpu), ea, res);
17161
17162 (mc68kcpu)->n_flag = NFLAG_8(res);
17163 (mc68kcpu)->not_z_flag = res;
17164 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17165 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17166 }
17167
17168
17169 static void m68k_op_move_8_di_al(m68000_base_device* mc68kcpu)
17170 {
17171 uint32_t res = OPER_AL_8(mc68kcpu);
17172 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17173
17174 m68ki_write_8((mc68kcpu), ea, res);
17175
17176 (mc68kcpu)->n_flag = NFLAG_8(res);
17177 (mc68kcpu)->not_z_flag = res;
17178 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17179 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17180 }
17181
17182
17183 static void m68k_op_move_8_di_pcdi(m68000_base_device* mc68kcpu)
17184 {
17185 uint32_t res = OPER_PCDI_8(mc68kcpu);
17186 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17187
17188 m68ki_write_8((mc68kcpu), ea, res);
17189
17190 (mc68kcpu)->n_flag = NFLAG_8(res);
17191 (mc68kcpu)->not_z_flag = res;
17192 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17193 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17194 }
17195
17196
17197 static void m68k_op_move_8_di_pcix(m68000_base_device* mc68kcpu)
17198 {
17199 uint32_t res = OPER_PCIX_8(mc68kcpu);
17200 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17201
17202 m68ki_write_8((mc68kcpu), ea, res);
17203
17204 (mc68kcpu)->n_flag = NFLAG_8(res);
17205 (mc68kcpu)->not_z_flag = res;
17206 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17207 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17208 }
17209
17210
17211 static void m68k_op_move_8_di_i(m68000_base_device* mc68kcpu)
17212 {
17213 uint32_t res = OPER_I_8(mc68kcpu);
17214 uint32_t ea = EA_AX_DI_8(mc68kcpu);
17215
17216 m68ki_write_8((mc68kcpu), ea, res);
17217
17218 (mc68kcpu)->n_flag = NFLAG_8(res);
17219 (mc68kcpu)->not_z_flag = res;
17220 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17221 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17222 }
17223
17224
17225 static void m68k_op_move_8_ix_d(m68000_base_device* mc68kcpu)
17226 {
17227 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
17228 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17229
17230 m68ki_write_8((mc68kcpu), ea, res);
17231
17232 (mc68kcpu)->n_flag = NFLAG_8(res);
17233 (mc68kcpu)->not_z_flag = res;
17234 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17235 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17236 }
17237
17238
17239 static void m68k_op_move_8_ix_ai(m68000_base_device* mc68kcpu)
17240 {
17241 uint32_t res = OPER_AY_AI_8(mc68kcpu);
17242 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17243
17244 m68ki_write_8((mc68kcpu), ea, res);
17245
17246 (mc68kcpu)->n_flag = NFLAG_8(res);
17247 (mc68kcpu)->not_z_flag = res;
17248 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17249 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17250 }
17251
17252
17253 static void m68k_op_move_8_ix_pi(m68000_base_device* mc68kcpu)
17254 {
17255 uint32_t res = OPER_AY_PI_8(mc68kcpu);
17256 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17257
17258 m68ki_write_8((mc68kcpu), ea, res);
17259
17260 (mc68kcpu)->n_flag = NFLAG_8(res);
17261 (mc68kcpu)->not_z_flag = res;
17262 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17263 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17264 }
17265
17266
17267 static void m68k_op_move_8_ix_pi7(m68000_base_device* mc68kcpu)
17268 {
17269 uint32_t res = OPER_A7_PI_8(mc68kcpu);
17270 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17271
17272 m68ki_write_8((mc68kcpu), ea, res);
17273
17274 (mc68kcpu)->n_flag = NFLAG_8(res);
17275 (mc68kcpu)->not_z_flag = res;
17276 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17277 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17278 }
17279
17280
17281 static void m68k_op_move_8_ix_pd(m68000_base_device* mc68kcpu)
17282 {
17283 uint32_t res = OPER_AY_PD_8(mc68kcpu);
17284 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17285
17286 m68ki_write_8((mc68kcpu), ea, res);
17287
17288 (mc68kcpu)->n_flag = NFLAG_8(res);
17289 (mc68kcpu)->not_z_flag = res;
17290 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17291 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17292 }
17293
17294
17295 static void m68k_op_move_8_ix_pd7(m68000_base_device* mc68kcpu)
17296 {
17297 uint32_t res = OPER_A7_PD_8(mc68kcpu);
17298 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17299
17300 m68ki_write_8((mc68kcpu), ea, res);
17301
17302 (mc68kcpu)->n_flag = NFLAG_8(res);
17303 (mc68kcpu)->not_z_flag = res;
17304 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17305 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17306 }
17307
17308
17309 static void m68k_op_move_8_ix_di(m68000_base_device* mc68kcpu)
17310 {
17311 uint32_t res = OPER_AY_DI_8(mc68kcpu);
17312 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17313
17314 m68ki_write_8((mc68kcpu), ea, res);
17315
17316 (mc68kcpu)->n_flag = NFLAG_8(res);
17317 (mc68kcpu)->not_z_flag = res;
17318 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17319 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17320 }
17321
17322
17323 static void m68k_op_move_8_ix_ix(m68000_base_device* mc68kcpu)
17324 {
17325 uint32_t res = OPER_AY_IX_8(mc68kcpu);
17326 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17327
17328 m68ki_write_8((mc68kcpu), ea, res);
17329
17330 (mc68kcpu)->n_flag = NFLAG_8(res);
17331 (mc68kcpu)->not_z_flag = res;
17332 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17333 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17334 }
17335
17336
17337 static void m68k_op_move_8_ix_aw(m68000_base_device* mc68kcpu)
17338 {
17339 uint32_t res = OPER_AW_8(mc68kcpu);
17340 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17341
17342 m68ki_write_8((mc68kcpu), ea, res);
17343
17344 (mc68kcpu)->n_flag = NFLAG_8(res);
17345 (mc68kcpu)->not_z_flag = res;
17346 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17347 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17348 }
17349
17350
17351 static void m68k_op_move_8_ix_al(m68000_base_device* mc68kcpu)
17352 {
17353 uint32_t res = OPER_AL_8(mc68kcpu);
17354 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17355
17356 m68ki_write_8((mc68kcpu), ea, res);
17357
17358 (mc68kcpu)->n_flag = NFLAG_8(res);
17359 (mc68kcpu)->not_z_flag = res;
17360 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17361 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17362 }
17363
17364
17365 static void m68k_op_move_8_ix_pcdi(m68000_base_device* mc68kcpu)
17366 {
17367 uint32_t res = OPER_PCDI_8(mc68kcpu);
17368 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17369
17370 m68ki_write_8((mc68kcpu), ea, res);
17371
17372 (mc68kcpu)->n_flag = NFLAG_8(res);
17373 (mc68kcpu)->not_z_flag = res;
17374 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17375 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17376 }
17377
17378
17379 static void m68k_op_move_8_ix_pcix(m68000_base_device* mc68kcpu)
17380 {
17381 uint32_t res = OPER_PCIX_8(mc68kcpu);
17382 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17383
17384 m68ki_write_8((mc68kcpu), ea, res);
17385
17386 (mc68kcpu)->n_flag = NFLAG_8(res);
17387 (mc68kcpu)->not_z_flag = res;
17388 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17389 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17390 }
17391
17392
17393 static void m68k_op_move_8_ix_i(m68000_base_device* mc68kcpu)
17394 {
17395 uint32_t res = OPER_I_8(mc68kcpu);
17396 uint32_t ea = EA_AX_IX_8(mc68kcpu);
17397
17398 m68ki_write_8((mc68kcpu), ea, res);
17399
17400 (mc68kcpu)->n_flag = NFLAG_8(res);
17401 (mc68kcpu)->not_z_flag = res;
17402 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17403 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17404 }
17405
17406
17407 static void m68k_op_move_8_aw_d(m68000_base_device* mc68kcpu)
17408 {
17409 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
17410 uint32_t ea = EA_AW_8(mc68kcpu);
17411
17412 m68ki_write_8((mc68kcpu), ea, res);
17413
17414 (mc68kcpu)->n_flag = NFLAG_8(res);
17415 (mc68kcpu)->not_z_flag = res;
17416 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17417 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17418 }
17419
17420
17421 static void m68k_op_move_8_aw_ai(m68000_base_device* mc68kcpu)
17422 {
17423 uint32_t res = OPER_AY_AI_8(mc68kcpu);
17424 uint32_t ea = EA_AW_8(mc68kcpu);
17425
17426 m68ki_write_8((mc68kcpu), ea, res);
17427
17428 (mc68kcpu)->n_flag = NFLAG_8(res);
17429 (mc68kcpu)->not_z_flag = res;
17430 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17431 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17432 }
17433
17434
17435 static void m68k_op_move_8_aw_pi(m68000_base_device* mc68kcpu)
17436 {
17437 uint32_t res = OPER_AY_PI_8(mc68kcpu);
17438 uint32_t ea = EA_AW_8(mc68kcpu);
17439
17440 m68ki_write_8((mc68kcpu), ea, res);
17441
17442 (mc68kcpu)->n_flag = NFLAG_8(res);
17443 (mc68kcpu)->not_z_flag = res;
17444 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17445 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17446 }
17447
17448
17449 static void m68k_op_move_8_aw_pi7(m68000_base_device* mc68kcpu)
17450 {
17451 uint32_t res = OPER_A7_PI_8(mc68kcpu);
17452 uint32_t ea = EA_AW_8(mc68kcpu);
17453
17454 m68ki_write_8((mc68kcpu), ea, res);
17455
17456 (mc68kcpu)->n_flag = NFLAG_8(res);
17457 (mc68kcpu)->not_z_flag = res;
17458 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17459 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17460 }
17461
17462
17463 static void m68k_op_move_8_aw_pd(m68000_base_device* mc68kcpu)
17464 {
17465 uint32_t res = OPER_AY_PD_8(mc68kcpu);
17466 uint32_t ea = EA_AW_8(mc68kcpu);
17467
17468 m68ki_write_8((mc68kcpu), ea, res);
17469
17470 (mc68kcpu)->n_flag = NFLAG_8(res);
17471 (mc68kcpu)->not_z_flag = res;
17472 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17473 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17474 }
17475
17476
17477 static void m68k_op_move_8_aw_pd7(m68000_base_device* mc68kcpu)
17478 {
17479 uint32_t res = OPER_A7_PD_8(mc68kcpu);
17480 uint32_t ea = EA_AW_8(mc68kcpu);
17481
17482 m68ki_write_8((mc68kcpu), ea, res);
17483
17484 (mc68kcpu)->n_flag = NFLAG_8(res);
17485 (mc68kcpu)->not_z_flag = res;
17486 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17487 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17488 }
17489
17490
17491 static void m68k_op_move_8_aw_di(m68000_base_device* mc68kcpu)
17492 {
17493 uint32_t res = OPER_AY_DI_8(mc68kcpu);
17494 uint32_t ea = EA_AW_8(mc68kcpu);
17495
17496 m68ki_write_8((mc68kcpu), ea, res);
17497
17498 (mc68kcpu)->n_flag = NFLAG_8(res);
17499 (mc68kcpu)->not_z_flag = res;
17500 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17501 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17502 }
17503
17504
17505 static void m68k_op_move_8_aw_ix(m68000_base_device* mc68kcpu)
17506 {
17507 uint32_t res = OPER_AY_IX_8(mc68kcpu);
17508 uint32_t ea = EA_AW_8(mc68kcpu);
17509
17510 m68ki_write_8((mc68kcpu), ea, res);
17511
17512 (mc68kcpu)->n_flag = NFLAG_8(res);
17513 (mc68kcpu)->not_z_flag = res;
17514 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17515 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17516 }
17517
17518
17519 static void m68k_op_move_8_aw_aw(m68000_base_device* mc68kcpu)
17520 {
17521 uint32_t res = OPER_AW_8(mc68kcpu);
17522 uint32_t ea = EA_AW_8(mc68kcpu);
17523
17524 m68ki_write_8((mc68kcpu), ea, res);
17525
17526 (mc68kcpu)->n_flag = NFLAG_8(res);
17527 (mc68kcpu)->not_z_flag = res;
17528 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17529 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17530 }
17531
17532
17533 static void m68k_op_move_8_aw_al(m68000_base_device* mc68kcpu)
17534 {
17535 uint32_t res = OPER_AL_8(mc68kcpu);
17536 uint32_t ea = EA_AW_8(mc68kcpu);
17537
17538 m68ki_write_8((mc68kcpu), ea, res);
17539
17540 (mc68kcpu)->n_flag = NFLAG_8(res);
17541 (mc68kcpu)->not_z_flag = res;
17542 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17543 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17544 }
17545
17546
17547 static void m68k_op_move_8_aw_pcdi(m68000_base_device* mc68kcpu)
17548 {
17549 uint32_t res = OPER_PCDI_8(mc68kcpu);
17550 uint32_t ea = EA_AW_8(mc68kcpu);
17551
17552 m68ki_write_8((mc68kcpu), ea, res);
17553
17554 (mc68kcpu)->n_flag = NFLAG_8(res);
17555 (mc68kcpu)->not_z_flag = res;
17556 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17557 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17558 }
17559
17560
17561 static void m68k_op_move_8_aw_pcix(m68000_base_device* mc68kcpu)
17562 {
17563 uint32_t res = OPER_PCIX_8(mc68kcpu);
17564 uint32_t ea = EA_AW_8(mc68kcpu);
17565
17566 m68ki_write_8((mc68kcpu), ea, res);
17567
17568 (mc68kcpu)->n_flag = NFLAG_8(res);
17569 (mc68kcpu)->not_z_flag = res;
17570 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17571 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17572 }
17573
17574
17575 static void m68k_op_move_8_aw_i(m68000_base_device* mc68kcpu)
17576 {
17577 uint32_t res = OPER_I_8(mc68kcpu);
17578 uint32_t ea = EA_AW_8(mc68kcpu);
17579
17580 m68ki_write_8((mc68kcpu), ea, res);
17581
17582 (mc68kcpu)->n_flag = NFLAG_8(res);
17583 (mc68kcpu)->not_z_flag = res;
17584 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17585 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17586 }
17587
17588
17589 static void m68k_op_move_8_al_d(m68000_base_device* mc68kcpu)
17590 {
17591 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
17592 uint32_t ea = EA_AL_8(mc68kcpu);
17593
17594 m68ki_write_8((mc68kcpu), ea, res);
17595
17596 (mc68kcpu)->n_flag = NFLAG_8(res);
17597 (mc68kcpu)->not_z_flag = res;
17598 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17599 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17600 }
17601
17602
17603 static void m68k_op_move_8_al_ai(m68000_base_device* mc68kcpu)
17604 {
17605 uint32_t res = OPER_AY_AI_8(mc68kcpu);
17606 uint32_t ea = EA_AL_8(mc68kcpu);
17607
17608 m68ki_write_8((mc68kcpu), ea, res);
17609
17610 (mc68kcpu)->n_flag = NFLAG_8(res);
17611 (mc68kcpu)->not_z_flag = res;
17612 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17613 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17614 }
17615
17616
17617 static void m68k_op_move_8_al_pi(m68000_base_device* mc68kcpu)
17618 {
17619 uint32_t res = OPER_AY_PI_8(mc68kcpu);
17620 uint32_t ea = EA_AL_8(mc68kcpu);
17621
17622 m68ki_write_8((mc68kcpu), ea, res);
17623
17624 (mc68kcpu)->n_flag = NFLAG_8(res);
17625 (mc68kcpu)->not_z_flag = res;
17626 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17627 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17628 }
17629
17630
17631 static void m68k_op_move_8_al_pi7(m68000_base_device* mc68kcpu)
17632 {
17633 uint32_t res = OPER_A7_PI_8(mc68kcpu);
17634 uint32_t ea = EA_AL_8(mc68kcpu);
17635
17636 m68ki_write_8((mc68kcpu), ea, res);
17637
17638 (mc68kcpu)->n_flag = NFLAG_8(res);
17639 (mc68kcpu)->not_z_flag = res;
17640 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17641 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17642 }
17643
17644
17645 static void m68k_op_move_8_al_pd(m68000_base_device* mc68kcpu)
17646 {
17647 uint32_t res = OPER_AY_PD_8(mc68kcpu);
17648 uint32_t ea = EA_AL_8(mc68kcpu);
17649
17650 m68ki_write_8((mc68kcpu), ea, res);
17651
17652 (mc68kcpu)->n_flag = NFLAG_8(res);
17653 (mc68kcpu)->not_z_flag = res;
17654 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17655 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17656 }
17657
17658
17659 static void m68k_op_move_8_al_pd7(m68000_base_device* mc68kcpu)
17660 {
17661 uint32_t res = OPER_A7_PD_8(mc68kcpu);
17662 uint32_t ea = EA_AL_8(mc68kcpu);
17663
17664 m68ki_write_8((mc68kcpu), ea, res);
17665
17666 (mc68kcpu)->n_flag = NFLAG_8(res);
17667 (mc68kcpu)->not_z_flag = res;
17668 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17669 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17670 }
17671
17672
17673 static void m68k_op_move_8_al_di(m68000_base_device* mc68kcpu)
17674 {
17675 uint32_t res = OPER_AY_DI_8(mc68kcpu);
17676 uint32_t ea = EA_AL_8(mc68kcpu);
17677
17678 m68ki_write_8((mc68kcpu), ea, res);
17679
17680 (mc68kcpu)->n_flag = NFLAG_8(res);
17681 (mc68kcpu)->not_z_flag = res;
17682 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17683 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17684 }
17685
17686
17687 static void m68k_op_move_8_al_ix(m68000_base_device* mc68kcpu)
17688 {
17689 uint32_t res = OPER_AY_IX_8(mc68kcpu);
17690 uint32_t ea = EA_AL_8(mc68kcpu);
17691
17692 m68ki_write_8((mc68kcpu), ea, res);
17693
17694 (mc68kcpu)->n_flag = NFLAG_8(res);
17695 (mc68kcpu)->not_z_flag = res;
17696 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17697 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17698 }
17699
17700
17701 static void m68k_op_move_8_al_aw(m68000_base_device* mc68kcpu)
17702 {
17703 uint32_t res = OPER_AW_8(mc68kcpu);
17704 uint32_t ea = EA_AL_8(mc68kcpu);
17705
17706 m68ki_write_8((mc68kcpu), ea, res);
17707
17708 (mc68kcpu)->n_flag = NFLAG_8(res);
17709 (mc68kcpu)->not_z_flag = res;
17710 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17711 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17712 }
17713
17714
17715 static void m68k_op_move_8_al_al(m68000_base_device* mc68kcpu)
17716 {
17717 uint32_t res = OPER_AL_8(mc68kcpu);
17718 uint32_t ea = EA_AL_8(mc68kcpu);
17719
17720 m68ki_write_8((mc68kcpu), ea, res);
17721
17722 (mc68kcpu)->n_flag = NFLAG_8(res);
17723 (mc68kcpu)->not_z_flag = res;
17724 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17725 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17726 }
17727
17728
17729 static void m68k_op_move_8_al_pcdi(m68000_base_device* mc68kcpu)
17730 {
17731 uint32_t res = OPER_PCDI_8(mc68kcpu);
17732 uint32_t ea = EA_AL_8(mc68kcpu);
17733
17734 m68ki_write_8((mc68kcpu), ea, res);
17735
17736 (mc68kcpu)->n_flag = NFLAG_8(res);
17737 (mc68kcpu)->not_z_flag = res;
17738 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17739 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17740 }
17741
17742
17743 static void m68k_op_move_8_al_pcix(m68000_base_device* mc68kcpu)
17744 {
17745 uint32_t res = OPER_PCIX_8(mc68kcpu);
17746 uint32_t ea = EA_AL_8(mc68kcpu);
17747
17748 m68ki_write_8((mc68kcpu), ea, res);
17749
17750 (mc68kcpu)->n_flag = NFLAG_8(res);
17751 (mc68kcpu)->not_z_flag = res;
17752 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17753 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17754 }
17755
17756
17757 static void m68k_op_move_8_al_i(m68000_base_device* mc68kcpu)
17758 {
17759 uint32_t res = OPER_I_8(mc68kcpu);
17760 uint32_t ea = EA_AL_8(mc68kcpu);
17761
17762 m68ki_write_8((mc68kcpu), ea, res);
17763
17764 (mc68kcpu)->n_flag = NFLAG_8(res);
17765 (mc68kcpu)->not_z_flag = res;
17766 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17767 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17768 }
17769
17770
17771 static void m68k_op_move_16_d_d(m68000_base_device* mc68kcpu)
17772 {
17773 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
17774 uint32_t* r_dst = &DX(mc68kcpu);
17775
17776 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17777
17778 (mc68kcpu)->n_flag = NFLAG_16(res);
17779 (mc68kcpu)->not_z_flag = res;
17780 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17781 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17782 }
17783
17784
17785 static void m68k_op_move_16_d_a(m68000_base_device* mc68kcpu)
17786 {
17787 uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu));
17788 uint32_t* r_dst = &DX(mc68kcpu);
17789
17790 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17791
17792 (mc68kcpu)->n_flag = NFLAG_16(res);
17793 (mc68kcpu)->not_z_flag = res;
17794 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17795 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17796 }
17797
17798
17799 static void m68k_op_move_16_d_ai(m68000_base_device* mc68kcpu)
17800 {
17801 uint32_t res = OPER_AY_AI_16(mc68kcpu);
17802 uint32_t* r_dst = &DX(mc68kcpu);
17803
17804 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17805
17806 (mc68kcpu)->n_flag = NFLAG_16(res);
17807 (mc68kcpu)->not_z_flag = res;
17808 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17809 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17810 }
17811
17812
17813 static void m68k_op_move_16_d_pi(m68000_base_device* mc68kcpu)
17814 {
17815 uint32_t res = OPER_AY_PI_16(mc68kcpu);
17816 uint32_t* r_dst = &DX(mc68kcpu);
17817
17818 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17819
17820 (mc68kcpu)->n_flag = NFLAG_16(res);
17821 (mc68kcpu)->not_z_flag = res;
17822 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17823 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17824 }
17825
17826
17827 static void m68k_op_move_16_d_pd(m68000_base_device* mc68kcpu)
17828 {
17829 uint32_t res = OPER_AY_PD_16(mc68kcpu);
17830 uint32_t* r_dst = &DX(mc68kcpu);
17831
17832 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17833
17834 (mc68kcpu)->n_flag = NFLAG_16(res);
17835 (mc68kcpu)->not_z_flag = res;
17836 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17837 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17838 }
17839
17840
17841 static void m68k_op_move_16_d_di(m68000_base_device* mc68kcpu)
17842 {
17843 uint32_t res = OPER_AY_DI_16(mc68kcpu);
17844 uint32_t* r_dst = &DX(mc68kcpu);
17845
17846 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17847
17848 (mc68kcpu)->n_flag = NFLAG_16(res);
17849 (mc68kcpu)->not_z_flag = res;
17850 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17851 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17852 }
17853
17854
17855 static void m68k_op_move_16_d_ix(m68000_base_device* mc68kcpu)
17856 {
17857 uint32_t res = OPER_AY_IX_16(mc68kcpu);
17858 uint32_t* r_dst = &DX(mc68kcpu);
17859
17860 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17861
17862 (mc68kcpu)->n_flag = NFLAG_16(res);
17863 (mc68kcpu)->not_z_flag = res;
17864 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17865 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17866 }
17867
17868
17869 static void m68k_op_move_16_d_aw(m68000_base_device* mc68kcpu)
17870 {
17871 uint32_t res = OPER_AW_16(mc68kcpu);
17872 uint32_t* r_dst = &DX(mc68kcpu);
17873
17874 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17875
17876 (mc68kcpu)->n_flag = NFLAG_16(res);
17877 (mc68kcpu)->not_z_flag = res;
17878 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17879 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17880 }
17881
17882
17883 static void m68k_op_move_16_d_al(m68000_base_device* mc68kcpu)
17884 {
17885 uint32_t res = OPER_AL_16(mc68kcpu);
17886 uint32_t* r_dst = &DX(mc68kcpu);
17887
17888 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17889
17890 (mc68kcpu)->n_flag = NFLAG_16(res);
17891 (mc68kcpu)->not_z_flag = res;
17892 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17893 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17894 }
17895
17896
17897 static void m68k_op_move_16_d_pcdi(m68000_base_device* mc68kcpu)
17898 {
17899 uint32_t res = OPER_PCDI_16(mc68kcpu);
17900 uint32_t* r_dst = &DX(mc68kcpu);
17901
17902 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17903
17904 (mc68kcpu)->n_flag = NFLAG_16(res);
17905 (mc68kcpu)->not_z_flag = res;
17906 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17907 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17908 }
17909
17910
17911 static void m68k_op_move_16_d_pcix(m68000_base_device* mc68kcpu)
17912 {
17913 uint32_t res = OPER_PCIX_16(mc68kcpu);
17914 uint32_t* r_dst = &DX(mc68kcpu);
17915
17916 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17917
17918 (mc68kcpu)->n_flag = NFLAG_16(res);
17919 (mc68kcpu)->not_z_flag = res;
17920 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17921 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17922 }
17923
17924
17925 static void m68k_op_move_16_d_i(m68000_base_device* mc68kcpu)
17926 {
17927 uint32_t res = OPER_I_16(mc68kcpu);
17928 uint32_t* r_dst = &DX(mc68kcpu);
17929
17930 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
17931
17932 (mc68kcpu)->n_flag = NFLAG_16(res);
17933 (mc68kcpu)->not_z_flag = res;
17934 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17935 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17936 }
17937
17938
17939 static void m68k_op_move_16_ai_d(m68000_base_device* mc68kcpu)
17940 {
17941 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
17942 uint32_t ea = EA_AX_AI_16(mc68kcpu);
17943
17944 m68ki_write_16((mc68kcpu), ea, res);
17945
17946 (mc68kcpu)->n_flag = NFLAG_16(res);
17947 (mc68kcpu)->not_z_flag = res;
17948 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17949 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17950 }
17951
17952
17953 static void m68k_op_move_16_ai_a(m68000_base_device* mc68kcpu)
17954 {
17955 uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu));
17956 uint32_t ea = EA_AX_AI_16(mc68kcpu);
17957
17958 m68ki_write_16((mc68kcpu), ea, res);
17959
17960 (mc68kcpu)->n_flag = NFLAG_16(res);
17961 (mc68kcpu)->not_z_flag = res;
17962 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17963 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17964 }
17965
17966
17967 static void m68k_op_move_16_ai_ai(m68000_base_device* mc68kcpu)
17968 {
17969 uint32_t res = OPER_AY_AI_16(mc68kcpu);
17970 uint32_t ea = EA_AX_AI_16(mc68kcpu);
17971
17972 m68ki_write_16((mc68kcpu), ea, res);
17973
17974 (mc68kcpu)->n_flag = NFLAG_16(res);
17975 (mc68kcpu)->not_z_flag = res;
17976 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17977 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17978 }
17979
17980
17981 static void m68k_op_move_16_ai_pi(m68000_base_device* mc68kcpu)
17982 {
17983 uint32_t res = OPER_AY_PI_16(mc68kcpu);
17984 uint32_t ea = EA_AX_AI_16(mc68kcpu);
17985
17986 m68ki_write_16((mc68kcpu), ea, res);
17987
17988 (mc68kcpu)->n_flag = NFLAG_16(res);
17989 (mc68kcpu)->not_z_flag = res;
17990 (mc68kcpu)->v_flag = VFLAG_CLEAR;
17991 (mc68kcpu)->c_flag = CFLAG_CLEAR;
17992 }
17993
17994
17995 static void m68k_op_move_16_ai_pd(m68000_base_device* mc68kcpu)
17996 {
17997 uint32_t res = OPER_AY_PD_16(mc68kcpu);
17998 uint32_t ea = EA_AX_AI_16(mc68kcpu);
17999
18000 m68ki_write_16((mc68kcpu), ea, res);
18001
18002 (mc68kcpu)->n_flag = NFLAG_16(res);
18003 (mc68kcpu)->not_z_flag = res;
18004 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18005 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18006 }
18007
18008
18009 static void m68k_op_move_16_ai_di(m68000_base_device* mc68kcpu)
18010 {
18011 uint32_t res = OPER_AY_DI_16(mc68kcpu);
18012 uint32_t ea = EA_AX_AI_16(mc68kcpu);
18013
18014 m68ki_write_16((mc68kcpu), ea, res);
18015
18016 (mc68kcpu)->n_flag = NFLAG_16(res);
18017 (mc68kcpu)->not_z_flag = res;
18018 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18019 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18020 }
18021
18022
18023 static void m68k_op_move_16_ai_ix(m68000_base_device* mc68kcpu)
18024 {
18025 uint32_t res = OPER_AY_IX_16(mc68kcpu);
18026 uint32_t ea = EA_AX_AI_16(mc68kcpu);
18027
18028 m68ki_write_16((mc68kcpu), ea, res);
18029
18030 (mc68kcpu)->n_flag = NFLAG_16(res);
18031 (mc68kcpu)->not_z_flag = res;
18032 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18033 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18034 }
18035
18036
18037 static void m68k_op_move_16_ai_aw(m68000_base_device* mc68kcpu)
18038 {
18039 uint32_t res = OPER_AW_16(mc68kcpu);
18040 uint32_t ea = EA_AX_AI_16(mc68kcpu);
18041
18042 m68ki_write_16((mc68kcpu), ea, res);
18043
18044 (mc68kcpu)->n_flag = NFLAG_16(res);
18045 (mc68kcpu)->not_z_flag = res;
18046 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18047 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18048 }
18049
18050
18051 static void m68k_op_move_16_ai_al(m68000_base_device* mc68kcpu)
18052 {
18053 uint32_t res = OPER_AL_16(mc68kcpu);
18054 uint32_t ea = EA_AX_AI_16(mc68kcpu);
18055
18056 m68ki_write_16((mc68kcpu), ea, res);
18057
18058 (mc68kcpu)->n_flag = NFLAG_16(res);
18059 (mc68kcpu)->not_z_flag = res;
18060 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18061 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18062 }
18063
18064
18065 static void m68k_op_move_16_ai_pcdi(m68000_base_device* mc68kcpu)
18066 {
18067 uint32_t res = OPER_PCDI_16(mc68kcpu);
18068 uint32_t ea = EA_AX_AI_16(mc68kcpu);
18069
18070 m68ki_write_16((mc68kcpu), ea, res);
18071
18072 (mc68kcpu)->n_flag = NFLAG_16(res);
18073 (mc68kcpu)->not_z_flag = res;
18074 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18075 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18076 }
18077
18078
18079 static void m68k_op_move_16_ai_pcix(m68000_base_device* mc68kcpu)
18080 {
18081 uint32_t res = OPER_PCIX_16(mc68kcpu);
18082 uint32_t ea = EA_AX_AI_16(mc68kcpu);
18083
18084 m68ki_write_16((mc68kcpu), ea, res);
18085
18086 (mc68kcpu)->n_flag = NFLAG_16(res);
18087 (mc68kcpu)->not_z_flag = res;
18088 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18089 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18090 }
18091
18092
18093 static void m68k_op_move_16_ai_i(m68000_base_device* mc68kcpu)
18094 {
18095 uint32_t res = OPER_I_16(mc68kcpu);
18096 uint32_t ea = EA_AX_AI_16(mc68kcpu);
18097
18098 m68ki_write_16((mc68kcpu), ea, res);
18099
18100 (mc68kcpu)->n_flag = NFLAG_16(res);
18101 (mc68kcpu)->not_z_flag = res;
18102 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18103 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18104 }
18105
18106
18107 static void m68k_op_move_16_pi_d(m68000_base_device* mc68kcpu)
18108 {
18109 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
18110 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18111
18112 m68ki_write_16((mc68kcpu), ea, res);
18113
18114 (mc68kcpu)->n_flag = NFLAG_16(res);
18115 (mc68kcpu)->not_z_flag = res;
18116 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18117 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18118 }
18119
18120
18121 static void m68k_op_move_16_pi_a(m68000_base_device* mc68kcpu)
18122 {
18123 uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu));
18124 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18125
18126 m68ki_write_16((mc68kcpu), ea, res);
18127
18128 (mc68kcpu)->n_flag = NFLAG_16(res);
18129 (mc68kcpu)->not_z_flag = res;
18130 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18131 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18132 }
18133
18134
18135 static void m68k_op_move_16_pi_ai(m68000_base_device* mc68kcpu)
18136 {
18137 uint32_t res = OPER_AY_AI_16(mc68kcpu);
18138 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18139
18140 m68ki_write_16((mc68kcpu), ea, res);
18141
18142 (mc68kcpu)->n_flag = NFLAG_16(res);
18143 (mc68kcpu)->not_z_flag = res;
18144 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18145 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18146 }
18147
18148
18149 static void m68k_op_move_16_pi_pi(m68000_base_device* mc68kcpu)
18150 {
18151 uint32_t res = OPER_AY_PI_16(mc68kcpu);
18152 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18153
18154 m68ki_write_16((mc68kcpu), ea, res);
18155
18156 (mc68kcpu)->n_flag = NFLAG_16(res);
18157 (mc68kcpu)->not_z_flag = res;
18158 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18159 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18160 }
18161
18162
18163 static void m68k_op_move_16_pi_pd(m68000_base_device* mc68kcpu)
18164 {
18165 uint32_t res = OPER_AY_PD_16(mc68kcpu);
18166 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18167
18168 m68ki_write_16((mc68kcpu), ea, res);
18169
18170 (mc68kcpu)->n_flag = NFLAG_16(res);
18171 (mc68kcpu)->not_z_flag = res;
18172 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18173 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18174 }
18175
18176
18177 static void m68k_op_move_16_pi_di(m68000_base_device* mc68kcpu)
18178 {
18179 uint32_t res = OPER_AY_DI_16(mc68kcpu);
18180 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18181
18182 m68ki_write_16((mc68kcpu), ea, res);
18183
18184 (mc68kcpu)->n_flag = NFLAG_16(res);
18185 (mc68kcpu)->not_z_flag = res;
18186 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18187 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18188 }
18189
18190
18191 static void m68k_op_move_16_pi_ix(m68000_base_device* mc68kcpu)
18192 {
18193 uint32_t res = OPER_AY_IX_16(mc68kcpu);
18194 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18195
18196 m68ki_write_16((mc68kcpu), ea, res);
18197
18198 (mc68kcpu)->n_flag = NFLAG_16(res);
18199 (mc68kcpu)->not_z_flag = res;
18200 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18201 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18202 }
18203
18204
18205 static void m68k_op_move_16_pi_aw(m68000_base_device* mc68kcpu)
18206 {
18207 uint32_t res = OPER_AW_16(mc68kcpu);
18208 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18209
18210 m68ki_write_16((mc68kcpu), ea, res);
18211
18212 (mc68kcpu)->n_flag = NFLAG_16(res);
18213 (mc68kcpu)->not_z_flag = res;
18214 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18215 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18216 }
18217
18218
18219 static void m68k_op_move_16_pi_al(m68000_base_device* mc68kcpu)
18220 {
18221 uint32_t res = OPER_AL_16(mc68kcpu);
18222 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18223
18224 m68ki_write_16((mc68kcpu), ea, res);
18225
18226 (mc68kcpu)->n_flag = NFLAG_16(res);
18227 (mc68kcpu)->not_z_flag = res;
18228 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18229 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18230 }
18231
18232
18233 static void m68k_op_move_16_pi_pcdi(m68000_base_device* mc68kcpu)
18234 {
18235 uint32_t res = OPER_PCDI_16(mc68kcpu);
18236 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18237
18238 m68ki_write_16((mc68kcpu), ea, res);
18239
18240 (mc68kcpu)->n_flag = NFLAG_16(res);
18241 (mc68kcpu)->not_z_flag = res;
18242 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18243 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18244 }
18245
18246
18247 static void m68k_op_move_16_pi_pcix(m68000_base_device* mc68kcpu)
18248 {
18249 uint32_t res = OPER_PCIX_16(mc68kcpu);
18250 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18251
18252 m68ki_write_16((mc68kcpu), ea, res);
18253
18254 (mc68kcpu)->n_flag = NFLAG_16(res);
18255 (mc68kcpu)->not_z_flag = res;
18256 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18257 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18258 }
18259
18260
18261 static void m68k_op_move_16_pi_i(m68000_base_device* mc68kcpu)
18262 {
18263 uint32_t res = OPER_I_16(mc68kcpu);
18264 uint32_t ea = EA_AX_PI_16(mc68kcpu);
18265
18266 m68ki_write_16((mc68kcpu), ea, res);
18267
18268 (mc68kcpu)->n_flag = NFLAG_16(res);
18269 (mc68kcpu)->not_z_flag = res;
18270 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18271 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18272 }
18273
18274
18275 static void m68k_op_move_16_pd_d(m68000_base_device* mc68kcpu)
18276 {
18277 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
18278 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18279
18280 m68ki_write_16((mc68kcpu), ea, res);
18281
18282 (mc68kcpu)->n_flag = NFLAG_16(res);
18283 (mc68kcpu)->not_z_flag = res;
18284 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18285 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18286 }
18287
18288
18289 static void m68k_op_move_16_pd_a(m68000_base_device* mc68kcpu)
18290 {
18291 uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu));
18292 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18293
18294 m68ki_write_16((mc68kcpu), ea, res);
18295
18296 (mc68kcpu)->n_flag = NFLAG_16(res);
18297 (mc68kcpu)->not_z_flag = res;
18298 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18299 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18300 }
18301
18302
18303 static void m68k_op_move_16_pd_ai(m68000_base_device* mc68kcpu)
18304 {
18305 uint32_t res = OPER_AY_AI_16(mc68kcpu);
18306 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18307
18308 m68ki_write_16((mc68kcpu), ea, res);
18309
18310 (mc68kcpu)->n_flag = NFLAG_16(res);
18311 (mc68kcpu)->not_z_flag = res;
18312 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18313 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18314 }
18315
18316
18317 static void m68k_op_move_16_pd_pi(m68000_base_device* mc68kcpu)
18318 {
18319 uint32_t res = OPER_AY_PI_16(mc68kcpu);
18320 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18321
18322 m68ki_write_16((mc68kcpu), ea, res);
18323
18324 (mc68kcpu)->n_flag = NFLAG_16(res);
18325 (mc68kcpu)->not_z_flag = res;
18326 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18327 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18328 }
18329
18330
18331 static void m68k_op_move_16_pd_pd(m68000_base_device* mc68kcpu)
18332 {
18333 uint32_t res = OPER_AY_PD_16(mc68kcpu);
18334 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18335
18336 m68ki_write_16((mc68kcpu), ea, res);
18337
18338 (mc68kcpu)->n_flag = NFLAG_16(res);
18339 (mc68kcpu)->not_z_flag = res;
18340 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18341 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18342 }
18343
18344
18345 static void m68k_op_move_16_pd_di(m68000_base_device* mc68kcpu)
18346 {
18347 uint32_t res = OPER_AY_DI_16(mc68kcpu);
18348 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18349
18350 m68ki_write_16((mc68kcpu), ea, res);
18351
18352 (mc68kcpu)->n_flag = NFLAG_16(res);
18353 (mc68kcpu)->not_z_flag = res;
18354 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18355 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18356 }
18357
18358
18359 static void m68k_op_move_16_pd_ix(m68000_base_device* mc68kcpu)
18360 {
18361 uint32_t res = OPER_AY_IX_16(mc68kcpu);
18362 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18363
18364 m68ki_write_16((mc68kcpu), ea, res);
18365
18366 (mc68kcpu)->n_flag = NFLAG_16(res);
18367 (mc68kcpu)->not_z_flag = res;
18368 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18369 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18370 }
18371
18372
18373 static void m68k_op_move_16_pd_aw(m68000_base_device* mc68kcpu)
18374 {
18375 uint32_t res = OPER_AW_16(mc68kcpu);
18376 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18377
18378 m68ki_write_16((mc68kcpu), ea, res);
18379
18380 (mc68kcpu)->n_flag = NFLAG_16(res);
18381 (mc68kcpu)->not_z_flag = res;
18382 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18383 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18384 }
18385
18386
18387 static void m68k_op_move_16_pd_al(m68000_base_device* mc68kcpu)
18388 {
18389 uint32_t res = OPER_AL_16(mc68kcpu);
18390 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18391
18392 m68ki_write_16((mc68kcpu), ea, res);
18393
18394 (mc68kcpu)->n_flag = NFLAG_16(res);
18395 (mc68kcpu)->not_z_flag = res;
18396 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18397 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18398 }
18399
18400
18401 static void m68k_op_move_16_pd_pcdi(m68000_base_device* mc68kcpu)
18402 {
18403 uint32_t res = OPER_PCDI_16(mc68kcpu);
18404 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18405
18406 m68ki_write_16((mc68kcpu), ea, res);
18407
18408 (mc68kcpu)->n_flag = NFLAG_16(res);
18409 (mc68kcpu)->not_z_flag = res;
18410 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18411 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18412 }
18413
18414
18415 static void m68k_op_move_16_pd_pcix(m68000_base_device* mc68kcpu)
18416 {
18417 uint32_t res = OPER_PCIX_16(mc68kcpu);
18418 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18419
18420 m68ki_write_16((mc68kcpu), ea, res);
18421
18422 (mc68kcpu)->n_flag = NFLAG_16(res);
18423 (mc68kcpu)->not_z_flag = res;
18424 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18425 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18426 }
18427
18428
18429 static void m68k_op_move_16_pd_i(m68000_base_device* mc68kcpu)
18430 {
18431 uint32_t res = OPER_I_16(mc68kcpu);
18432 uint32_t ea = EA_AX_PD_16(mc68kcpu);
18433
18434 m68ki_write_16((mc68kcpu), ea, res);
18435
18436 (mc68kcpu)->n_flag = NFLAG_16(res);
18437 (mc68kcpu)->not_z_flag = res;
18438 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18439 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18440 }
18441
18442
18443 static void m68k_op_move_16_di_d(m68000_base_device* mc68kcpu)
18444 {
18445 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
18446 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18447
18448 m68ki_write_16((mc68kcpu), ea, res);
18449
18450 (mc68kcpu)->n_flag = NFLAG_16(res);
18451 (mc68kcpu)->not_z_flag = res;
18452 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18453 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18454 }
18455
18456
18457 static void m68k_op_move_16_di_a(m68000_base_device* mc68kcpu)
18458 {
18459 uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu));
18460 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18461
18462 m68ki_write_16((mc68kcpu), ea, res);
18463
18464 (mc68kcpu)->n_flag = NFLAG_16(res);
18465 (mc68kcpu)->not_z_flag = res;
18466 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18467 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18468 }
18469
18470
18471 static void m68k_op_move_16_di_ai(m68000_base_device* mc68kcpu)
18472 {
18473 uint32_t res = OPER_AY_AI_16(mc68kcpu);
18474 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18475
18476 m68ki_write_16((mc68kcpu), ea, res);
18477
18478 (mc68kcpu)->n_flag = NFLAG_16(res);
18479 (mc68kcpu)->not_z_flag = res;
18480 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18481 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18482 }
18483
18484
18485 static void m68k_op_move_16_di_pi(m68000_base_device* mc68kcpu)
18486 {
18487 uint32_t res = OPER_AY_PI_16(mc68kcpu);
18488 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18489
18490 m68ki_write_16((mc68kcpu), ea, res);
18491
18492 (mc68kcpu)->n_flag = NFLAG_16(res);
18493 (mc68kcpu)->not_z_flag = res;
18494 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18495 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18496 }
18497
18498
18499 static void m68k_op_move_16_di_pd(m68000_base_device* mc68kcpu)
18500 {
18501 uint32_t res = OPER_AY_PD_16(mc68kcpu);
18502 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18503
18504 m68ki_write_16((mc68kcpu), ea, res);
18505
18506 (mc68kcpu)->n_flag = NFLAG_16(res);
18507 (mc68kcpu)->not_z_flag = res;
18508 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18509 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18510 }
18511
18512
18513 static void m68k_op_move_16_di_di(m68000_base_device* mc68kcpu)
18514 {
18515 uint32_t res = OPER_AY_DI_16(mc68kcpu);
18516 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18517
18518 m68ki_write_16((mc68kcpu), ea, res);
18519
18520 (mc68kcpu)->n_flag = NFLAG_16(res);
18521 (mc68kcpu)->not_z_flag = res;
18522 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18523 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18524 }
18525
18526
18527 static void m68k_op_move_16_di_ix(m68000_base_device* mc68kcpu)
18528 {
18529 uint32_t res = OPER_AY_IX_16(mc68kcpu);
18530 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18531
18532 m68ki_write_16((mc68kcpu), ea, res);
18533
18534 (mc68kcpu)->n_flag = NFLAG_16(res);
18535 (mc68kcpu)->not_z_flag = res;
18536 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18537 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18538 }
18539
18540
18541 static void m68k_op_move_16_di_aw(m68000_base_device* mc68kcpu)
18542 {
18543 uint32_t res = OPER_AW_16(mc68kcpu);
18544 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18545
18546 m68ki_write_16((mc68kcpu), ea, res);
18547
18548 (mc68kcpu)->n_flag = NFLAG_16(res);
18549 (mc68kcpu)->not_z_flag = res;
18550 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18551 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18552 }
18553
18554
18555 static void m68k_op_move_16_di_al(m68000_base_device* mc68kcpu)
18556 {
18557 uint32_t res = OPER_AL_16(mc68kcpu);
18558 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18559
18560 m68ki_write_16((mc68kcpu), ea, res);
18561
18562 (mc68kcpu)->n_flag = NFLAG_16(res);
18563 (mc68kcpu)->not_z_flag = res;
18564 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18565 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18566 }
18567
18568
18569 static void m68k_op_move_16_di_pcdi(m68000_base_device* mc68kcpu)
18570 {
18571 uint32_t res = OPER_PCDI_16(mc68kcpu);
18572 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18573
18574 m68ki_write_16((mc68kcpu), ea, res);
18575
18576 (mc68kcpu)->n_flag = NFLAG_16(res);
18577 (mc68kcpu)->not_z_flag = res;
18578 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18579 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18580 }
18581
18582
18583 static void m68k_op_move_16_di_pcix(m68000_base_device* mc68kcpu)
18584 {
18585 uint32_t res = OPER_PCIX_16(mc68kcpu);
18586 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18587
18588 m68ki_write_16((mc68kcpu), ea, res);
18589
18590 (mc68kcpu)->n_flag = NFLAG_16(res);
18591 (mc68kcpu)->not_z_flag = res;
18592 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18593 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18594 }
18595
18596
18597 static void m68k_op_move_16_di_i(m68000_base_device* mc68kcpu)
18598 {
18599 uint32_t res = OPER_I_16(mc68kcpu);
18600 uint32_t ea = EA_AX_DI_16(mc68kcpu);
18601
18602 m68ki_write_16((mc68kcpu), ea, res);
18603
18604 (mc68kcpu)->n_flag = NFLAG_16(res);
18605 (mc68kcpu)->not_z_flag = res;
18606 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18607 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18608 }
18609
18610
18611 static void m68k_op_move_16_ix_d(m68000_base_device* mc68kcpu)
18612 {
18613 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
18614 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18615
18616 m68ki_write_16((mc68kcpu), ea, res);
18617
18618 (mc68kcpu)->n_flag = NFLAG_16(res);
18619 (mc68kcpu)->not_z_flag = res;
18620 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18621 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18622 }
18623
18624
18625 static void m68k_op_move_16_ix_a(m68000_base_device* mc68kcpu)
18626 {
18627 uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu));
18628 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18629
18630 m68ki_write_16((mc68kcpu), ea, res);
18631
18632 (mc68kcpu)->n_flag = NFLAG_16(res);
18633 (mc68kcpu)->not_z_flag = res;
18634 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18635 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18636 }
18637
18638
18639 static void m68k_op_move_16_ix_ai(m68000_base_device* mc68kcpu)
18640 {
18641 uint32_t res = OPER_AY_AI_16(mc68kcpu);
18642 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18643
18644 m68ki_write_16((mc68kcpu), ea, res);
18645
18646 (mc68kcpu)->n_flag = NFLAG_16(res);
18647 (mc68kcpu)->not_z_flag = res;
18648 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18649 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18650 }
18651
18652
18653 static void m68k_op_move_16_ix_pi(m68000_base_device* mc68kcpu)
18654 {
18655 uint32_t res = OPER_AY_PI_16(mc68kcpu);
18656 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18657
18658 m68ki_write_16((mc68kcpu), ea, res);
18659
18660 (mc68kcpu)->n_flag = NFLAG_16(res);
18661 (mc68kcpu)->not_z_flag = res;
18662 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18663 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18664 }
18665
18666
18667 static void m68k_op_move_16_ix_pd(m68000_base_device* mc68kcpu)
18668 {
18669 uint32_t res = OPER_AY_PD_16(mc68kcpu);
18670 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18671
18672 m68ki_write_16((mc68kcpu), ea, res);
18673
18674 (mc68kcpu)->n_flag = NFLAG_16(res);
18675 (mc68kcpu)->not_z_flag = res;
18676 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18677 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18678 }
18679
18680
18681 static void m68k_op_move_16_ix_di(m68000_base_device* mc68kcpu)
18682 {
18683 uint32_t res = OPER_AY_DI_16(mc68kcpu);
18684 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18685
18686 m68ki_write_16((mc68kcpu), ea, res);
18687
18688 (mc68kcpu)->n_flag = NFLAG_16(res);
18689 (mc68kcpu)->not_z_flag = res;
18690 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18691 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18692 }
18693
18694
18695 static void m68k_op_move_16_ix_ix(m68000_base_device* mc68kcpu)
18696 {
18697 uint32_t res = OPER_AY_IX_16(mc68kcpu);
18698 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18699
18700 m68ki_write_16((mc68kcpu), ea, res);
18701
18702 (mc68kcpu)->n_flag = NFLAG_16(res);
18703 (mc68kcpu)->not_z_flag = res;
18704 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18705 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18706 }
18707
18708
18709 static void m68k_op_move_16_ix_aw(m68000_base_device* mc68kcpu)
18710 {
18711 uint32_t res = OPER_AW_16(mc68kcpu);
18712 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18713
18714 m68ki_write_16((mc68kcpu), ea, res);
18715
18716 (mc68kcpu)->n_flag = NFLAG_16(res);
18717 (mc68kcpu)->not_z_flag = res;
18718 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18719 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18720 }
18721
18722
18723 static void m68k_op_move_16_ix_al(m68000_base_device* mc68kcpu)
18724 {
18725 uint32_t res = OPER_AL_16(mc68kcpu);
18726 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18727
18728 m68ki_write_16((mc68kcpu), ea, res);
18729
18730 (mc68kcpu)->n_flag = NFLAG_16(res);
18731 (mc68kcpu)->not_z_flag = res;
18732 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18733 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18734 }
18735
18736
18737 static void m68k_op_move_16_ix_pcdi(m68000_base_device* mc68kcpu)
18738 {
18739 uint32_t res = OPER_PCDI_16(mc68kcpu);
18740 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18741
18742 m68ki_write_16((mc68kcpu), ea, res);
18743
18744 (mc68kcpu)->n_flag = NFLAG_16(res);
18745 (mc68kcpu)->not_z_flag = res;
18746 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18747 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18748 }
18749
18750
18751 static void m68k_op_move_16_ix_pcix(m68000_base_device* mc68kcpu)
18752 {
18753 uint32_t res = OPER_PCIX_16(mc68kcpu);
18754 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18755
18756 m68ki_write_16((mc68kcpu), ea, res);
18757
18758 (mc68kcpu)->n_flag = NFLAG_16(res);
18759 (mc68kcpu)->not_z_flag = res;
18760 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18761 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18762 }
18763
18764
18765 static void m68k_op_move_16_ix_i(m68000_base_device* mc68kcpu)
18766 {
18767 uint32_t res = OPER_I_16(mc68kcpu);
18768 uint32_t ea = EA_AX_IX_16(mc68kcpu);
18769
18770 m68ki_write_16((mc68kcpu), ea, res);
18771
18772 (mc68kcpu)->n_flag = NFLAG_16(res);
18773 (mc68kcpu)->not_z_flag = res;
18774 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18775 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18776 }
18777
18778
18779 static void m68k_op_move_16_aw_d(m68000_base_device* mc68kcpu)
18780 {
18781 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
18782 uint32_t ea = EA_AW_16(mc68kcpu);
18783
18784 m68ki_write_16((mc68kcpu), ea, res);
18785
18786 (mc68kcpu)->n_flag = NFLAG_16(res);
18787 (mc68kcpu)->not_z_flag = res;
18788 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18789 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18790 }
18791
18792
18793 static void m68k_op_move_16_aw_a(m68000_base_device* mc68kcpu)
18794 {
18795 uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu));
18796 uint32_t ea = EA_AW_16(mc68kcpu);
18797
18798 m68ki_write_16((mc68kcpu), ea, res);
18799
18800 (mc68kcpu)->n_flag = NFLAG_16(res);
18801 (mc68kcpu)->not_z_flag = res;
18802 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18803 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18804 }
18805
18806
18807 static void m68k_op_move_16_aw_ai(m68000_base_device* mc68kcpu)
18808 {
18809 uint32_t res = OPER_AY_AI_16(mc68kcpu);
18810 uint32_t ea = EA_AW_16(mc68kcpu);
18811
18812 m68ki_write_16((mc68kcpu), ea, res);
18813
18814 (mc68kcpu)->n_flag = NFLAG_16(res);
18815 (mc68kcpu)->not_z_flag = res;
18816 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18817 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18818 }
18819
18820
18821 static void m68k_op_move_16_aw_pi(m68000_base_device* mc68kcpu)
18822 {
18823 uint32_t res = OPER_AY_PI_16(mc68kcpu);
18824 uint32_t ea = EA_AW_16(mc68kcpu);
18825
18826 m68ki_write_16((mc68kcpu), ea, res);
18827
18828 (mc68kcpu)->n_flag = NFLAG_16(res);
18829 (mc68kcpu)->not_z_flag = res;
18830 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18831 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18832 }
18833
18834
18835 static void m68k_op_move_16_aw_pd(m68000_base_device* mc68kcpu)
18836 {
18837 uint32_t res = OPER_AY_PD_16(mc68kcpu);
18838 uint32_t ea = EA_AW_16(mc68kcpu);
18839
18840 m68ki_write_16((mc68kcpu), ea, res);
18841
18842 (mc68kcpu)->n_flag = NFLAG_16(res);
18843 (mc68kcpu)->not_z_flag = res;
18844 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18845 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18846 }
18847
18848
18849 static void m68k_op_move_16_aw_di(m68000_base_device* mc68kcpu)
18850 {
18851 uint32_t res = OPER_AY_DI_16(mc68kcpu);
18852 uint32_t ea = EA_AW_16(mc68kcpu);
18853
18854 m68ki_write_16((mc68kcpu), ea, res);
18855
18856 (mc68kcpu)->n_flag = NFLAG_16(res);
18857 (mc68kcpu)->not_z_flag = res;
18858 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18859 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18860 }
18861
18862
18863 static void m68k_op_move_16_aw_ix(m68000_base_device* mc68kcpu)
18864 {
18865 uint32_t res = OPER_AY_IX_16(mc68kcpu);
18866 uint32_t ea = EA_AW_16(mc68kcpu);
18867
18868 m68ki_write_16((mc68kcpu), ea, res);
18869
18870 (mc68kcpu)->n_flag = NFLAG_16(res);
18871 (mc68kcpu)->not_z_flag = res;
18872 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18873 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18874 }
18875
18876
18877 static void m68k_op_move_16_aw_aw(m68000_base_device* mc68kcpu)
18878 {
18879 uint32_t res = OPER_AW_16(mc68kcpu);
18880 uint32_t ea = EA_AW_16(mc68kcpu);
18881
18882 m68ki_write_16((mc68kcpu), ea, res);
18883
18884 (mc68kcpu)->n_flag = NFLAG_16(res);
18885 (mc68kcpu)->not_z_flag = res;
18886 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18887 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18888 }
18889
18890
18891 static void m68k_op_move_16_aw_al(m68000_base_device* mc68kcpu)
18892 {
18893 uint32_t res = OPER_AL_16(mc68kcpu);
18894 uint32_t ea = EA_AW_16(mc68kcpu);
18895
18896 m68ki_write_16((mc68kcpu), ea, res);
18897
18898 (mc68kcpu)->n_flag = NFLAG_16(res);
18899 (mc68kcpu)->not_z_flag = res;
18900 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18901 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18902 }
18903
18904
18905 static void m68k_op_move_16_aw_pcdi(m68000_base_device* mc68kcpu)
18906 {
18907 uint32_t res = OPER_PCDI_16(mc68kcpu);
18908 uint32_t ea = EA_AW_16(mc68kcpu);
18909
18910 m68ki_write_16((mc68kcpu), ea, res);
18911
18912 (mc68kcpu)->n_flag = NFLAG_16(res);
18913 (mc68kcpu)->not_z_flag = res;
18914 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18915 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18916 }
18917
18918
18919 static void m68k_op_move_16_aw_pcix(m68000_base_device* mc68kcpu)
18920 {
18921 uint32_t res = OPER_PCIX_16(mc68kcpu);
18922 uint32_t ea = EA_AW_16(mc68kcpu);
18923
18924 m68ki_write_16((mc68kcpu), ea, res);
18925
18926 (mc68kcpu)->n_flag = NFLAG_16(res);
18927 (mc68kcpu)->not_z_flag = res;
18928 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18929 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18930 }
18931
18932
18933 static void m68k_op_move_16_aw_i(m68000_base_device* mc68kcpu)
18934 {
18935 uint32_t res = OPER_I_16(mc68kcpu);
18936 uint32_t ea = EA_AW_16(mc68kcpu);
18937
18938 m68ki_write_16((mc68kcpu), ea, res);
18939
18940 (mc68kcpu)->n_flag = NFLAG_16(res);
18941 (mc68kcpu)->not_z_flag = res;
18942 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18943 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18944 }
18945
18946
18947 static void m68k_op_move_16_al_d(m68000_base_device* mc68kcpu)
18948 {
18949 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
18950 uint32_t ea = EA_AL_16(mc68kcpu);
18951
18952 m68ki_write_16((mc68kcpu), ea, res);
18953
18954 (mc68kcpu)->n_flag = NFLAG_16(res);
18955 (mc68kcpu)->not_z_flag = res;
18956 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18957 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18958 }
18959
18960
18961 static void m68k_op_move_16_al_a(m68000_base_device* mc68kcpu)
18962 {
18963 uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu));
18964 uint32_t ea = EA_AL_16(mc68kcpu);
18965
18966 m68ki_write_16((mc68kcpu), ea, res);
18967
18968 (mc68kcpu)->n_flag = NFLAG_16(res);
18969 (mc68kcpu)->not_z_flag = res;
18970 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18971 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18972 }
18973
18974
18975 static void m68k_op_move_16_al_ai(m68000_base_device* mc68kcpu)
18976 {
18977 uint32_t res = OPER_AY_AI_16(mc68kcpu);
18978 uint32_t ea = EA_AL_16(mc68kcpu);
18979
18980 m68ki_write_16((mc68kcpu), ea, res);
18981
18982 (mc68kcpu)->n_flag = NFLAG_16(res);
18983 (mc68kcpu)->not_z_flag = res;
18984 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18985 (mc68kcpu)->c_flag = CFLAG_CLEAR;
18986 }
18987
18988
18989 static void m68k_op_move_16_al_pi(m68000_base_device* mc68kcpu)
18990 {
18991 uint32_t res = OPER_AY_PI_16(mc68kcpu);
18992 uint32_t ea = EA_AL_16(mc68kcpu);
18993
18994 m68ki_write_16((mc68kcpu), ea, res);
18995
18996 (mc68kcpu)->n_flag = NFLAG_16(res);
18997 (mc68kcpu)->not_z_flag = res;
18998 (mc68kcpu)->v_flag = VFLAG_CLEAR;
18999 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19000 }
19001
19002
19003 static void m68k_op_move_16_al_pd(m68000_base_device* mc68kcpu)
19004 {
19005 uint32_t res = OPER_AY_PD_16(mc68kcpu);
19006 uint32_t ea = EA_AL_16(mc68kcpu);
19007
19008 m68ki_write_16((mc68kcpu), ea, res);
19009
19010 (mc68kcpu)->n_flag = NFLAG_16(res);
19011 (mc68kcpu)->not_z_flag = res;
19012 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19013 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19014 }
19015
19016
19017 static void m68k_op_move_16_al_di(m68000_base_device* mc68kcpu)
19018 {
19019 uint32_t res = OPER_AY_DI_16(mc68kcpu);
19020 uint32_t ea = EA_AL_16(mc68kcpu);
19021
19022 m68ki_write_16((mc68kcpu), ea, res);
19023
19024 (mc68kcpu)->n_flag = NFLAG_16(res);
19025 (mc68kcpu)->not_z_flag = res;
19026 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19027 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19028 }
19029
19030
19031 static void m68k_op_move_16_al_ix(m68000_base_device* mc68kcpu)
19032 {
19033 uint32_t res = OPER_AY_IX_16(mc68kcpu);
19034 uint32_t ea = EA_AL_16(mc68kcpu);
19035
19036 m68ki_write_16((mc68kcpu), ea, res);
19037
19038 (mc68kcpu)->n_flag = NFLAG_16(res);
19039 (mc68kcpu)->not_z_flag = res;
19040 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19041 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19042 }
19043
19044
19045 static void m68k_op_move_16_al_aw(m68000_base_device* mc68kcpu)
19046 {
19047 uint32_t res = OPER_AW_16(mc68kcpu);
19048 uint32_t ea = EA_AL_16(mc68kcpu);
19049
19050 m68ki_write_16((mc68kcpu), ea, res);
19051
19052 (mc68kcpu)->n_flag = NFLAG_16(res);
19053 (mc68kcpu)->not_z_flag = res;
19054 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19055 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19056 }
19057
19058
19059 static void m68k_op_move_16_al_al(m68000_base_device* mc68kcpu)
19060 {
19061 uint32_t res = OPER_AL_16(mc68kcpu);
19062 uint32_t ea = EA_AL_16(mc68kcpu);
19063
19064 m68ki_write_16((mc68kcpu), ea, res);
19065
19066 (mc68kcpu)->n_flag = NFLAG_16(res);
19067 (mc68kcpu)->not_z_flag = res;
19068 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19069 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19070 }
19071
19072
19073 static void m68k_op_move_16_al_pcdi(m68000_base_device* mc68kcpu)
19074 {
19075 uint32_t res = OPER_PCDI_16(mc68kcpu);
19076 uint32_t ea = EA_AL_16(mc68kcpu);
19077
19078 m68ki_write_16((mc68kcpu), ea, res);
19079
19080 (mc68kcpu)->n_flag = NFLAG_16(res);
19081 (mc68kcpu)->not_z_flag = res;
19082 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19083 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19084 }
19085
19086
19087 static void m68k_op_move_16_al_pcix(m68000_base_device* mc68kcpu)
19088 {
19089 uint32_t res = OPER_PCIX_16(mc68kcpu);
19090 uint32_t ea = EA_AL_16(mc68kcpu);
19091
19092 m68ki_write_16((mc68kcpu), ea, res);
19093
19094 (mc68kcpu)->n_flag = NFLAG_16(res);
19095 (mc68kcpu)->not_z_flag = res;
19096 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19097 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19098 }
19099
19100
19101 static void m68k_op_move_16_al_i(m68000_base_device* mc68kcpu)
19102 {
19103 uint32_t res = OPER_I_16(mc68kcpu);
19104 uint32_t ea = EA_AL_16(mc68kcpu);
19105
19106 m68ki_write_16((mc68kcpu), ea, res);
19107
19108 (mc68kcpu)->n_flag = NFLAG_16(res);
19109 (mc68kcpu)->not_z_flag = res;
19110 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19111 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19112 }
19113
19114
19115 static void m68k_op_move_32_d_d(m68000_base_device* mc68kcpu)
19116 {
19117 uint32_t res = DY(mc68kcpu);
19118 uint32_t* r_dst = &DX(mc68kcpu);
19119
19120 *r_dst = res;
19121
19122 (mc68kcpu)->n_flag = NFLAG_32(res);
19123 (mc68kcpu)->not_z_flag = res;
19124 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19125 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19126 }
19127
19128
19129 static void m68k_op_move_32_d_a(m68000_base_device* mc68kcpu)
19130 {
19131 uint32_t res = AY(mc68kcpu);
19132 uint32_t* r_dst = &DX(mc68kcpu);
19133
19134 *r_dst = res;
19135
19136 (mc68kcpu)->n_flag = NFLAG_32(res);
19137 (mc68kcpu)->not_z_flag = res;
19138 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19139 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19140 }
19141
19142
19143 static void m68k_op_move_32_d_ai(m68000_base_device* mc68kcpu)
19144 {
19145 uint32_t res = OPER_AY_AI_32(mc68kcpu);
19146 uint32_t* r_dst = &DX(mc68kcpu);
19147
19148 *r_dst = res;
19149
19150 (mc68kcpu)->n_flag = NFLAG_32(res);
19151 (mc68kcpu)->not_z_flag = res;
19152 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19153 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19154 }
19155
19156
19157 static void m68k_op_move_32_d_pi(m68000_base_device* mc68kcpu)
19158 {
19159 uint32_t res = OPER_AY_PI_32(mc68kcpu);
19160 uint32_t* r_dst = &DX(mc68kcpu);
19161
19162 *r_dst = res;
19163
19164 (mc68kcpu)->n_flag = NFLAG_32(res);
19165 (mc68kcpu)->not_z_flag = res;
19166 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19167 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19168 }
19169
19170
19171 static void m68k_op_move_32_d_pd(m68000_base_device* mc68kcpu)
19172 {
19173 uint32_t res = OPER_AY_PD_32(mc68kcpu);
19174 uint32_t* r_dst = &DX(mc68kcpu);
19175
19176 *r_dst = res;
19177
19178 (mc68kcpu)->n_flag = NFLAG_32(res);
19179 (mc68kcpu)->not_z_flag = res;
19180 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19181 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19182 }
19183
19184
19185 static void m68k_op_move_32_d_di(m68000_base_device* mc68kcpu)
19186 {
19187 uint32_t res = OPER_AY_DI_32(mc68kcpu);
19188 uint32_t* r_dst = &DX(mc68kcpu);
19189
19190 *r_dst = res;
19191
19192 (mc68kcpu)->n_flag = NFLAG_32(res);
19193 (mc68kcpu)->not_z_flag = res;
19194 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19195 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19196 }
19197
19198
19199 static void m68k_op_move_32_d_ix(m68000_base_device* mc68kcpu)
19200 {
19201 uint32_t res = OPER_AY_IX_32(mc68kcpu);
19202 uint32_t* r_dst = &DX(mc68kcpu);
19203
19204 *r_dst = res;
19205
19206 (mc68kcpu)->n_flag = NFLAG_32(res);
19207 (mc68kcpu)->not_z_flag = res;
19208 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19209 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19210 }
19211
19212
19213 static void m68k_op_move_32_d_aw(m68000_base_device* mc68kcpu)
19214 {
19215 uint32_t res = OPER_AW_32(mc68kcpu);
19216 uint32_t* r_dst = &DX(mc68kcpu);
19217
19218 *r_dst = res;
19219
19220 (mc68kcpu)->n_flag = NFLAG_32(res);
19221 (mc68kcpu)->not_z_flag = res;
19222 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19223 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19224 }
19225
19226
19227 static void m68k_op_move_32_d_al(m68000_base_device* mc68kcpu)
19228 {
19229 uint32_t res = OPER_AL_32(mc68kcpu);
19230 uint32_t* r_dst = &DX(mc68kcpu);
19231
19232 *r_dst = res;
19233
19234 (mc68kcpu)->n_flag = NFLAG_32(res);
19235 (mc68kcpu)->not_z_flag = res;
19236 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19237 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19238 }
19239
19240
19241 static void m68k_op_move_32_d_pcdi(m68000_base_device* mc68kcpu)
19242 {
19243 uint32_t res = OPER_PCDI_32(mc68kcpu);
19244 uint32_t* r_dst = &DX(mc68kcpu);
19245
19246 *r_dst = res;
19247
19248 (mc68kcpu)->n_flag = NFLAG_32(res);
19249 (mc68kcpu)->not_z_flag = res;
19250 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19251 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19252 }
19253
19254
19255 static void m68k_op_move_32_d_pcix(m68000_base_device* mc68kcpu)
19256 {
19257 uint32_t res = OPER_PCIX_32(mc68kcpu);
19258 uint32_t* r_dst = &DX(mc68kcpu);
19259
19260 *r_dst = res;
19261
19262 (mc68kcpu)->n_flag = NFLAG_32(res);
19263 (mc68kcpu)->not_z_flag = res;
19264 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19265 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19266 }
19267
19268
19269 static void m68k_op_move_32_d_i(m68000_base_device* mc68kcpu)
19270 {
19271 uint32_t res = OPER_I_32(mc68kcpu);
19272 uint32_t* r_dst = &DX(mc68kcpu);
19273
19274 *r_dst = res;
19275
19276 (mc68kcpu)->n_flag = NFLAG_32(res);
19277 (mc68kcpu)->not_z_flag = res;
19278 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19279 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19280 }
19281
19282
19283 static void m68k_op_move_32_ai_d(m68000_base_device* mc68kcpu)
19284 {
19285 uint32_t res = DY(mc68kcpu);
19286 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19287
19288 m68ki_write_32((mc68kcpu), ea, res);
19289
19290 (mc68kcpu)->n_flag = NFLAG_32(res);
19291 (mc68kcpu)->not_z_flag = res;
19292 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19293 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19294 }
19295
19296
19297 static void m68k_op_move_32_ai_a(m68000_base_device* mc68kcpu)
19298 {
19299 uint32_t res = AY(mc68kcpu);
19300 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19301
19302 m68ki_write_32((mc68kcpu), ea, res);
19303
19304 (mc68kcpu)->n_flag = NFLAG_32(res);
19305 (mc68kcpu)->not_z_flag = res;
19306 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19307 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19308 }
19309
19310
19311 static void m68k_op_move_32_ai_ai(m68000_base_device* mc68kcpu)
19312 {
19313 uint32_t res = OPER_AY_AI_32(mc68kcpu);
19314 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19315
19316 m68ki_write_32((mc68kcpu), ea, res);
19317
19318 (mc68kcpu)->n_flag = NFLAG_32(res);
19319 (mc68kcpu)->not_z_flag = res;
19320 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19321 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19322 }
19323
19324
19325 static void m68k_op_move_32_ai_pi(m68000_base_device* mc68kcpu)
19326 {
19327 uint32_t res = OPER_AY_PI_32(mc68kcpu);
19328 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19329
19330 m68ki_write_32((mc68kcpu), ea, res);
19331
19332 (mc68kcpu)->n_flag = NFLAG_32(res);
19333 (mc68kcpu)->not_z_flag = res;
19334 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19335 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19336 }
19337
19338
19339 static void m68k_op_move_32_ai_pd(m68000_base_device* mc68kcpu)
19340 {
19341 uint32_t res = OPER_AY_PD_32(mc68kcpu);
19342 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19343
19344 m68ki_write_32((mc68kcpu), ea, res);
19345
19346 (mc68kcpu)->n_flag = NFLAG_32(res);
19347 (mc68kcpu)->not_z_flag = res;
19348 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19349 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19350 }
19351
19352
19353 static void m68k_op_move_32_ai_di(m68000_base_device* mc68kcpu)
19354 {
19355 uint32_t res = OPER_AY_DI_32(mc68kcpu);
19356 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19357
19358 m68ki_write_32((mc68kcpu), ea, res);
19359
19360 (mc68kcpu)->n_flag = NFLAG_32(res);
19361 (mc68kcpu)->not_z_flag = res;
19362 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19363 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19364 }
19365
19366
19367 static void m68k_op_move_32_ai_ix(m68000_base_device* mc68kcpu)
19368 {
19369 uint32_t res = OPER_AY_IX_32(mc68kcpu);
19370 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19371
19372 m68ki_write_32((mc68kcpu), ea, res);
19373
19374 (mc68kcpu)->n_flag = NFLAG_32(res);
19375 (mc68kcpu)->not_z_flag = res;
19376 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19377 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19378 }
19379
19380
19381 static void m68k_op_move_32_ai_aw(m68000_base_device* mc68kcpu)
19382 {
19383 uint32_t res = OPER_AW_32(mc68kcpu);
19384 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19385
19386 m68ki_write_32((mc68kcpu), ea, res);
19387
19388 (mc68kcpu)->n_flag = NFLAG_32(res);
19389 (mc68kcpu)->not_z_flag = res;
19390 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19391 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19392 }
19393
19394
19395 static void m68k_op_move_32_ai_al(m68000_base_device* mc68kcpu)
19396 {
19397 uint32_t res = OPER_AL_32(mc68kcpu);
19398 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19399
19400 m68ki_write_32((mc68kcpu), ea, res);
19401
19402 (mc68kcpu)->n_flag = NFLAG_32(res);
19403 (mc68kcpu)->not_z_flag = res;
19404 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19405 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19406 }
19407
19408
19409 static void m68k_op_move_32_ai_pcdi(m68000_base_device* mc68kcpu)
19410 {
19411 uint32_t res = OPER_PCDI_32(mc68kcpu);
19412 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19413
19414 m68ki_write_32((mc68kcpu), ea, res);
19415
19416 (mc68kcpu)->n_flag = NFLAG_32(res);
19417 (mc68kcpu)->not_z_flag = res;
19418 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19419 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19420 }
19421
19422
19423 static void m68k_op_move_32_ai_pcix(m68000_base_device* mc68kcpu)
19424 {
19425 uint32_t res = OPER_PCIX_32(mc68kcpu);
19426 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19427
19428 m68ki_write_32((mc68kcpu), ea, res);
19429
19430 (mc68kcpu)->n_flag = NFLAG_32(res);
19431 (mc68kcpu)->not_z_flag = res;
19432 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19433 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19434 }
19435
19436
19437 static void m68k_op_move_32_ai_i(m68000_base_device* mc68kcpu)
19438 {
19439 uint32_t res = OPER_I_32(mc68kcpu);
19440 uint32_t ea = EA_AX_AI_32(mc68kcpu);
19441
19442 m68ki_write_32((mc68kcpu), ea, res);
19443
19444 (mc68kcpu)->n_flag = NFLAG_32(res);
19445 (mc68kcpu)->not_z_flag = res;
19446 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19447 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19448 }
19449
19450
19451 static void m68k_op_move_32_pi_d(m68000_base_device* mc68kcpu)
19452 {
19453 uint32_t res = DY(mc68kcpu);
19454 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19455
19456 m68ki_write_32((mc68kcpu), ea, res);
19457
19458 (mc68kcpu)->n_flag = NFLAG_32(res);
19459 (mc68kcpu)->not_z_flag = res;
19460 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19461 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19462 }
19463
19464
19465 static void m68k_op_move_32_pi_a(m68000_base_device* mc68kcpu)
19466 {
19467 uint32_t res = AY(mc68kcpu);
19468 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19469
19470 m68ki_write_32((mc68kcpu), ea, res);
19471
19472 (mc68kcpu)->n_flag = NFLAG_32(res);
19473 (mc68kcpu)->not_z_flag = res;
19474 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19475 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19476 }
19477
19478
19479 static void m68k_op_move_32_pi_ai(m68000_base_device* mc68kcpu)
19480 {
19481 uint32_t res = OPER_AY_AI_32(mc68kcpu);
19482 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19483
19484 m68ki_write_32((mc68kcpu), ea, res);
19485
19486 (mc68kcpu)->n_flag = NFLAG_32(res);
19487 (mc68kcpu)->not_z_flag = res;
19488 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19489 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19490 }
19491
19492
19493 static void m68k_op_move_32_pi_pi(m68000_base_device* mc68kcpu)
19494 {
19495 uint32_t res = OPER_AY_PI_32(mc68kcpu);
19496 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19497
19498 m68ki_write_32((mc68kcpu), ea, res);
19499
19500 (mc68kcpu)->n_flag = NFLAG_32(res);
19501 (mc68kcpu)->not_z_flag = res;
19502 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19503 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19504 }
19505
19506
19507 static void m68k_op_move_32_pi_pd(m68000_base_device* mc68kcpu)
19508 {
19509 uint32_t res = OPER_AY_PD_32(mc68kcpu);
19510 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19511
19512 m68ki_write_32((mc68kcpu), ea, res);
19513
19514 (mc68kcpu)->n_flag = NFLAG_32(res);
19515 (mc68kcpu)->not_z_flag = res;
19516 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19517 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19518 }
19519
19520
19521 static void m68k_op_move_32_pi_di(m68000_base_device* mc68kcpu)
19522 {
19523 uint32_t res = OPER_AY_DI_32(mc68kcpu);
19524 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19525
19526 m68ki_write_32((mc68kcpu), ea, res);
19527
19528 (mc68kcpu)->n_flag = NFLAG_32(res);
19529 (mc68kcpu)->not_z_flag = res;
19530 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19531 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19532 }
19533
19534
19535 static void m68k_op_move_32_pi_ix(m68000_base_device* mc68kcpu)
19536 {
19537 uint32_t res = OPER_AY_IX_32(mc68kcpu);
19538 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19539
19540 m68ki_write_32((mc68kcpu), ea, res);
19541
19542 (mc68kcpu)->n_flag = NFLAG_32(res);
19543 (mc68kcpu)->not_z_flag = res;
19544 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19545 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19546 }
19547
19548
19549 static void m68k_op_move_32_pi_aw(m68000_base_device* mc68kcpu)
19550 {
19551 uint32_t res = OPER_AW_32(mc68kcpu);
19552 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19553
19554 m68ki_write_32((mc68kcpu), ea, res);
19555
19556 (mc68kcpu)->n_flag = NFLAG_32(res);
19557 (mc68kcpu)->not_z_flag = res;
19558 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19559 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19560 }
19561
19562
19563 static void m68k_op_move_32_pi_al(m68000_base_device* mc68kcpu)
19564 {
19565 uint32_t res = OPER_AL_32(mc68kcpu);
19566 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19567
19568 m68ki_write_32((mc68kcpu), ea, res);
19569
19570 (mc68kcpu)->n_flag = NFLAG_32(res);
19571 (mc68kcpu)->not_z_flag = res;
19572 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19573 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19574 }
19575
19576
19577 static void m68k_op_move_32_pi_pcdi(m68000_base_device* mc68kcpu)
19578 {
19579 uint32_t res = OPER_PCDI_32(mc68kcpu);
19580 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19581
19582 m68ki_write_32((mc68kcpu), ea, res);
19583
19584 (mc68kcpu)->n_flag = NFLAG_32(res);
19585 (mc68kcpu)->not_z_flag = res;
19586 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19587 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19588 }
19589
19590
19591 static void m68k_op_move_32_pi_pcix(m68000_base_device* mc68kcpu)
19592 {
19593 uint32_t res = OPER_PCIX_32(mc68kcpu);
19594 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19595
19596 m68ki_write_32((mc68kcpu), ea, res);
19597
19598 (mc68kcpu)->n_flag = NFLAG_32(res);
19599 (mc68kcpu)->not_z_flag = res;
19600 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19601 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19602 }
19603
19604
19605 static void m68k_op_move_32_pi_i(m68000_base_device* mc68kcpu)
19606 {
19607 uint32_t res = OPER_I_32(mc68kcpu);
19608 uint32_t ea = EA_AX_PI_32(mc68kcpu);
19609
19610 m68ki_write_32((mc68kcpu), ea, res);
19611
19612 (mc68kcpu)->n_flag = NFLAG_32(res);
19613 (mc68kcpu)->not_z_flag = res;
19614 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19615 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19616 }
19617
19618
19619 static void m68k_op_move_32_pd_d(m68000_base_device* mc68kcpu)
19620 {
19621 uint32_t res = DY(mc68kcpu);
19622 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19623
19624 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19625 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19626
19627 (mc68kcpu)->n_flag = NFLAG_32(res);
19628 (mc68kcpu)->not_z_flag = res;
19629 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19630 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19631 }
19632
19633
19634 static void m68k_op_move_32_pd_a(m68000_base_device* mc68kcpu)
19635 {
19636 uint32_t res = AY(mc68kcpu);
19637 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19638
19639 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19640 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19641
19642 (mc68kcpu)->n_flag = NFLAG_32(res);
19643 (mc68kcpu)->not_z_flag = res;
19644 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19645 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19646 }
19647
19648
19649 static void m68k_op_move_32_pd_ai(m68000_base_device* mc68kcpu)
19650 {
19651 uint32_t res = OPER_AY_AI_32(mc68kcpu);
19652 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19653
19654 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19655 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19656
19657 (mc68kcpu)->n_flag = NFLAG_32(res);
19658 (mc68kcpu)->not_z_flag = res;
19659 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19660 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19661 }
19662
19663
19664 static void m68k_op_move_32_pd_pi(m68000_base_device* mc68kcpu)
19665 {
19666 uint32_t res = OPER_AY_PI_32(mc68kcpu);
19667 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19668
19669 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19670 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19671
19672 (mc68kcpu)->n_flag = NFLAG_32(res);
19673 (mc68kcpu)->not_z_flag = res;
19674 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19675 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19676 }
19677
19678
19679 static void m68k_op_move_32_pd_pd(m68000_base_device* mc68kcpu)
19680 {
19681 uint32_t res = OPER_AY_PD_32(mc68kcpu);
19682 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19683
19684 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19685 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19686
19687 (mc68kcpu)->n_flag = NFLAG_32(res);
19688 (mc68kcpu)->not_z_flag = res;
19689 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19690 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19691 }
19692
19693
19694 static void m68k_op_move_32_pd_di(m68000_base_device* mc68kcpu)
19695 {
19696 uint32_t res = OPER_AY_DI_32(mc68kcpu);
19697 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19698
19699 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19700 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19701
19702 (mc68kcpu)->n_flag = NFLAG_32(res);
19703 (mc68kcpu)->not_z_flag = res;
19704 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19705 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19706 }
19707
19708
19709 static void m68k_op_move_32_pd_ix(m68000_base_device* mc68kcpu)
19710 {
19711 uint32_t res = OPER_AY_IX_32(mc68kcpu);
19712 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19713
19714 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19715 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19716
19717 (mc68kcpu)->n_flag = NFLAG_32(res);
19718 (mc68kcpu)->not_z_flag = res;
19719 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19720 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19721 }
19722
19723
19724 static void m68k_op_move_32_pd_aw(m68000_base_device* mc68kcpu)
19725 {
19726 uint32_t res = OPER_AW_32(mc68kcpu);
19727 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19728
19729 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19730 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19731
19732 (mc68kcpu)->n_flag = NFLAG_32(res);
19733 (mc68kcpu)->not_z_flag = res;
19734 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19735 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19736 }
19737
19738
19739 static void m68k_op_move_32_pd_al(m68000_base_device* mc68kcpu)
19740 {
19741 uint32_t res = OPER_AL_32(mc68kcpu);
19742 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19743
19744 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19745 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19746
19747 (mc68kcpu)->n_flag = NFLAG_32(res);
19748 (mc68kcpu)->not_z_flag = res;
19749 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19750 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19751 }
19752
19753
19754 static void m68k_op_move_32_pd_pcdi(m68000_base_device* mc68kcpu)
19755 {
19756 uint32_t res = OPER_PCDI_32(mc68kcpu);
19757 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19758
19759 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19760 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19761
19762 (mc68kcpu)->n_flag = NFLAG_32(res);
19763 (mc68kcpu)->not_z_flag = res;
19764 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19765 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19766 }
19767
19768
19769 static void m68k_op_move_32_pd_pcix(m68000_base_device* mc68kcpu)
19770 {
19771 uint32_t res = OPER_PCIX_32(mc68kcpu);
19772 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19773
19774 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19775 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19776
19777 (mc68kcpu)->n_flag = NFLAG_32(res);
19778 (mc68kcpu)->not_z_flag = res;
19779 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19780 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19781 }
19782
19783
19784 static void m68k_op_move_32_pd_i(m68000_base_device* mc68kcpu)
19785 {
19786 uint32_t res = OPER_I_32(mc68kcpu);
19787 uint32_t ea = EA_AX_PD_32(mc68kcpu);
19788
19789 m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF );
19790 m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF );
19791
19792 (mc68kcpu)->n_flag = NFLAG_32(res);
19793 (mc68kcpu)->not_z_flag = res;
19794 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19795 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19796 }
19797
19798
19799 static void m68k_op_move_32_di_d(m68000_base_device* mc68kcpu)
19800 {
19801 uint32_t res = DY(mc68kcpu);
19802 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19803
19804 m68ki_write_32((mc68kcpu), ea, res);
19805
19806 (mc68kcpu)->n_flag = NFLAG_32(res);
19807 (mc68kcpu)->not_z_flag = res;
19808 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19809 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19810 }
19811
19812
19813 static void m68k_op_move_32_di_a(m68000_base_device* mc68kcpu)
19814 {
19815 uint32_t res = AY(mc68kcpu);
19816 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19817
19818 m68ki_write_32((mc68kcpu), ea, res);
19819
19820 (mc68kcpu)->n_flag = NFLAG_32(res);
19821 (mc68kcpu)->not_z_flag = res;
19822 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19823 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19824 }
19825
19826
19827 static void m68k_op_move_32_di_ai(m68000_base_device* mc68kcpu)
19828 {
19829 uint32_t res = OPER_AY_AI_32(mc68kcpu);
19830 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19831
19832 m68ki_write_32((mc68kcpu), ea, res);
19833
19834 (mc68kcpu)->n_flag = NFLAG_32(res);
19835 (mc68kcpu)->not_z_flag = res;
19836 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19837 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19838 }
19839
19840
19841 static void m68k_op_move_32_di_pi(m68000_base_device* mc68kcpu)
19842 {
19843 uint32_t res = OPER_AY_PI_32(mc68kcpu);
19844 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19845
19846 m68ki_write_32((mc68kcpu), ea, res);
19847
19848 (mc68kcpu)->n_flag = NFLAG_32(res);
19849 (mc68kcpu)->not_z_flag = res;
19850 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19851 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19852 }
19853
19854
19855 static void m68k_op_move_32_di_pd(m68000_base_device* mc68kcpu)
19856 {
19857 uint32_t res = OPER_AY_PD_32(mc68kcpu);
19858 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19859
19860 m68ki_write_32((mc68kcpu), ea, res);
19861
19862 (mc68kcpu)->n_flag = NFLAG_32(res);
19863 (mc68kcpu)->not_z_flag = res;
19864 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19865 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19866 }
19867
19868
19869 static void m68k_op_move_32_di_di(m68000_base_device* mc68kcpu)
19870 {
19871 uint32_t res = OPER_AY_DI_32(mc68kcpu);
19872 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19873
19874 m68ki_write_32((mc68kcpu), ea, res);
19875
19876 (mc68kcpu)->n_flag = NFLAG_32(res);
19877 (mc68kcpu)->not_z_flag = res;
19878 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19879 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19880 }
19881
19882
19883 static void m68k_op_move_32_di_ix(m68000_base_device* mc68kcpu)
19884 {
19885 uint32_t res = OPER_AY_IX_32(mc68kcpu);
19886 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19887
19888 m68ki_write_32((mc68kcpu), ea, res);
19889
19890 (mc68kcpu)->n_flag = NFLAG_32(res);
19891 (mc68kcpu)->not_z_flag = res;
19892 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19893 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19894 }
19895
19896
19897 static void m68k_op_move_32_di_aw(m68000_base_device* mc68kcpu)
19898 {
19899 uint32_t res = OPER_AW_32(mc68kcpu);
19900 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19901
19902 m68ki_write_32((mc68kcpu), ea, res);
19903
19904 (mc68kcpu)->n_flag = NFLAG_32(res);
19905 (mc68kcpu)->not_z_flag = res;
19906 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19907 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19908 }
19909
19910
19911 static void m68k_op_move_32_di_al(m68000_base_device* mc68kcpu)
19912 {
19913 uint32_t res = OPER_AL_32(mc68kcpu);
19914 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19915
19916 m68ki_write_32((mc68kcpu), ea, res);
19917
19918 (mc68kcpu)->n_flag = NFLAG_32(res);
19919 (mc68kcpu)->not_z_flag = res;
19920 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19921 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19922 }
19923
19924
19925 static void m68k_op_move_32_di_pcdi(m68000_base_device* mc68kcpu)
19926 {
19927 uint32_t res = OPER_PCDI_32(mc68kcpu);
19928 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19929
19930 m68ki_write_32((mc68kcpu), ea, res);
19931
19932 (mc68kcpu)->n_flag = NFLAG_32(res);
19933 (mc68kcpu)->not_z_flag = res;
19934 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19935 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19936 }
19937
19938
19939 static void m68k_op_move_32_di_pcix(m68000_base_device* mc68kcpu)
19940 {
19941 uint32_t res = OPER_PCIX_32(mc68kcpu);
19942 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19943
19944 m68ki_write_32((mc68kcpu), ea, res);
19945
19946 (mc68kcpu)->n_flag = NFLAG_32(res);
19947 (mc68kcpu)->not_z_flag = res;
19948 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19949 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19950 }
19951
19952
19953 static void m68k_op_move_32_di_i(m68000_base_device* mc68kcpu)
19954 {
19955 uint32_t res = OPER_I_32(mc68kcpu);
19956 uint32_t ea = EA_AX_DI_32(mc68kcpu);
19957
19958 m68ki_write_32((mc68kcpu), ea, res);
19959
19960 (mc68kcpu)->n_flag = NFLAG_32(res);
19961 (mc68kcpu)->not_z_flag = res;
19962 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19963 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19964 }
19965
19966
19967 static void m68k_op_move_32_ix_d(m68000_base_device* mc68kcpu)
19968 {
19969 uint32_t res = DY(mc68kcpu);
19970 uint32_t ea = EA_AX_IX_32(mc68kcpu);
19971
19972 m68ki_write_32((mc68kcpu), ea, res);
19973
19974 (mc68kcpu)->n_flag = NFLAG_32(res);
19975 (mc68kcpu)->not_z_flag = res;
19976 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19977 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19978 }
19979
19980
19981 static void m68k_op_move_32_ix_a(m68000_base_device* mc68kcpu)
19982 {
19983 uint32_t res = AY(mc68kcpu);
19984 uint32_t ea = EA_AX_IX_32(mc68kcpu);
19985
19986 m68ki_write_32((mc68kcpu), ea, res);
19987
19988 (mc68kcpu)->n_flag = NFLAG_32(res);
19989 (mc68kcpu)->not_z_flag = res;
19990 (mc68kcpu)->v_flag = VFLAG_CLEAR;
19991 (mc68kcpu)->c_flag = CFLAG_CLEAR;
19992 }
19993
19994
19995 static void m68k_op_move_32_ix_ai(m68000_base_device* mc68kcpu)
19996 {
19997 uint32_t res = OPER_AY_AI_32(mc68kcpu);
19998 uint32_t ea = EA_AX_IX_32(mc68kcpu);
19999
20000 m68ki_write_32((mc68kcpu), ea, res);
20001
20002 (mc68kcpu)->n_flag = NFLAG_32(res);
20003 (mc68kcpu)->not_z_flag = res;
20004 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20005 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20006 }
20007
20008
20009 static void m68k_op_move_32_ix_pi(m68000_base_device* mc68kcpu)
20010 {
20011 uint32_t res = OPER_AY_PI_32(mc68kcpu);
20012 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20013
20014 m68ki_write_32((mc68kcpu), ea, res);
20015
20016 (mc68kcpu)->n_flag = NFLAG_32(res);
20017 (mc68kcpu)->not_z_flag = res;
20018 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20019 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20020 }
20021
20022
20023 static void m68k_op_move_32_ix_pd(m68000_base_device* mc68kcpu)
20024 {
20025 uint32_t res = OPER_AY_PD_32(mc68kcpu);
20026 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20027
20028 m68ki_write_32((mc68kcpu), ea, res);
20029
20030 (mc68kcpu)->n_flag = NFLAG_32(res);
20031 (mc68kcpu)->not_z_flag = res;
20032 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20033 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20034 }
20035
20036
20037 static void m68k_op_move_32_ix_di(m68000_base_device* mc68kcpu)
20038 {
20039 uint32_t res = OPER_AY_DI_32(mc68kcpu);
20040 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20041
20042 m68ki_write_32((mc68kcpu), ea, res);
20043
20044 (mc68kcpu)->n_flag = NFLAG_32(res);
20045 (mc68kcpu)->not_z_flag = res;
20046 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20047 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20048 }
20049
20050
20051 static void m68k_op_move_32_ix_ix(m68000_base_device* mc68kcpu)
20052 {
20053 uint32_t res = OPER_AY_IX_32(mc68kcpu);
20054 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20055
20056 m68ki_write_32((mc68kcpu), ea, res);
20057
20058 (mc68kcpu)->n_flag = NFLAG_32(res);
20059 (mc68kcpu)->not_z_flag = res;
20060 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20061 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20062 }
20063
20064
20065 static void m68k_op_move_32_ix_aw(m68000_base_device* mc68kcpu)
20066 {
20067 uint32_t res = OPER_AW_32(mc68kcpu);
20068 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20069
20070 m68ki_write_32((mc68kcpu), ea, res);
20071
20072 (mc68kcpu)->n_flag = NFLAG_32(res);
20073 (mc68kcpu)->not_z_flag = res;
20074 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20075 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20076 }
20077
20078
20079 static void m68k_op_move_32_ix_al(m68000_base_device* mc68kcpu)
20080 {
20081 uint32_t res = OPER_AL_32(mc68kcpu);
20082 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20083
20084 m68ki_write_32((mc68kcpu), ea, res);
20085
20086 (mc68kcpu)->n_flag = NFLAG_32(res);
20087 (mc68kcpu)->not_z_flag = res;
20088 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20089 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20090 }
20091
20092
20093 static void m68k_op_move_32_ix_pcdi(m68000_base_device* mc68kcpu)
20094 {
20095 uint32_t res = OPER_PCDI_32(mc68kcpu);
20096 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20097
20098 m68ki_write_32((mc68kcpu), ea, res);
20099
20100 (mc68kcpu)->n_flag = NFLAG_32(res);
20101 (mc68kcpu)->not_z_flag = res;
20102 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20103 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20104 }
20105
20106
20107 static void m68k_op_move_32_ix_pcix(m68000_base_device* mc68kcpu)
20108 {
20109 uint32_t res = OPER_PCIX_32(mc68kcpu);
20110 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20111
20112 m68ki_write_32((mc68kcpu), ea, res);
20113
20114 (mc68kcpu)->n_flag = NFLAG_32(res);
20115 (mc68kcpu)->not_z_flag = res;
20116 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20117 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20118 }
20119
20120
20121 static void m68k_op_move_32_ix_i(m68000_base_device* mc68kcpu)
20122 {
20123 uint32_t res = OPER_I_32(mc68kcpu);
20124 uint32_t ea = EA_AX_IX_32(mc68kcpu);
20125
20126 m68ki_write_32((mc68kcpu), ea, res);
20127
20128 (mc68kcpu)->n_flag = NFLAG_32(res);
20129 (mc68kcpu)->not_z_flag = res;
20130 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20131 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20132 }
20133
20134
20135 static void m68k_op_move_32_aw_d(m68000_base_device* mc68kcpu)
20136 {
20137 uint32_t res = DY(mc68kcpu);
20138 uint32_t ea = EA_AW_32(mc68kcpu);
20139
20140 m68ki_write_32((mc68kcpu), ea, res);
20141
20142 (mc68kcpu)->n_flag = NFLAG_32(res);
20143 (mc68kcpu)->not_z_flag = res;
20144 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20145 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20146 }
20147
20148
20149 static void m68k_op_move_32_aw_a(m68000_base_device* mc68kcpu)
20150 {
20151 uint32_t res = AY(mc68kcpu);
20152 uint32_t ea = EA_AW_32(mc68kcpu);
20153
20154 m68ki_write_32((mc68kcpu), ea, res);
20155
20156 (mc68kcpu)->n_flag = NFLAG_32(res);
20157 (mc68kcpu)->not_z_flag = res;
20158 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20159 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20160 }
20161
20162
20163 static void m68k_op_move_32_aw_ai(m68000_base_device* mc68kcpu)
20164 {
20165 uint32_t res = OPER_AY_AI_32(mc68kcpu);
20166 uint32_t ea = EA_AW_32(mc68kcpu);
20167
20168 m68ki_write_32((mc68kcpu), ea, res);
20169
20170 (mc68kcpu)->n_flag = NFLAG_32(res);
20171 (mc68kcpu)->not_z_flag = res;
20172 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20173 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20174 }
20175
20176
20177 static void m68k_op_move_32_aw_pi(m68000_base_device* mc68kcpu)
20178 {
20179 uint32_t res = OPER_AY_PI_32(mc68kcpu);
20180 uint32_t ea = EA_AW_32(mc68kcpu);
20181
20182 m68ki_write_32((mc68kcpu), ea, res);
20183
20184 (mc68kcpu)->n_flag = NFLAG_32(res);
20185 (mc68kcpu)->not_z_flag = res;
20186 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20187 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20188 }
20189
20190
20191 static void m68k_op_move_32_aw_pd(m68000_base_device* mc68kcpu)
20192 {
20193 uint32_t res = OPER_AY_PD_32(mc68kcpu);
20194 uint32_t ea = EA_AW_32(mc68kcpu);
20195
20196 m68ki_write_32((mc68kcpu), ea, res);
20197
20198 (mc68kcpu)->n_flag = NFLAG_32(res);
20199 (mc68kcpu)->not_z_flag = res;
20200 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20201 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20202 }
20203
20204
20205 static void m68k_op_move_32_aw_di(m68000_base_device* mc68kcpu)
20206 {
20207 uint32_t res = OPER_AY_DI_32(mc68kcpu);
20208 uint32_t ea = EA_AW_32(mc68kcpu);
20209
20210 m68ki_write_32((mc68kcpu), ea, res);
20211
20212 (mc68kcpu)->n_flag = NFLAG_32(res);
20213 (mc68kcpu)->not_z_flag = res;
20214 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20215 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20216 }
20217
20218
20219 static void m68k_op_move_32_aw_ix(m68000_base_device* mc68kcpu)
20220 {
20221 uint32_t res = OPER_AY_IX_32(mc68kcpu);
20222 uint32_t ea = EA_AW_32(mc68kcpu);
20223
20224 m68ki_write_32((mc68kcpu), ea, res);
20225
20226 (mc68kcpu)->n_flag = NFLAG_32(res);
20227 (mc68kcpu)->not_z_flag = res;
20228 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20229 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20230 }
20231
20232
20233 static void m68k_op_move_32_aw_aw(m68000_base_device* mc68kcpu)
20234 {
20235 uint32_t res = OPER_AW_32(mc68kcpu);
20236 uint32_t ea = EA_AW_32(mc68kcpu);
20237
20238 m68ki_write_32((mc68kcpu), ea, res);
20239
20240 (mc68kcpu)->n_flag = NFLAG_32(res);
20241 (mc68kcpu)->not_z_flag = res;
20242 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20243 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20244 }
20245
20246
20247 static void m68k_op_move_32_aw_al(m68000_base_device* mc68kcpu)
20248 {
20249 uint32_t res = OPER_AL_32(mc68kcpu);
20250 uint32_t ea = EA_AW_32(mc68kcpu);
20251
20252 m68ki_write_32((mc68kcpu), ea, res);
20253
20254 (mc68kcpu)->n_flag = NFLAG_32(res);
20255 (mc68kcpu)->not_z_flag = res;
20256 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20257 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20258 }
20259
20260
20261 static void m68k_op_move_32_aw_pcdi(m68000_base_device* mc68kcpu)
20262 {
20263 uint32_t res = OPER_PCDI_32(mc68kcpu);
20264 uint32_t ea = EA_AW_32(mc68kcpu);
20265
20266 m68ki_write_32((mc68kcpu), ea, res);
20267
20268 (mc68kcpu)->n_flag = NFLAG_32(res);
20269 (mc68kcpu)->not_z_flag = res;
20270 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20271 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20272 }
20273
20274
20275 static void m68k_op_move_32_aw_pcix(m68000_base_device* mc68kcpu)
20276 {
20277 uint32_t res = OPER_PCIX_32(mc68kcpu);
20278 uint32_t ea = EA_AW_32(mc68kcpu);
20279
20280 m68ki_write_32((mc68kcpu), ea, res);
20281
20282 (mc68kcpu)->n_flag = NFLAG_32(res);
20283 (mc68kcpu)->not_z_flag = res;
20284 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20285 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20286 }
20287
20288
20289 static void m68k_op_move_32_aw_i(m68000_base_device* mc68kcpu)
20290 {
20291 uint32_t res = OPER_I_32(mc68kcpu);
20292 uint32_t ea = EA_AW_32(mc68kcpu);
20293
20294 m68ki_write_32((mc68kcpu), ea, res);
20295
20296 (mc68kcpu)->n_flag = NFLAG_32(res);
20297 (mc68kcpu)->not_z_flag = res;
20298 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20299 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20300 }
20301
20302
20303 static void m68k_op_move_32_al_d(m68000_base_device* mc68kcpu)
20304 {
20305 uint32_t res = DY(mc68kcpu);
20306 uint32_t ea = EA_AL_32(mc68kcpu);
20307
20308 m68ki_write_32((mc68kcpu), ea, res);
20309
20310 (mc68kcpu)->n_flag = NFLAG_32(res);
20311 (mc68kcpu)->not_z_flag = res;
20312 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20313 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20314 }
20315
20316
20317 static void m68k_op_move_32_al_a(m68000_base_device* mc68kcpu)
20318 {
20319 uint32_t res = AY(mc68kcpu);
20320 uint32_t ea = EA_AL_32(mc68kcpu);
20321
20322 m68ki_write_32((mc68kcpu), ea, res);
20323
20324 (mc68kcpu)->n_flag = NFLAG_32(res);
20325 (mc68kcpu)->not_z_flag = res;
20326 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20327 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20328 }
20329
20330
20331 static void m68k_op_move_32_al_ai(m68000_base_device* mc68kcpu)
20332 {
20333 uint32_t res = OPER_AY_AI_32(mc68kcpu);
20334 uint32_t ea = EA_AL_32(mc68kcpu);
20335
20336 m68ki_write_32((mc68kcpu), ea, res);
20337
20338 (mc68kcpu)->n_flag = NFLAG_32(res);
20339 (mc68kcpu)->not_z_flag = res;
20340 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20341 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20342 }
20343
20344
20345 static void m68k_op_move_32_al_pi(m68000_base_device* mc68kcpu)
20346 {
20347 uint32_t res = OPER_AY_PI_32(mc68kcpu);
20348 uint32_t ea = EA_AL_32(mc68kcpu);
20349
20350 m68ki_write_32((mc68kcpu), ea, res);
20351
20352 (mc68kcpu)->n_flag = NFLAG_32(res);
20353 (mc68kcpu)->not_z_flag = res;
20354 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20355 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20356 }
20357
20358
20359 static void m68k_op_move_32_al_pd(m68000_base_device* mc68kcpu)
20360 {
20361 uint32_t res = OPER_AY_PD_32(mc68kcpu);
20362 uint32_t ea = EA_AL_32(mc68kcpu);
20363
20364 m68ki_write_32((mc68kcpu), ea, res);
20365
20366 (mc68kcpu)->n_flag = NFLAG_32(res);
20367 (mc68kcpu)->not_z_flag = res;
20368 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20369 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20370 }
20371
20372
20373 static void m68k_op_move_32_al_di(m68000_base_device* mc68kcpu)
20374 {
20375 uint32_t res = OPER_AY_DI_32(mc68kcpu);
20376 uint32_t ea = EA_AL_32(mc68kcpu);
20377
20378 m68ki_write_32((mc68kcpu), ea, res);
20379
20380 (mc68kcpu)->n_flag = NFLAG_32(res);
20381 (mc68kcpu)->not_z_flag = res;
20382 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20383 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20384 }
20385
20386
20387 static void m68k_op_move_32_al_ix(m68000_base_device* mc68kcpu)
20388 {
20389 uint32_t res = OPER_AY_IX_32(mc68kcpu);
20390 uint32_t ea = EA_AL_32(mc68kcpu);
20391
20392 m68ki_write_32((mc68kcpu), ea, res);
20393
20394 (mc68kcpu)->n_flag = NFLAG_32(res);
20395 (mc68kcpu)->not_z_flag = res;
20396 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20397 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20398 }
20399
20400
20401 static void m68k_op_move_32_al_aw(m68000_base_device* mc68kcpu)
20402 {
20403 uint32_t res = OPER_AW_32(mc68kcpu);
20404 uint32_t ea = EA_AL_32(mc68kcpu);
20405
20406 m68ki_write_32((mc68kcpu), ea, res);
20407
20408 (mc68kcpu)->n_flag = NFLAG_32(res);
20409 (mc68kcpu)->not_z_flag = res;
20410 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20411 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20412 }
20413
20414
20415 static void m68k_op_move_32_al_al(m68000_base_device* mc68kcpu)
20416 {
20417 uint32_t res = OPER_AL_32(mc68kcpu);
20418 uint32_t ea = EA_AL_32(mc68kcpu);
20419
20420 m68ki_write_32((mc68kcpu), ea, res);
20421
20422 (mc68kcpu)->n_flag = NFLAG_32(res);
20423 (mc68kcpu)->not_z_flag = res;
20424 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20425 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20426 }
20427
20428
20429 static void m68k_op_move_32_al_pcdi(m68000_base_device* mc68kcpu)
20430 {
20431 uint32_t res = OPER_PCDI_32(mc68kcpu);
20432 uint32_t ea = EA_AL_32(mc68kcpu);
20433
20434 m68ki_write_32((mc68kcpu), ea, res);
20435
20436 (mc68kcpu)->n_flag = NFLAG_32(res);
20437 (mc68kcpu)->not_z_flag = res;
20438 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20439 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20440 }
20441
20442
20443 static void m68k_op_move_32_al_pcix(m68000_base_device* mc68kcpu)
20444 {
20445 uint32_t res = OPER_PCIX_32(mc68kcpu);
20446 uint32_t ea = EA_AL_32(mc68kcpu);
20447
20448 m68ki_write_32((mc68kcpu), ea, res);
20449
20450 (mc68kcpu)->n_flag = NFLAG_32(res);
20451 (mc68kcpu)->not_z_flag = res;
20452 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20453 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20454 }
20455
20456
20457 static void m68k_op_move_32_al_i(m68000_base_device* mc68kcpu)
20458 {
20459 uint32_t res = OPER_I_32(mc68kcpu);
20460 uint32_t ea = EA_AL_32(mc68kcpu);
20461
20462 m68ki_write_32((mc68kcpu), ea, res);
20463
20464 (mc68kcpu)->n_flag = NFLAG_32(res);
20465 (mc68kcpu)->not_z_flag = res;
20466 (mc68kcpu)->v_flag = VFLAG_CLEAR;
20467 (mc68kcpu)->c_flag = CFLAG_CLEAR;
20468 }
20469
20470
20471 static void m68k_op_movea_16_d(m68000_base_device* mc68kcpu)
20472 {
20473 AX(mc68kcpu) = MAKE_INT_16(DY(mc68kcpu));
20474 }
20475
20476
20477 static void m68k_op_movea_16_a(m68000_base_device* mc68kcpu)
20478 {
20479 AX(mc68kcpu) = MAKE_INT_16(AY(mc68kcpu));
20480 }
20481
20482
20483 static void m68k_op_movea_16_ai(m68000_base_device* mc68kcpu)
20484 {
20485 AX(mc68kcpu) = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu));
20486 }
20487
20488
20489 static void m68k_op_movea_16_pi(m68000_base_device* mc68kcpu)
20490 {
20491 AX(mc68kcpu) = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu));
20492 }
20493
20494
20495 static void m68k_op_movea_16_pd(m68000_base_device* mc68kcpu)
20496 {
20497 AX(mc68kcpu) = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu));
20498 }
20499
20500
20501 static void m68k_op_movea_16_di(m68000_base_device* mc68kcpu)
20502 {
20503 AX(mc68kcpu) = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu));
20504 }
20505
20506
20507 static void m68k_op_movea_16_ix(m68000_base_device* mc68kcpu)
20508 {
20509 AX(mc68kcpu) = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu));
20510 }
20511
20512
20513 static void m68k_op_movea_16_aw(m68000_base_device* mc68kcpu)
20514 {
20515 AX(mc68kcpu) = MAKE_INT_16(OPER_AW_16(mc68kcpu));
20516 }
20517
20518
20519 static void m68k_op_movea_16_al(m68000_base_device* mc68kcpu)
20520 {
20521 AX(mc68kcpu) = MAKE_INT_16(OPER_AL_16(mc68kcpu));
20522 }
20523
20524
20525 static void m68k_op_movea_16_pcdi(m68000_base_device* mc68kcpu)
20526 {
20527 AX(mc68kcpu) = MAKE_INT_16(OPER_PCDI_16(mc68kcpu));
20528 }
20529
20530
20531 static void m68k_op_movea_16_pcix(m68000_base_device* mc68kcpu)
20532 {
20533 AX(mc68kcpu) = MAKE_INT_16(OPER_PCIX_16(mc68kcpu));
20534 }
20535
20536
20537 static void m68k_op_movea_16_i(m68000_base_device* mc68kcpu)
20538 {
20539 AX(mc68kcpu) = MAKE_INT_16(OPER_I_16(mc68kcpu));
20540 }
20541
20542
20543 static void m68k_op_movea_32_d(m68000_base_device* mc68kcpu)
20544 {
20545 AX(mc68kcpu) = DY(mc68kcpu);
20546 }
20547
20548
20549 static void m68k_op_movea_32_a(m68000_base_device* mc68kcpu)
20550 {
20551 AX(mc68kcpu) = AY(mc68kcpu);
20552 }
20553
20554
20555 static void m68k_op_movea_32_ai(m68000_base_device* mc68kcpu)
20556 {
20557 AX(mc68kcpu) = OPER_AY_AI_32(mc68kcpu);
20558 }
20559
20560
20561 static void m68k_op_movea_32_pi(m68000_base_device* mc68kcpu)
20562 {
20563 AX(mc68kcpu) = OPER_AY_PI_32(mc68kcpu);
20564 }
20565
20566
20567 static void m68k_op_movea_32_pd(m68000_base_device* mc68kcpu)
20568 {
20569 AX(mc68kcpu) = OPER_AY_PD_32(mc68kcpu);
20570 }
20571
20572
20573 static void m68k_op_movea_32_di(m68000_base_device* mc68kcpu)
20574 {
20575 AX(mc68kcpu) = OPER_AY_DI_32(mc68kcpu);
20576 }
20577
20578
20579 static void m68k_op_movea_32_ix(m68000_base_device* mc68kcpu)
20580 {
20581 AX(mc68kcpu) = OPER_AY_IX_32(mc68kcpu);
20582 }
20583
20584
20585 static void m68k_op_movea_32_aw(m68000_base_device* mc68kcpu)
20586 {
20587 AX(mc68kcpu) = OPER_AW_32(mc68kcpu);
20588 }
20589
20590
20591 static void m68k_op_movea_32_al(m68000_base_device* mc68kcpu)
20592 {
20593 AX(mc68kcpu) = OPER_AL_32(mc68kcpu);
20594 }
20595
20596
20597 static void m68k_op_movea_32_pcdi(m68000_base_device* mc68kcpu)
20598 {
20599 AX(mc68kcpu) = OPER_PCDI_32(mc68kcpu);
20600 }
20601
20602
20603 static void m68k_op_movea_32_pcix(m68000_base_device* mc68kcpu)
20604 {
20605 AX(mc68kcpu) = OPER_PCIX_32(mc68kcpu);
20606 }
20607
20608
20609 static void m68k_op_movea_32_i(m68000_base_device* mc68kcpu)
20610 {
20611 AX(mc68kcpu) = OPER_I_32(mc68kcpu);
20612 }
20613
20614
20615 static void m68k_op_move_16_frc_d(m68000_base_device* mc68kcpu)
20616 {
20617 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
20618 {
20619 DY(mc68kcpu) = MASK_OUT_BELOW_16(DY(mc68kcpu)) | m68ki_get_ccr(mc68kcpu);
20620 return;
20621 }
20622 m68ki_exception_illegal(mc68kcpu);
20623 }
20624
20625
20626 static void m68k_op_move_16_frc_ai(m68000_base_device* mc68kcpu)
20627 {
20628 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
20629 {
20630 m68ki_write_16((mc68kcpu), EA_AY_AI_16(mc68kcpu), m68ki_get_ccr(mc68kcpu));
20631 return;
20632 }
20633 m68ki_exception_illegal(mc68kcpu);
20634 }
20635
20636
20637 static void m68k_op_move_16_frc_pi(m68000_base_device* mc68kcpu)
20638 {
20639 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
20640 {
20641 m68ki_write_16((mc68kcpu), EA_AY_PI_16(mc68kcpu), m68ki_get_ccr(mc68kcpu));
20642 return;
20643 }
20644 m68ki_exception_illegal(mc68kcpu);
20645 }
20646
20647
20648 static void m68k_op_move_16_frc_pd(m68000_base_device* mc68kcpu)
20649 {
20650 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
20651 {
20652 m68ki_write_16((mc68kcpu), EA_AY_PD_16(mc68kcpu), m68ki_get_ccr(mc68kcpu));
20653 return;
20654 }
20655 m68ki_exception_illegal(mc68kcpu);
20656 }
20657
20658
20659 static void m68k_op_move_16_frc_di(m68000_base_device* mc68kcpu)
20660 {
20661 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
20662 {
20663 m68ki_write_16((mc68kcpu), EA_AY_DI_16(mc68kcpu), m68ki_get_ccr(mc68kcpu));
20664 return;
20665 }
20666 m68ki_exception_illegal(mc68kcpu);
20667 }
20668
20669
20670 static void m68k_op_move_16_frc_ix(m68000_base_device* mc68kcpu)
20671 {
20672 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
20673 {
20674 m68ki_write_16((mc68kcpu), EA_AY_IX_16(mc68kcpu), m68ki_get_ccr(mc68kcpu));
20675 return;
20676 }
20677 m68ki_exception_illegal(mc68kcpu);
20678 }
20679
20680
20681 static void m68k_op_move_16_frc_aw(m68000_base_device* mc68kcpu)
20682 {
20683 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
20684 {
20685 m68ki_write_16((mc68kcpu), EA_AW_16(mc68kcpu), m68ki_get_ccr(mc68kcpu));
20686 return;
20687 }
20688 m68ki_exception_illegal(mc68kcpu);
20689 }
20690
20691
20692 static void m68k_op_move_16_frc_al(m68000_base_device* mc68kcpu)
20693 {
20694 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
20695 {
20696 m68ki_write_16((mc68kcpu), EA_AL_16(mc68kcpu), m68ki_get_ccr(mc68kcpu));
20697 return;
20698 }
20699 m68ki_exception_illegal(mc68kcpu);
20700 }
20701
20702
20703 static void m68k_op_move_16_toc_d(m68000_base_device* mc68kcpu)
20704 {
20705 m68ki_set_ccr((mc68kcpu), DY(mc68kcpu));
20706 }
20707
20708
20709 static void m68k_op_move_16_toc_ai(m68000_base_device* mc68kcpu)
20710 {
20711 m68ki_set_ccr((mc68kcpu), OPER_AY_AI_16(mc68kcpu));
20712 }
20713
20714
20715 static void m68k_op_move_16_toc_pi(m68000_base_device* mc68kcpu)
20716 {
20717 m68ki_set_ccr((mc68kcpu), OPER_AY_PI_16(mc68kcpu));
20718 }
20719
20720
20721 static void m68k_op_move_16_toc_pd(m68000_base_device* mc68kcpu)
20722 {
20723 m68ki_set_ccr((mc68kcpu), OPER_AY_PD_16(mc68kcpu));
20724 }
20725
20726
20727 static void m68k_op_move_16_toc_di(m68000_base_device* mc68kcpu)
20728 {
20729 m68ki_set_ccr((mc68kcpu), OPER_AY_DI_16(mc68kcpu));
20730 }
20731
20732
20733 static void m68k_op_move_16_toc_ix(m68000_base_device* mc68kcpu)
20734 {
20735 m68ki_set_ccr((mc68kcpu), OPER_AY_IX_16(mc68kcpu));
20736 }
20737
20738
20739 static void m68k_op_move_16_toc_aw(m68000_base_device* mc68kcpu)
20740 {
20741 m68ki_set_ccr((mc68kcpu), OPER_AW_16(mc68kcpu));
20742 }
20743
20744
20745 static void m68k_op_move_16_toc_al(m68000_base_device* mc68kcpu)
20746 {
20747 m68ki_set_ccr((mc68kcpu), OPER_AL_16(mc68kcpu));
20748 }
20749
20750
20751 static void m68k_op_move_16_toc_pcdi(m68000_base_device* mc68kcpu)
20752 {
20753 m68ki_set_ccr((mc68kcpu), OPER_PCDI_16(mc68kcpu));
20754 }
20755
20756
20757 static void m68k_op_move_16_toc_pcix(m68000_base_device* mc68kcpu)
20758 {
20759 m68ki_set_ccr((mc68kcpu), OPER_PCIX_16(mc68kcpu));
20760 }
20761
20762
20763 static void m68k_op_move_16_toc_i(m68000_base_device* mc68kcpu)
20764 {
20765 m68ki_set_ccr((mc68kcpu), OPER_I_16(mc68kcpu));
20766 }
20767
20768
20769 static void m68k_op_move_16_frs_d(m68000_base_device* mc68kcpu)
20770 {
20771 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */
20772 {
20773 DY(mc68kcpu) = MASK_OUT_BELOW_16(DY(mc68kcpu)) | m68ki_get_sr(mc68kcpu);
20774 return;
20775 }
20776 m68ki_exception_privilege_violation(mc68kcpu);
20777 }
20778
20779
20780 static void m68k_op_move_16_frs_ai(m68000_base_device* mc68kcpu)
20781 {
20782 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */
20783 {
20784 uint32_t ea = EA_AY_AI_16(mc68kcpu);
20785 m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu));
20786 return;
20787 }
20788 m68ki_exception_privilege_violation(mc68kcpu);
20789 }
20790
20791
20792 static void m68k_op_move_16_frs_pi(m68000_base_device* mc68kcpu)
20793 {
20794 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */
20795 {
20796 uint32_t ea = EA_AY_PI_16(mc68kcpu);
20797 m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu));
20798 return;
20799 }
20800 m68ki_exception_privilege_violation(mc68kcpu);
20801 }
20802
20803
20804 static void m68k_op_move_16_frs_pd(m68000_base_device* mc68kcpu)
20805 {
20806 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */
20807 {
20808 uint32_t ea = EA_AY_PD_16(mc68kcpu);
20809 m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu));
20810 return;
20811 }
20812 m68ki_exception_privilege_violation(mc68kcpu);
20813 }
20814
20815
20816 static void m68k_op_move_16_frs_di(m68000_base_device* mc68kcpu)
20817 {
20818 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */
20819 {
20820 uint32_t ea = EA_AY_DI_16(mc68kcpu);
20821 m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu));
20822 return;
20823 }
20824 m68ki_exception_privilege_violation(mc68kcpu);
20825 }
20826
20827
20828 static void m68k_op_move_16_frs_ix(m68000_base_device* mc68kcpu)
20829 {
20830 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */
20831 {
20832 uint32_t ea = EA_AY_IX_16(mc68kcpu);
20833 m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu));
20834 return;
20835 }
20836 m68ki_exception_privilege_violation(mc68kcpu);
20837 }
20838
20839
20840 static void m68k_op_move_16_frs_aw(m68000_base_device* mc68kcpu)
20841 {
20842 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */
20843 {
20844 uint32_t ea = EA_AW_16(mc68kcpu);
20845 m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu));
20846 return;
20847 }
20848 m68ki_exception_privilege_violation(mc68kcpu);
20849 }
20850
20851
20852 static void m68k_op_move_16_frs_al(m68000_base_device* mc68kcpu)
20853 {
20854 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */
20855 {
20856 uint32_t ea = EA_AL_16(mc68kcpu);
20857 m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu));
20858 return;
20859 }
20860 m68ki_exception_privilege_violation(mc68kcpu);
20861 }
20862
20863
20864 static void m68k_op_move_16_tos_d(m68000_base_device* mc68kcpu)
20865 {
20866 if((mc68kcpu)->s_flag)
20867 {
20868 m68ki_set_sr((mc68kcpu), DY(mc68kcpu));
20869 return;
20870 }
20871 m68ki_exception_privilege_violation(mc68kcpu);
20872 }
20873
20874
20875 static void m68k_op_move_16_tos_ai(m68000_base_device* mc68kcpu)
20876 {
20877 if((mc68kcpu)->s_flag)
20878 {
20879 uint32_t new_sr = OPER_AY_AI_16(mc68kcpu);
20880 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20881 m68ki_set_sr((mc68kcpu), new_sr);
20882 return;
20883 }
20884 m68ki_exception_privilege_violation(mc68kcpu);
20885 }
20886
20887
20888 static void m68k_op_move_16_tos_pi(m68000_base_device* mc68kcpu)
20889 {
20890 if((mc68kcpu)->s_flag)
20891 {
20892 uint32_t new_sr = OPER_AY_PI_16(mc68kcpu);
20893 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20894 m68ki_set_sr((mc68kcpu), new_sr);
20895 return;
20896 }
20897 m68ki_exception_privilege_violation(mc68kcpu);
20898 }
20899
20900
20901 static void m68k_op_move_16_tos_pd(m68000_base_device* mc68kcpu)
20902 {
20903 if((mc68kcpu)->s_flag)
20904 {
20905 uint32_t new_sr = OPER_AY_PD_16(mc68kcpu);
20906 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20907 m68ki_set_sr((mc68kcpu), new_sr);
20908 return;
20909 }
20910 m68ki_exception_privilege_violation(mc68kcpu);
20911 }
20912
20913
20914 static void m68k_op_move_16_tos_di(m68000_base_device* mc68kcpu)
20915 {
20916 if((mc68kcpu)->s_flag)
20917 {
20918 uint32_t new_sr = OPER_AY_DI_16(mc68kcpu);
20919 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20920 m68ki_set_sr((mc68kcpu), new_sr);
20921 return;
20922 }
20923 m68ki_exception_privilege_violation(mc68kcpu);
20924 }
20925
20926
20927 static void m68k_op_move_16_tos_ix(m68000_base_device* mc68kcpu)
20928 {
20929 if((mc68kcpu)->s_flag)
20930 {
20931 uint32_t new_sr = OPER_AY_IX_16(mc68kcpu);
20932 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20933 m68ki_set_sr((mc68kcpu), new_sr);
20934 return;
20935 }
20936 m68ki_exception_privilege_violation(mc68kcpu);
20937 }
20938
20939
20940 static void m68k_op_move_16_tos_aw(m68000_base_device* mc68kcpu)
20941 {
20942 if((mc68kcpu)->s_flag)
20943 {
20944 uint32_t new_sr = OPER_AW_16(mc68kcpu);
20945 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20946 m68ki_set_sr((mc68kcpu), new_sr);
20947 return;
20948 }
20949 m68ki_exception_privilege_violation(mc68kcpu);
20950 }
20951
20952
20953 static void m68k_op_move_16_tos_al(m68000_base_device* mc68kcpu)
20954 {
20955 if((mc68kcpu)->s_flag)
20956 {
20957 uint32_t new_sr = OPER_AL_16(mc68kcpu);
20958 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20959 m68ki_set_sr((mc68kcpu), new_sr);
20960 return;
20961 }
20962 m68ki_exception_privilege_violation(mc68kcpu);
20963 }
20964
20965
20966 static void m68k_op_move_16_tos_pcdi(m68000_base_device* mc68kcpu)
20967 {
20968 if((mc68kcpu)->s_flag)
20969 {
20970 uint32_t new_sr = OPER_PCDI_16(mc68kcpu);
20971 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20972 m68ki_set_sr((mc68kcpu), new_sr);
20973 return;
20974 }
20975 m68ki_exception_privilege_violation(mc68kcpu);
20976 }
20977
20978
20979 static void m68k_op_move_16_tos_pcix(m68000_base_device* mc68kcpu)
20980 {
20981 if((mc68kcpu)->s_flag)
20982 {
20983 uint32_t new_sr = OPER_PCIX_16(mc68kcpu);
20984 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20985 m68ki_set_sr((mc68kcpu), new_sr);
20986 return;
20987 }
20988 m68ki_exception_privilege_violation(mc68kcpu);
20989 }
20990
20991
20992 static void m68k_op_move_16_tos_i(m68000_base_device* mc68kcpu)
20993 {
20994 if((mc68kcpu)->s_flag)
20995 {
20996 uint32_t new_sr = OPER_I_16(mc68kcpu);
20997 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
20998 m68ki_set_sr((mc68kcpu), new_sr);
20999 return;
21000 }
21001 m68ki_exception_privilege_violation(mc68kcpu);
21002 }
21003
21004
21005 static void m68k_op_move_32_fru(m68000_base_device* mc68kcpu)
21006 {
21007 if((mc68kcpu)->s_flag)
21008 {
21009 AY(mc68kcpu) = REG_USP(mc68kcpu);
21010 return;
21011 }
21012 m68ki_exception_privilege_violation(mc68kcpu);
21013 }
21014
21015
21016 static void m68k_op_move_32_tou(m68000_base_device* mc68kcpu)
21017 {
21018 if((mc68kcpu)->s_flag)
21019 {
21020 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
21021 REG_USP(mc68kcpu) = AY(mc68kcpu);
21022 return;
21023 }
21024 m68ki_exception_privilege_violation(mc68kcpu);
21025 }
21026
21027
21028 static void m68k_op_movec_32_cr(m68000_base_device* mc68kcpu)
21029 {
21030 m68ki_exception_illegal(mc68kcpu);
21031 }
21032
21033
21034 static void m68k_op_movec_32_rc(m68000_base_device* mc68kcpu)
21035 {
21036 m68ki_exception_illegal(mc68kcpu);
21037 }
21038
21039
21040 static void m68k_op_movem_16_re_pd(m68000_base_device* mc68kcpu)
21041 {
21042 uint32_t i = 0;
21043 uint32_t register_list = OPER_I_16(mc68kcpu);
21044 uint32_t ea = AY(mc68kcpu);
21045 uint32_t count = 0;
21046
21047 for(; i < 16; i++)
21048 if(register_list & (1 << i))
21049 {
21050 ea -= 2;
21051 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[15-i]));
21052 count++;
21053 }
21054 AY(mc68kcpu) = ea;
21055
21056 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21057 }
21058
21059
21060 static void m68k_op_movem_16_re_ai(m68000_base_device* mc68kcpu)
21061 {
21062 uint32_t i = 0;
21063 uint32_t register_list = OPER_I_16(mc68kcpu);
21064 uint32_t ea = EA_AY_AI_16(mc68kcpu);
21065 uint32_t count = 0;
21066
21067 for(; i < 16; i++)
21068 if(register_list & (1 << i))
21069 {
21070 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i]));
21071 ea += 2;
21072 count++;
21073 }
21074
21075 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21076 }
21077
21078
21079 static void m68k_op_movem_16_re_di(m68000_base_device* mc68kcpu)
21080 {
21081 uint32_t i = 0;
21082 uint32_t register_list = OPER_I_16(mc68kcpu);
21083 uint32_t ea = EA_AY_DI_16(mc68kcpu);
21084 uint32_t count = 0;
21085
21086 for(; i < 16; i++)
21087 if(register_list & (1 << i))
21088 {
21089 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i]));
21090 ea += 2;
21091 count++;
21092 }
21093
21094 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21095 }
21096
21097
21098 static void m68k_op_movem_16_re_ix(m68000_base_device* mc68kcpu)
21099 {
21100 uint32_t i = 0;
21101 uint32_t register_list = OPER_I_16(mc68kcpu);
21102 uint32_t ea = EA_AY_IX_16(mc68kcpu);
21103 uint32_t count = 0;
21104
21105 for(; i < 16; i++)
21106 if(register_list & (1 << i))
21107 {
21108 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i]));
21109 ea += 2;
21110 count++;
21111 }
21112
21113 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21114 }
21115
21116
21117 static void m68k_op_movem_16_re_aw(m68000_base_device* mc68kcpu)
21118 {
21119 uint32_t i = 0;
21120 uint32_t register_list = OPER_I_16(mc68kcpu);
21121 uint32_t ea = EA_AW_16(mc68kcpu);
21122 uint32_t count = 0;
21123
21124 for(; i < 16; i++)
21125 if(register_list & (1 << i))
21126 {
21127 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i]));
21128 ea += 2;
21129 count++;
21130 }
21131
21132 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21133 }
21134
21135
21136 static void m68k_op_movem_16_re_al(m68000_base_device* mc68kcpu)
21137 {
21138 uint32_t i = 0;
21139 uint32_t register_list = OPER_I_16(mc68kcpu);
21140 uint32_t ea = EA_AL_16(mc68kcpu);
21141 uint32_t count = 0;
21142
21143 for(; i < 16; i++)
21144 if(register_list & (1 << i))
21145 {
21146 m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i]));
21147 ea += 2;
21148 count++;
21149 }
21150
21151 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21152 }
21153
21154
21155 static void m68k_op_movem_32_re_pd(m68000_base_device* mc68kcpu)
21156 {
21157 uint32_t i = 0;
21158 uint32_t register_list = OPER_I_16(mc68kcpu);
21159 uint32_t ea = AY(mc68kcpu);
21160 uint32_t count = 0;
21161
21162 for(; i < 16; i++)
21163 if(register_list & (1 << i))
21164 {
21165 ea -= 4;
21166 m68ki_write_16((mc68kcpu), ea+2, REG_DA(mc68kcpu)[15-i] & 0xFFFF );
21167 m68ki_write_16((mc68kcpu), ea, (REG_DA(mc68kcpu)[15-i] >> 16) & 0xFFFF );
21168 count++;
21169 }
21170 AY(mc68kcpu) = ea;
21171
21172 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21173 }
21174
21175
21176 static void m68k_op_movem_32_re_ai(m68000_base_device* mc68kcpu)
21177 {
21178 uint32_t i = 0;
21179 uint32_t register_list = OPER_I_16(mc68kcpu);
21180 uint32_t ea = EA_AY_AI_32(mc68kcpu);
21181 uint32_t count = 0;
21182
21183 for(; i < 16; i++)
21184 if(register_list & (1 << i))
21185 {
21186 m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]);
21187 ea += 4;
21188 count++;
21189 }
21190
21191 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21192 }
21193
21194
21195 static void m68k_op_movem_32_re_di(m68000_base_device* mc68kcpu)
21196 {
21197 uint32_t i = 0;
21198 uint32_t register_list = OPER_I_16(mc68kcpu);
21199 uint32_t ea = EA_AY_DI_32(mc68kcpu);
21200 uint32_t count = 0;
21201
21202 for(; i < 16; i++)
21203 if(register_list & (1 << i))
21204 {
21205 m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]);
21206 ea += 4;
21207 count++;
21208 }
21209
21210 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21211 }
21212
21213
21214 static void m68k_op_movem_32_re_ix(m68000_base_device* mc68kcpu)
21215 {
21216 uint32_t i = 0;
21217 uint32_t register_list = OPER_I_16(mc68kcpu);
21218 uint32_t ea = EA_AY_IX_32(mc68kcpu);
21219 uint32_t count = 0;
21220
21221 for(; i < 16; i++)
21222 if(register_list & (1 << i))
21223 {
21224 m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]);
21225 ea += 4;
21226 count++;
21227 }
21228
21229 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21230 }
21231
21232
21233 static void m68k_op_movem_32_re_aw(m68000_base_device* mc68kcpu)
21234 {
21235 uint32_t i = 0;
21236 uint32_t register_list = OPER_I_16(mc68kcpu);
21237 uint32_t ea = EA_AW_32(mc68kcpu);
21238 uint32_t count = 0;
21239
21240 for(; i < 16; i++)
21241 if(register_list & (1 << i))
21242 {
21243 m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]);
21244 ea += 4;
21245 count++;
21246 }
21247
21248 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21249 }
21250
21251
21252 static void m68k_op_movem_32_re_al(m68000_base_device* mc68kcpu)
21253 {
21254 uint32_t i = 0;
21255 uint32_t register_list = OPER_I_16(mc68kcpu);
21256 uint32_t ea = EA_AL_32(mc68kcpu);
21257 uint32_t count = 0;
21258
21259 for(; i < 16; i++)
21260 if(register_list & (1 << i))
21261 {
21262 m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]);
21263 ea += 4;
21264 count++;
21265 }
21266
21267 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21268 }
21269
21270
21271 static void m68k_op_movem_16_er_pi(m68000_base_device* mc68kcpu)
21272 {
21273 uint32_t i = 0;
21274 uint32_t register_list = OPER_I_16(mc68kcpu);
21275 uint32_t ea = AY(mc68kcpu);
21276 uint32_t count = 0;
21277
21278 for(; i < 16; i++)
21279 if(register_list & (1 << i))
21280 {
21281 REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea)));
21282 ea += 2;
21283 count++;
21284 }
21285 AY(mc68kcpu) = ea;
21286
21287 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21288 }
21289
21290
21291 static void m68k_op_movem_16_er_pcdi(m68000_base_device* mc68kcpu)
21292 {
21293 uint32_t i = 0;
21294 uint32_t register_list = OPER_I_16(mc68kcpu);
21295 uint32_t ea = EA_PCDI_16(mc68kcpu);
21296 uint32_t count = 0;
21297
21298 for(; i < 16; i++)
21299 if(register_list & (1 << i))
21300 {
21301 REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea)));
21302 ea += 2;
21303 count++;
21304 }
21305
21306 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21307 }
21308
21309
21310 static void m68k_op_movem_16_er_pcix(m68000_base_device* mc68kcpu)
21311 {
21312 uint32_t i = 0;
21313 uint32_t register_list = OPER_I_16(mc68kcpu);
21314 uint32_t ea = EA_PCIX_16(mc68kcpu);
21315 uint32_t count = 0;
21316
21317 for(; i < 16; i++)
21318 if(register_list & (1 << i))
21319 {
21320 REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea)));
21321 ea += 2;
21322 count++;
21323 }
21324
21325 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21326 }
21327
21328
21329 static void m68k_op_movem_16_er_ai(m68000_base_device* mc68kcpu)
21330 {
21331 uint32_t i = 0;
21332 uint32_t register_list = OPER_I_16(mc68kcpu);
21333 uint32_t ea = EA_AY_AI_16(mc68kcpu);
21334 uint32_t count = 0;
21335
21336 for(; i < 16; i++)
21337 if(register_list & (1 << i))
21338 {
21339 REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea)));
21340 ea += 2;
21341 count++;
21342 }
21343
21344 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21345 }
21346
21347
21348 static void m68k_op_movem_16_er_di(m68000_base_device* mc68kcpu)
21349 {
21350 uint32_t i = 0;
21351 uint32_t register_list = OPER_I_16(mc68kcpu);
21352 uint32_t ea = EA_AY_DI_16(mc68kcpu);
21353 uint32_t count = 0;
21354
21355 for(; i < 16; i++)
21356 if(register_list & (1 << i))
21357 {
21358 REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea)));
21359 ea += 2;
21360 count++;
21361 }
21362
21363 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21364 }
21365
21366
21367 static void m68k_op_movem_16_er_ix(m68000_base_device* mc68kcpu)
21368 {
21369 uint32_t i = 0;
21370 uint32_t register_list = OPER_I_16(mc68kcpu);
21371 uint32_t ea = EA_AY_IX_16(mc68kcpu);
21372 uint32_t count = 0;
21373
21374 for(; i < 16; i++)
21375 if(register_list & (1 << i))
21376 {
21377 REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea)));
21378 ea += 2;
21379 count++;
21380 }
21381
21382 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21383 }
21384
21385
21386 static void m68k_op_movem_16_er_aw(m68000_base_device* mc68kcpu)
21387 {
21388 uint32_t i = 0;
21389 uint32_t register_list = OPER_I_16(mc68kcpu);
21390 uint32_t ea = EA_AW_16(mc68kcpu);
21391 uint32_t count = 0;
21392
21393 for(; i < 16; i++)
21394 if(register_list & (1 << i))
21395 {
21396 REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea)));
21397 ea += 2;
21398 count++;
21399 }
21400
21401 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21402 }
21403
21404
21405 static void m68k_op_movem_16_er_al(m68000_base_device* mc68kcpu)
21406 {
21407 uint32_t i = 0;
21408 uint32_t register_list = OPER_I_16(mc68kcpu);
21409 uint32_t ea = EA_AL_16(mc68kcpu);
21410 uint32_t count = 0;
21411
21412 for(; i < 16; i++)
21413 if(register_list & (1 << i))
21414 {
21415 REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea)));
21416 ea += 2;
21417 count++;
21418 }
21419
21420 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider;
21421 }
21422
21423
21424 static void m68k_op_movem_32_er_pi(m68000_base_device* mc68kcpu)
21425 {
21426 uint32_t i = 0;
21427 uint32_t register_list = OPER_I_16(mc68kcpu);
21428 uint32_t ea = AY(mc68kcpu);
21429 uint32_t count = 0;
21430
21431 for(; i < 16; i++)
21432 if(register_list & (1 << i))
21433 {
21434 REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea);
21435 ea += 4;
21436 count++;
21437 }
21438 AY(mc68kcpu) = ea;
21439
21440 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21441 }
21442
21443
21444 static void m68k_op_movem_32_er_pcdi(m68000_base_device* mc68kcpu)
21445 {
21446 uint32_t i = 0;
21447 uint32_t register_list = OPER_I_16(mc68kcpu);
21448 uint32_t ea = EA_PCDI_32(mc68kcpu);
21449 uint32_t count = 0;
21450
21451 for(; i < 16; i++)
21452 if(register_list & (1 << i))
21453 {
21454 REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea);
21455 ea += 4;
21456 count++;
21457 }
21458
21459 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21460 }
21461
21462
21463 static void m68k_op_movem_32_er_pcix(m68000_base_device* mc68kcpu)
21464 {
21465 uint32_t i = 0;
21466 uint32_t register_list = OPER_I_16(mc68kcpu);
21467 uint32_t ea = EA_PCIX_32(mc68kcpu);
21468 uint32_t count = 0;
21469
21470 for(; i < 16; i++)
21471 if(register_list & (1 << i))
21472 {
21473 REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea);
21474 ea += 4;
21475 count++;
21476 }
21477
21478 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21479 }
21480
21481
21482 static void m68k_op_movem_32_er_ai(m68000_base_device* mc68kcpu)
21483 {
21484 uint32_t i = 0;
21485 uint32_t register_list = OPER_I_16(mc68kcpu);
21486 uint32_t ea = EA_AY_AI_32(mc68kcpu);
21487 uint32_t count = 0;
21488
21489 for(; i < 16; i++)
21490 if(register_list & (1 << i))
21491 {
21492 REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea);
21493 ea += 4;
21494 count++;
21495 }
21496
21497 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21498 }
21499
21500
21501 static void m68k_op_movem_32_er_di(m68000_base_device* mc68kcpu)
21502 {
21503 uint32_t i = 0;
21504 uint32_t register_list = OPER_I_16(mc68kcpu);
21505 uint32_t ea = EA_AY_DI_32(mc68kcpu);
21506 uint32_t count = 0;
21507
21508 for(; i < 16; i++)
21509 if(register_list & (1 << i))
21510 {
21511 REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea);
21512 ea += 4;
21513 count++;
21514 }
21515
21516 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21517 }
21518
21519
21520 static void m68k_op_movem_32_er_ix(m68000_base_device* mc68kcpu)
21521 {
21522 uint32_t i = 0;
21523 uint32_t register_list = OPER_I_16(mc68kcpu);
21524 uint32_t ea = EA_AY_IX_32(mc68kcpu);
21525 uint32_t count = 0;
21526
21527 for(; i < 16; i++)
21528 if(register_list & (1 << i))
21529 {
21530 REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea);
21531 ea += 4;
21532 count++;
21533 }
21534
21535 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21536 }
21537
21538
21539 static void m68k_op_movem_32_er_aw(m68000_base_device* mc68kcpu)
21540 {
21541 uint32_t i = 0;
21542 uint32_t register_list = OPER_I_16(mc68kcpu);
21543 uint32_t ea = EA_AW_32(mc68kcpu);
21544 uint32_t count = 0;
21545
21546 for(; i < 16; i++)
21547 if(register_list & (1 << i))
21548 {
21549 REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea);
21550 ea += 4;
21551 count++;
21552 }
21553
21554 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21555 }
21556
21557
21558 static void m68k_op_movem_32_er_al(m68000_base_device* mc68kcpu)
21559 {
21560 uint32_t i = 0;
21561 uint32_t register_list = OPER_I_16(mc68kcpu);
21562 uint32_t ea = EA_AL_32(mc68kcpu);
21563 uint32_t count = 0;
21564
21565 for(; i < 16; i++)
21566 if(register_list & (1 << i))
21567 {
21568 REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea);
21569 ea += 4;
21570 count++;
21571 }
21572
21573 (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider;
21574 }
21575
21576
21577 static void m68k_op_movep_16_re(m68000_base_device* mc68kcpu)
21578 {
21579 uint32_t ea = EA_AY_DI_16(mc68kcpu);
21580 uint32_t src = DX(mc68kcpu);
21581
21582 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(src >> 8));
21583 m68ki_write_8((mc68kcpu), ea += 2, MASK_OUT_ABOVE_8(src));
21584 }
21585
21586
21587 static void m68k_op_movep_32_re(m68000_base_device* mc68kcpu)
21588 {
21589 uint32_t ea = EA_AY_DI_32(mc68kcpu);
21590 uint32_t src = DX(mc68kcpu);
21591
21592 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(src >> 24));
21593 m68ki_write_8((mc68kcpu), ea += 2, MASK_OUT_ABOVE_8(src >> 16));
21594 m68ki_write_8((mc68kcpu), ea += 2, MASK_OUT_ABOVE_8(src >> 8));
21595 m68ki_write_8((mc68kcpu), ea += 2, MASK_OUT_ABOVE_8(src));
21596 }
21597
21598
21599 static void m68k_op_movep_16_er(m68000_base_device* mc68kcpu)
21600 {
21601 uint32_t ea = EA_AY_DI_16(mc68kcpu);
21602 uint32_t* r_dst = &DX(mc68kcpu);
21603
21604 *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8((mc68kcpu), ea) << 8) + m68ki_read_8((mc68kcpu), ea + 2));
21605 }
21606
21607
21608 static void m68k_op_movep_32_er(m68000_base_device* mc68kcpu)
21609 {
21610 uint32_t ea = EA_AY_DI_32(mc68kcpu);
21611
21612 DX(mc68kcpu) = (m68ki_read_8((mc68kcpu), ea) << 24) + (m68ki_read_8((mc68kcpu), ea + 2) << 16)
21613 + (m68ki_read_8((mc68kcpu), ea + 4) << 8) + m68ki_read_8((mc68kcpu), ea + 6);
21614 }
21615
21616
21617 static void m68k_op_moves_8_ai(m68000_base_device* mc68kcpu)
21618 {
21619 m68ki_exception_illegal(mc68kcpu);
21620 }
21621
21622
21623 static void m68k_op_moves_8_pi(m68000_base_device* mc68kcpu)
21624 {
21625 m68ki_exception_illegal(mc68kcpu);
21626 }
21627
21628
21629 static void m68k_op_moves_8_pi7(m68000_base_device* mc68kcpu)
21630 {
21631 m68ki_exception_illegal(mc68kcpu);
21632 }
21633
21634
21635 static void m68k_op_moves_8_pd(m68000_base_device* mc68kcpu)
21636 {
21637 m68ki_exception_illegal(mc68kcpu);
21638 }
21639
21640
21641 static void m68k_op_moves_8_pd7(m68000_base_device* mc68kcpu)
21642 {
21643 m68ki_exception_illegal(mc68kcpu);
21644 }
21645
21646
21647 static void m68k_op_moves_8_di(m68000_base_device* mc68kcpu)
21648 {
21649 m68ki_exception_illegal(mc68kcpu);
21650 }
21651
21652
21653 static void m68k_op_moves_8_ix(m68000_base_device* mc68kcpu)
21654 {
21655 m68ki_exception_illegal(mc68kcpu);
21656 }
21657
21658
21659 static void m68k_op_moves_8_aw(m68000_base_device* mc68kcpu)
21660 {
21661 m68ki_exception_illegal(mc68kcpu);
21662 }
21663
21664
21665 static void m68k_op_moves_8_al(m68000_base_device* mc68kcpu)
21666 {
21667 m68ki_exception_illegal(mc68kcpu);
21668 }
21669
21670
21671 static void m68k_op_moves_16_ai(m68000_base_device* mc68kcpu)
21672 {
21673 m68ki_exception_illegal(mc68kcpu);
21674 }
21675
21676
21677 static void m68k_op_moves_16_pi(m68000_base_device* mc68kcpu)
21678 {
21679 m68ki_exception_illegal(mc68kcpu);
21680 }
21681
21682
21683 static void m68k_op_moves_16_pd(m68000_base_device* mc68kcpu)
21684 {
21685 m68ki_exception_illegal(mc68kcpu);
21686 }
21687
21688
21689 static void m68k_op_moves_16_di(m68000_base_device* mc68kcpu)
21690 {
21691 m68ki_exception_illegal(mc68kcpu);
21692 }
21693
21694
21695 static void m68k_op_moves_16_ix(m68000_base_device* mc68kcpu)
21696 {
21697 m68ki_exception_illegal(mc68kcpu);
21698 }
21699
21700
21701 static void m68k_op_moves_16_aw(m68000_base_device* mc68kcpu)
21702 {
21703 m68ki_exception_illegal(mc68kcpu);
21704 }
21705
21706
21707 static void m68k_op_moves_16_al(m68000_base_device* mc68kcpu)
21708 {
21709 m68ki_exception_illegal(mc68kcpu);
21710 }
21711
21712
21713 static void m68k_op_moves_32_ai(m68000_base_device* mc68kcpu)
21714 {
21715 m68ki_exception_illegal(mc68kcpu);
21716 }
21717
21718
21719 static void m68k_op_moves_32_pi(m68000_base_device* mc68kcpu)
21720 {
21721 m68ki_exception_illegal(mc68kcpu);
21722 }
21723
21724
21725 static void m68k_op_moves_32_pd(m68000_base_device* mc68kcpu)
21726 {
21727 m68ki_exception_illegal(mc68kcpu);
21728 }
21729
21730
21731 static void m68k_op_moves_32_di(m68000_base_device* mc68kcpu)
21732 {
21733 m68ki_exception_illegal(mc68kcpu);
21734 }
21735
21736
21737 static void m68k_op_moves_32_ix(m68000_base_device* mc68kcpu)
21738 {
21739 m68ki_exception_illegal(mc68kcpu);
21740 }
21741
21742
21743 static void m68k_op_moves_32_aw(m68000_base_device* mc68kcpu)
21744 {
21745 m68ki_exception_illegal(mc68kcpu);
21746 }
21747
21748
21749 static void m68k_op_moves_32_al(m68000_base_device* mc68kcpu)
21750 {
21751 m68ki_exception_illegal(mc68kcpu);
21752 }
21753
21754
21755 static void m68k_op_moveq_32(m68000_base_device* mc68kcpu)
21756 {
21757 uint32_t res = DX(mc68kcpu) = MAKE_INT_8(MASK_OUT_ABOVE_8((mc68kcpu)->ir));
21758
21759 (mc68kcpu)->n_flag = NFLAG_32(res);
21760 (mc68kcpu)->not_z_flag = res;
21761 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21762 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21763 }
21764
21765
21766 static void m68k_op_move16_32(m68000_base_device* mc68kcpu)
21767 {
21768 uint16_t w2 = OPER_I_16(mc68kcpu);
21769 int ax = (mc68kcpu)->ir & 7;
21770 int ay = (w2 >> 12) & 7;
21771 m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[ay], m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[ax]));
21772 m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[ay]+4, m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[ax]+4));
21773 m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[ay]+8, m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[ax]+8));
21774 m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[ay]+12, m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[ax]+12));
21775
21776 REG_A(mc68kcpu)[ax] += 16;
21777 REG_A(mc68kcpu)[ay] += 16;
21778 }
21779
21780
21781 static void m68k_op_muls_16_d(m68000_base_device* mc68kcpu)
21782 {
21783 uint32_t* r_dst = &DX(mc68kcpu);
21784 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(DY(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21785
21786 *r_dst = res;
21787
21788 (mc68kcpu)->not_z_flag = res;
21789 (mc68kcpu)->n_flag = NFLAG_32(res);
21790 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21791 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21792 }
21793
21794
21795 static void m68k_op_muls_16_ai(m68000_base_device* mc68kcpu)
21796 {
21797 uint32_t* r_dst = &DX(mc68kcpu);
21798 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_AI_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21799
21800 *r_dst = res;
21801
21802 (mc68kcpu)->not_z_flag = res;
21803 (mc68kcpu)->n_flag = NFLAG_32(res);
21804 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21805 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21806 }
21807
21808
21809 static void m68k_op_muls_16_pi(m68000_base_device* mc68kcpu)
21810 {
21811 uint32_t* r_dst = &DX(mc68kcpu);
21812 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PI_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21813
21814 *r_dst = res;
21815
21816 (mc68kcpu)->not_z_flag = res;
21817 (mc68kcpu)->n_flag = NFLAG_32(res);
21818 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21819 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21820 }
21821
21822
21823 static void m68k_op_muls_16_pd(m68000_base_device* mc68kcpu)
21824 {
21825 uint32_t* r_dst = &DX(mc68kcpu);
21826 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PD_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21827
21828 *r_dst = res;
21829
21830 (mc68kcpu)->not_z_flag = res;
21831 (mc68kcpu)->n_flag = NFLAG_32(res);
21832 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21833 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21834 }
21835
21836
21837 static void m68k_op_muls_16_di(m68000_base_device* mc68kcpu)
21838 {
21839 uint32_t* r_dst = &DX(mc68kcpu);
21840 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_DI_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21841
21842 *r_dst = res;
21843
21844 (mc68kcpu)->not_z_flag = res;
21845 (mc68kcpu)->n_flag = NFLAG_32(res);
21846 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21847 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21848 }
21849
21850
21851 static void m68k_op_muls_16_ix(m68000_base_device* mc68kcpu)
21852 {
21853 uint32_t* r_dst = &DX(mc68kcpu);
21854 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_IX_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21855
21856 *r_dst = res;
21857
21858 (mc68kcpu)->not_z_flag = res;
21859 (mc68kcpu)->n_flag = NFLAG_32(res);
21860 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21861 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21862 }
21863
21864
21865 static void m68k_op_muls_16_aw(m68000_base_device* mc68kcpu)
21866 {
21867 uint32_t* r_dst = &DX(mc68kcpu);
21868 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AW_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21869
21870 *r_dst = res;
21871
21872 (mc68kcpu)->not_z_flag = res;
21873 (mc68kcpu)->n_flag = NFLAG_32(res);
21874 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21875 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21876 }
21877
21878
21879 static void m68k_op_muls_16_al(m68000_base_device* mc68kcpu)
21880 {
21881 uint32_t* r_dst = &DX(mc68kcpu);
21882 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AL_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21883
21884 *r_dst = res;
21885
21886 (mc68kcpu)->not_z_flag = res;
21887 (mc68kcpu)->n_flag = NFLAG_32(res);
21888 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21889 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21890 }
21891
21892
21893 static void m68k_op_muls_16_pcdi(m68000_base_device* mc68kcpu)
21894 {
21895 uint32_t* r_dst = &DX(mc68kcpu);
21896 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCDI_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21897
21898 *r_dst = res;
21899
21900 (mc68kcpu)->not_z_flag = res;
21901 (mc68kcpu)->n_flag = NFLAG_32(res);
21902 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21903 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21904 }
21905
21906
21907 static void m68k_op_muls_16_pcix(m68000_base_device* mc68kcpu)
21908 {
21909 uint32_t* r_dst = &DX(mc68kcpu);
21910 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCIX_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21911
21912 *r_dst = res;
21913
21914 (mc68kcpu)->not_z_flag = res;
21915 (mc68kcpu)->n_flag = NFLAG_32(res);
21916 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21917 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21918 }
21919
21920
21921 static void m68k_op_muls_16_i(m68000_base_device* mc68kcpu)
21922 {
21923 uint32_t* r_dst = &DX(mc68kcpu);
21924 uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_I_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
21925
21926 *r_dst = res;
21927
21928 (mc68kcpu)->not_z_flag = res;
21929 (mc68kcpu)->n_flag = NFLAG_32(res);
21930 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21931 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21932 }
21933
21934
21935 static void m68k_op_mulu_16_d(m68000_base_device* mc68kcpu)
21936 {
21937 uint32_t* r_dst = &DX(mc68kcpu);
21938 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)) * MASK_OUT_ABOVE_16(*r_dst);
21939
21940 *r_dst = res;
21941
21942 (mc68kcpu)->not_z_flag = res;
21943 (mc68kcpu)->n_flag = NFLAG_32(res);
21944 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21945 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21946 }
21947
21948
21949 static void m68k_op_mulu_16_ai(m68000_base_device* mc68kcpu)
21950 {
21951 uint32_t* r_dst = &DX(mc68kcpu);
21952 uint32_t res = OPER_AY_AI_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
21953
21954 *r_dst = res;
21955
21956 (mc68kcpu)->not_z_flag = res;
21957 (mc68kcpu)->n_flag = NFLAG_32(res);
21958 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21959 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21960 }
21961
21962
21963 static void m68k_op_mulu_16_pi(m68000_base_device* mc68kcpu)
21964 {
21965 uint32_t* r_dst = &DX(mc68kcpu);
21966 uint32_t res = OPER_AY_PI_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
21967
21968 *r_dst = res;
21969
21970 (mc68kcpu)->not_z_flag = res;
21971 (mc68kcpu)->n_flag = NFLAG_32(res);
21972 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21973 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21974 }
21975
21976
21977 static void m68k_op_mulu_16_pd(m68000_base_device* mc68kcpu)
21978 {
21979 uint32_t* r_dst = &DX(mc68kcpu);
21980 uint32_t res = OPER_AY_PD_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
21981
21982 *r_dst = res;
21983
21984 (mc68kcpu)->not_z_flag = res;
21985 (mc68kcpu)->n_flag = NFLAG_32(res);
21986 (mc68kcpu)->v_flag = VFLAG_CLEAR;
21987 (mc68kcpu)->c_flag = CFLAG_CLEAR;
21988 }
21989
21990
21991 static void m68k_op_mulu_16_di(m68000_base_device* mc68kcpu)
21992 {
21993 uint32_t* r_dst = &DX(mc68kcpu);
21994 uint32_t res = OPER_AY_DI_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
21995
21996 *r_dst = res;
21997
21998 (mc68kcpu)->not_z_flag = res;
21999 (mc68kcpu)->n_flag = NFLAG_32(res);
22000 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22001 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22002 }
22003
22004
22005 static void m68k_op_mulu_16_ix(m68000_base_device* mc68kcpu)
22006 {
22007 uint32_t* r_dst = &DX(mc68kcpu);
22008 uint32_t res = OPER_AY_IX_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
22009
22010 *r_dst = res;
22011
22012 (mc68kcpu)->not_z_flag = res;
22013 (mc68kcpu)->n_flag = NFLAG_32(res);
22014 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22015 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22016 }
22017
22018
22019 static void m68k_op_mulu_16_aw(m68000_base_device* mc68kcpu)
22020 {
22021 uint32_t* r_dst = &DX(mc68kcpu);
22022 uint32_t res = OPER_AW_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
22023
22024 *r_dst = res;
22025
22026 (mc68kcpu)->not_z_flag = res;
22027 (mc68kcpu)->n_flag = NFLAG_32(res);
22028 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22029 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22030 }
22031
22032
22033 static void m68k_op_mulu_16_al(m68000_base_device* mc68kcpu)
22034 {
22035 uint32_t* r_dst = &DX(mc68kcpu);
22036 uint32_t res = OPER_AL_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
22037
22038 *r_dst = res;
22039
22040 (mc68kcpu)->not_z_flag = res;
22041 (mc68kcpu)->n_flag = NFLAG_32(res);
22042 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22043 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22044 }
22045
22046
22047 static void m68k_op_mulu_16_pcdi(m68000_base_device* mc68kcpu)
22048 {
22049 uint32_t* r_dst = &DX(mc68kcpu);
22050 uint32_t res = OPER_PCDI_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
22051
22052 *r_dst = res;
22053
22054 (mc68kcpu)->not_z_flag = res;
22055 (mc68kcpu)->n_flag = NFLAG_32(res);
22056 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22057 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22058 }
22059
22060
22061 static void m68k_op_mulu_16_pcix(m68000_base_device* mc68kcpu)
22062 {
22063 uint32_t* r_dst = &DX(mc68kcpu);
22064 uint32_t res = OPER_PCIX_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
22065
22066 *r_dst = res;
22067
22068 (mc68kcpu)->not_z_flag = res;
22069 (mc68kcpu)->n_flag = NFLAG_32(res);
22070 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22071 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22072 }
22073
22074
22075 static void m68k_op_mulu_16_i(m68000_base_device* mc68kcpu)
22076 {
22077 uint32_t* r_dst = &DX(mc68kcpu);
22078 uint32_t res = OPER_I_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst);
22079
22080 *r_dst = res;
22081
22082 (mc68kcpu)->not_z_flag = res;
22083 (mc68kcpu)->n_flag = NFLAG_32(res);
22084 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22085 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22086 }
22087
22088
22089 static void m68k_op_mull_32_d(m68000_base_device* mc68kcpu)
22090 {
22091 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22092 {
22093 uint32_t word2 = OPER_I_16(mc68kcpu);
22094 uint64_t src = DY(mc68kcpu);
22095 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22096 uint64_t res;
22097
22098 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22099
22100 if(BIT_B(word2)) /* signed */
22101 {
22102 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22103 if(!BIT_A(word2))
22104 {
22105 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22106 (mc68kcpu)->n_flag = NFLAG_32(res);
22107 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22108 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22109 return;
22110 }
22111 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22112 (mc68kcpu)->n_flag = NFLAG_64(res);
22113 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22114 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22115 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22116 return;
22117 }
22118
22119 res = src * dst;
22120 if(!BIT_A(word2))
22121 {
22122 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22123 (mc68kcpu)->n_flag = NFLAG_32(res);
22124 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22125 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22126 return;
22127 }
22128 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22129 (mc68kcpu)->n_flag = NFLAG_64(res);
22130 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22131 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22132 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22133 return;
22134 }
22135 m68ki_exception_illegal(mc68kcpu);
22136 }
22137
22138
22139 static void m68k_op_mull_32_ai(m68000_base_device* mc68kcpu)
22140 {
22141 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22142 {
22143 uint32_t word2 = OPER_I_16(mc68kcpu);
22144 uint64_t src = OPER_AY_AI_32(mc68kcpu);
22145 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22146 uint64_t res;
22147
22148 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22149
22150 if(BIT_B(word2)) /* signed */
22151 {
22152 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22153 if(!BIT_A(word2))
22154 {
22155 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22156 (mc68kcpu)->n_flag = NFLAG_32(res);
22157 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22158 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22159 return;
22160 }
22161 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22162 (mc68kcpu)->n_flag = NFLAG_64(res);
22163 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22164 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22165 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22166 return;
22167 }
22168
22169 res = src * dst;
22170 if(!BIT_A(word2))
22171 {
22172 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22173 (mc68kcpu)->n_flag = NFLAG_32(res);
22174 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22175 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22176 return;
22177 }
22178 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22179 (mc68kcpu)->n_flag = NFLAG_64(res);
22180 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22181 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22182 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22183 return;
22184 }
22185 m68ki_exception_illegal(mc68kcpu);
22186 }
22187
22188
22189 static void m68k_op_mull_32_pi(m68000_base_device* mc68kcpu)
22190 {
22191 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22192 {
22193 uint32_t word2 = OPER_I_16(mc68kcpu);
22194 uint64_t src = OPER_AY_PI_32(mc68kcpu);
22195 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22196 uint64_t res;
22197
22198 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22199
22200 if(BIT_B(word2)) /* signed */
22201 {
22202 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22203 if(!BIT_A(word2))
22204 {
22205 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22206 (mc68kcpu)->n_flag = NFLAG_32(res);
22207 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22208 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22209 return;
22210 }
22211 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22212 (mc68kcpu)->n_flag = NFLAG_64(res);
22213 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22214 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22215 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22216 return;
22217 }
22218
22219 res = src * dst;
22220 if(!BIT_A(word2))
22221 {
22222 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22223 (mc68kcpu)->n_flag = NFLAG_32(res);
22224 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22225 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22226 return;
22227 }
22228 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22229 (mc68kcpu)->n_flag = NFLAG_64(res);
22230 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22231 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22232 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22233 return;
22234 }
22235 m68ki_exception_illegal(mc68kcpu);
22236 }
22237
22238
22239 static void m68k_op_mull_32_pd(m68000_base_device* mc68kcpu)
22240 {
22241 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22242 {
22243 uint32_t word2 = OPER_I_16(mc68kcpu);
22244 uint64_t src = OPER_AY_PD_32(mc68kcpu);
22245 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22246 uint64_t res;
22247
22248 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22249
22250 if(BIT_B(word2)) /* signed */
22251 {
22252 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22253 if(!BIT_A(word2))
22254 {
22255 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22256 (mc68kcpu)->n_flag = NFLAG_32(res);
22257 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22258 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22259 return;
22260 }
22261 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22262 (mc68kcpu)->n_flag = NFLAG_64(res);
22263 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22264 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22265 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22266 return;
22267 }
22268
22269 res = src * dst;
22270 if(!BIT_A(word2))
22271 {
22272 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22273 (mc68kcpu)->n_flag = NFLAG_32(res);
22274 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22275 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22276 return;
22277 }
22278 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22279 (mc68kcpu)->n_flag = NFLAG_64(res);
22280 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22281 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22282 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22283 return;
22284 }
22285 m68ki_exception_illegal(mc68kcpu);
22286 }
22287
22288
22289 static void m68k_op_mull_32_di(m68000_base_device* mc68kcpu)
22290 {
22291 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22292 {
22293 uint32_t word2 = OPER_I_16(mc68kcpu);
22294 uint64_t src = OPER_AY_DI_32(mc68kcpu);
22295 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22296 uint64_t res;
22297
22298 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22299
22300 if(BIT_B(word2)) /* signed */
22301 {
22302 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22303 if(!BIT_A(word2))
22304 {
22305 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22306 (mc68kcpu)->n_flag = NFLAG_32(res);
22307 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22308 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22309 return;
22310 }
22311 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22312 (mc68kcpu)->n_flag = NFLAG_64(res);
22313 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22314 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22315 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22316 return;
22317 }
22318
22319 res = src * dst;
22320 if(!BIT_A(word2))
22321 {
22322 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22323 (mc68kcpu)->n_flag = NFLAG_32(res);
22324 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22325 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22326 return;
22327 }
22328 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22329 (mc68kcpu)->n_flag = NFLAG_64(res);
22330 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22331 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22332 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22333 return;
22334 }
22335 m68ki_exception_illegal(mc68kcpu);
22336 }
22337
22338
22339 static void m68k_op_mull_32_ix(m68000_base_device* mc68kcpu)
22340 {
22341 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22342 {
22343 uint32_t word2 = OPER_I_16(mc68kcpu);
22344 uint64_t src = OPER_AY_IX_32(mc68kcpu);
22345 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22346 uint64_t res;
22347
22348 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22349
22350 if(BIT_B(word2)) /* signed */
22351 {
22352 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22353 if(!BIT_A(word2))
22354 {
22355 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22356 (mc68kcpu)->n_flag = NFLAG_32(res);
22357 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22358 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22359 return;
22360 }
22361 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22362 (mc68kcpu)->n_flag = NFLAG_64(res);
22363 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22364 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22365 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22366 return;
22367 }
22368
22369 res = src * dst;
22370 if(!BIT_A(word2))
22371 {
22372 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22373 (mc68kcpu)->n_flag = NFLAG_32(res);
22374 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22375 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22376 return;
22377 }
22378 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22379 (mc68kcpu)->n_flag = NFLAG_64(res);
22380 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22381 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22382 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22383 return;
22384 }
22385 m68ki_exception_illegal(mc68kcpu);
22386 }
22387
22388
22389 static void m68k_op_mull_32_aw(m68000_base_device* mc68kcpu)
22390 {
22391 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22392 {
22393 uint32_t word2 = OPER_I_16(mc68kcpu);
22394 uint64_t src = OPER_AW_32(mc68kcpu);
22395 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22396 uint64_t res;
22397
22398 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22399
22400 if(BIT_B(word2)) /* signed */
22401 {
22402 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22403 if(!BIT_A(word2))
22404 {
22405 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22406 (mc68kcpu)->n_flag = NFLAG_32(res);
22407 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22408 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22409 return;
22410 }
22411 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22412 (mc68kcpu)->n_flag = NFLAG_64(res);
22413 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22414 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22415 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22416 return;
22417 }
22418
22419 res = src * dst;
22420 if(!BIT_A(word2))
22421 {
22422 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22423 (mc68kcpu)->n_flag = NFLAG_32(res);
22424 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22425 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22426 return;
22427 }
22428 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22429 (mc68kcpu)->n_flag = NFLAG_64(res);
22430 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22431 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22432 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22433 return;
22434 }
22435 m68ki_exception_illegal(mc68kcpu);
22436 }
22437
22438
22439 static void m68k_op_mull_32_al(m68000_base_device* mc68kcpu)
22440 {
22441 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22442 {
22443 uint32_t word2 = OPER_I_16(mc68kcpu);
22444 uint64_t src = OPER_AL_32(mc68kcpu);
22445 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22446 uint64_t res;
22447
22448 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22449
22450 if(BIT_B(word2)) /* signed */
22451 {
22452 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22453 if(!BIT_A(word2))
22454 {
22455 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22456 (mc68kcpu)->n_flag = NFLAG_32(res);
22457 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22458 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22459 return;
22460 }
22461 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22462 (mc68kcpu)->n_flag = NFLAG_64(res);
22463 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22464 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22465 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22466 return;
22467 }
22468
22469 res = src * dst;
22470 if(!BIT_A(word2))
22471 {
22472 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22473 (mc68kcpu)->n_flag = NFLAG_32(res);
22474 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22475 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22476 return;
22477 }
22478 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22479 (mc68kcpu)->n_flag = NFLAG_64(res);
22480 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22481 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22482 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22483 return;
22484 }
22485 m68ki_exception_illegal(mc68kcpu);
22486 }
22487
22488
22489 static void m68k_op_mull_32_pcdi(m68000_base_device* mc68kcpu)
22490 {
22491 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22492 {
22493 uint32_t word2 = OPER_I_16(mc68kcpu);
22494 uint64_t src = OPER_PCDI_32(mc68kcpu);
22495 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22496 uint64_t res;
22497
22498 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22499
22500 if(BIT_B(word2)) /* signed */
22501 {
22502 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22503 if(!BIT_A(word2))
22504 {
22505 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22506 (mc68kcpu)->n_flag = NFLAG_32(res);
22507 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22508 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22509 return;
22510 }
22511 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22512 (mc68kcpu)->n_flag = NFLAG_64(res);
22513 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22514 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22515 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22516 return;
22517 }
22518
22519 res = src * dst;
22520 if(!BIT_A(word2))
22521 {
22522 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22523 (mc68kcpu)->n_flag = NFLAG_32(res);
22524 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22525 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22526 return;
22527 }
22528 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22529 (mc68kcpu)->n_flag = NFLAG_64(res);
22530 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22531 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22532 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22533 return;
22534 }
22535 m68ki_exception_illegal(mc68kcpu);
22536 }
22537
22538
22539 static void m68k_op_mull_32_pcix(m68000_base_device* mc68kcpu)
22540 {
22541 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22542 {
22543 uint32_t word2 = OPER_I_16(mc68kcpu);
22544 uint64_t src = OPER_PCIX_32(mc68kcpu);
22545 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22546 uint64_t res;
22547
22548 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22549
22550 if(BIT_B(word2)) /* signed */
22551 {
22552 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22553 if(!BIT_A(word2))
22554 {
22555 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22556 (mc68kcpu)->n_flag = NFLAG_32(res);
22557 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22558 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22559 return;
22560 }
22561 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22562 (mc68kcpu)->n_flag = NFLAG_64(res);
22563 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22564 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22565 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22566 return;
22567 }
22568
22569 res = src * dst;
22570 if(!BIT_A(word2))
22571 {
22572 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22573 (mc68kcpu)->n_flag = NFLAG_32(res);
22574 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22575 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22576 return;
22577 }
22578 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22579 (mc68kcpu)->n_flag = NFLAG_64(res);
22580 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22581 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22582 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22583 return;
22584 }
22585 m68ki_exception_illegal(mc68kcpu);
22586 }
22587
22588
22589 static void m68k_op_mull_32_i(m68000_base_device* mc68kcpu)
22590 {
22591 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
22592 {
22593 uint32_t word2 = OPER_I_16(mc68kcpu);
22594 uint64_t src = OPER_I_32(mc68kcpu);
22595 uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7];
22596 uint64_t res;
22597
22598 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22599
22600 if(BIT_B(word2)) /* signed */
22601 {
22602 res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst);
22603 if(!BIT_A(word2))
22604 {
22605 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22606 (mc68kcpu)->n_flag = NFLAG_32(res);
22607 (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7;
22608 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22609 return;
22610 }
22611 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22612 (mc68kcpu)->n_flag = NFLAG_64(res);
22613 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22614 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22615 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22616 return;
22617 }
22618
22619 res = src * dst;
22620 if(!BIT_A(word2))
22621 {
22622 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
22623 (mc68kcpu)->n_flag = NFLAG_32(res);
22624 (mc68kcpu)->v_flag = (res > 0xffffffff)<<7;
22625 REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag;
22626 return;
22627 }
22628 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32);
22629 (mc68kcpu)->n_flag = NFLAG_64(res);
22630 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22631 REG_D(mc68kcpu)[word2 & 7] = (res >> 32);
22632 REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
22633 return;
22634 }
22635 m68ki_exception_illegal(mc68kcpu);
22636 }
22637
22638
22639 static void m68k_op_nbcd_8_d(m68000_base_device* mc68kcpu)
22640 {
22641 uint32_t* r_dst = &DY(mc68kcpu);
22642 uint32_t dst = *r_dst;
22643 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22644
22645 if(res != 0x9a)
22646 {
22647 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22648
22649 if((res & 0x0f) == 0xa)
22650 res = (res & 0xf0) + 0x10;
22651
22652 res = MASK_OUT_ABOVE_8(res);
22653
22654 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22655
22656 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
22657
22658 (mc68kcpu)->not_z_flag |= res;
22659 (mc68kcpu)->c_flag = CFLAG_SET;
22660 (mc68kcpu)->x_flag = XFLAG_SET;
22661 }
22662 else
22663 {
22664 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22665 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22666 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22667 }
22668 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22669 }
22670
22671
22672 static void m68k_op_nbcd_8_ai(m68000_base_device* mc68kcpu)
22673 {
22674 uint32_t ea = EA_AY_AI_8(mc68kcpu);
22675 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22676 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22677
22678 if(res != 0x9a)
22679 {
22680 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22681
22682 if((res & 0x0f) == 0xa)
22683 res = (res & 0xf0) + 0x10;
22684
22685 res = MASK_OUT_ABOVE_8(res);
22686
22687 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22688
22689 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22690
22691 (mc68kcpu)->not_z_flag |= res;
22692 (mc68kcpu)->c_flag = CFLAG_SET;
22693 (mc68kcpu)->x_flag = XFLAG_SET;
22694 }
22695 else
22696 {
22697 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22698 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22699 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22700 }
22701 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22702 }
22703
22704
22705 static void m68k_op_nbcd_8_pi(m68000_base_device* mc68kcpu)
22706 {
22707 uint32_t ea = EA_AY_PI_8(mc68kcpu);
22708 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22709 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22710
22711 if(res != 0x9a)
22712 {
22713 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22714
22715 if((res & 0x0f) == 0xa)
22716 res = (res & 0xf0) + 0x10;
22717
22718 res = MASK_OUT_ABOVE_8(res);
22719
22720 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22721
22722 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22723
22724 (mc68kcpu)->not_z_flag |= res;
22725 (mc68kcpu)->c_flag = CFLAG_SET;
22726 (mc68kcpu)->x_flag = XFLAG_SET;
22727 }
22728 else
22729 {
22730 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22731 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22732 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22733 }
22734 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22735 }
22736
22737
22738 static void m68k_op_nbcd_8_pi7(m68000_base_device* mc68kcpu)
22739 {
22740 uint32_t ea = EA_A7_PI_8(mc68kcpu);
22741 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22742 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22743
22744 if(res != 0x9a)
22745 {
22746 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22747
22748 if((res & 0x0f) == 0xa)
22749 res = (res & 0xf0) + 0x10;
22750
22751 res = MASK_OUT_ABOVE_8(res);
22752
22753 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22754
22755 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22756
22757 (mc68kcpu)->not_z_flag |= res;
22758 (mc68kcpu)->c_flag = CFLAG_SET;
22759 (mc68kcpu)->x_flag = XFLAG_SET;
22760 }
22761 else
22762 {
22763 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22764 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22765 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22766 }
22767 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22768 }
22769
22770
22771 static void m68k_op_nbcd_8_pd(m68000_base_device* mc68kcpu)
22772 {
22773 uint32_t ea = EA_AY_PD_8(mc68kcpu);
22774 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22775 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22776
22777 if(res != 0x9a)
22778 {
22779 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22780
22781 if((res & 0x0f) == 0xa)
22782 res = (res & 0xf0) + 0x10;
22783
22784 res = MASK_OUT_ABOVE_8(res);
22785
22786 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22787
22788 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22789
22790 (mc68kcpu)->not_z_flag |= res;
22791 (mc68kcpu)->c_flag = CFLAG_SET;
22792 (mc68kcpu)->x_flag = XFLAG_SET;
22793 }
22794 else
22795 {
22796 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22797 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22798 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22799 }
22800 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22801 }
22802
22803
22804 static void m68k_op_nbcd_8_pd7(m68000_base_device* mc68kcpu)
22805 {
22806 uint32_t ea = EA_A7_PD_8(mc68kcpu);
22807 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22808 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22809
22810 if(res != 0x9a)
22811 {
22812 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22813
22814 if((res & 0x0f) == 0xa)
22815 res = (res & 0xf0) + 0x10;
22816
22817 res = MASK_OUT_ABOVE_8(res);
22818
22819 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22820
22821 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22822
22823 (mc68kcpu)->not_z_flag |= res;
22824 (mc68kcpu)->c_flag = CFLAG_SET;
22825 (mc68kcpu)->x_flag = XFLAG_SET;
22826 }
22827 else
22828 {
22829 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22830 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22831 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22832 }
22833 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22834 }
22835
22836
22837 static void m68k_op_nbcd_8_di(m68000_base_device* mc68kcpu)
22838 {
22839 uint32_t ea = EA_AY_DI_8(mc68kcpu);
22840 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22841 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22842
22843 if(res != 0x9a)
22844 {
22845 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22846
22847 if((res & 0x0f) == 0xa)
22848 res = (res & 0xf0) + 0x10;
22849
22850 res = MASK_OUT_ABOVE_8(res);
22851
22852 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22853
22854 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22855
22856 (mc68kcpu)->not_z_flag |= res;
22857 (mc68kcpu)->c_flag = CFLAG_SET;
22858 (mc68kcpu)->x_flag = XFLAG_SET;
22859 }
22860 else
22861 {
22862 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22863 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22864 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22865 }
22866 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22867 }
22868
22869
22870 static void m68k_op_nbcd_8_ix(m68000_base_device* mc68kcpu)
22871 {
22872 uint32_t ea = EA_AY_IX_8(mc68kcpu);
22873 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22874 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22875
22876 if(res != 0x9a)
22877 {
22878 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22879
22880 if((res & 0x0f) == 0xa)
22881 res = (res & 0xf0) + 0x10;
22882
22883 res = MASK_OUT_ABOVE_8(res);
22884
22885 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22886
22887 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22888
22889 (mc68kcpu)->not_z_flag |= res;
22890 (mc68kcpu)->c_flag = CFLAG_SET;
22891 (mc68kcpu)->x_flag = XFLAG_SET;
22892 }
22893 else
22894 {
22895 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22896 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22897 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22898 }
22899 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22900 }
22901
22902
22903 static void m68k_op_nbcd_8_aw(m68000_base_device* mc68kcpu)
22904 {
22905 uint32_t ea = EA_AW_8(mc68kcpu);
22906 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22907 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22908
22909 if(res != 0x9a)
22910 {
22911 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22912
22913 if((res & 0x0f) == 0xa)
22914 res = (res & 0xf0) + 0x10;
22915
22916 res = MASK_OUT_ABOVE_8(res);
22917
22918 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22919
22920 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22921
22922 (mc68kcpu)->not_z_flag |= res;
22923 (mc68kcpu)->c_flag = CFLAG_SET;
22924 (mc68kcpu)->x_flag = XFLAG_SET;
22925 }
22926 else
22927 {
22928 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22929 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22930 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22931 }
22932 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22933 }
22934
22935
22936 static void m68k_op_nbcd_8_al(m68000_base_device* mc68kcpu)
22937 {
22938 uint32_t ea = EA_AL_8(mc68kcpu);
22939 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
22940 uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu));
22941
22942 if(res != 0x9a)
22943 {
22944 (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
22945
22946 if((res & 0x0f) == 0xa)
22947 res = (res & 0xf0) + 0x10;
22948
22949 res = MASK_OUT_ABOVE_8(res);
22950
22951 (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
22952
22953 m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res));
22954
22955 (mc68kcpu)->not_z_flag |= res;
22956 (mc68kcpu)->c_flag = CFLAG_SET;
22957 (mc68kcpu)->x_flag = XFLAG_SET;
22958 }
22959 else
22960 {
22961 (mc68kcpu)->v_flag = VFLAG_CLEAR;
22962 (mc68kcpu)->c_flag = CFLAG_CLEAR;
22963 (mc68kcpu)->x_flag = XFLAG_CLEAR;
22964 }
22965 (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
22966 }
22967
22968
22969 static void m68k_op_neg_8_d(m68000_base_device* mc68kcpu)
22970 {
22971 uint32_t* r_dst = &DY(mc68kcpu);
22972 uint32_t res = 0 - MASK_OUT_ABOVE_8(*r_dst);
22973
22974 (mc68kcpu)->n_flag = NFLAG_8(res);
22975 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
22976 (mc68kcpu)->v_flag = *r_dst & res;
22977 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
22978
22979 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
22980 }
22981
22982
22983 static void m68k_op_neg_8_ai(m68000_base_device* mc68kcpu)
22984 {
22985 uint32_t ea = EA_AY_AI_8(mc68kcpu);
22986 uint32_t src = m68ki_read_8((mc68kcpu), ea);
22987 uint32_t res = 0 - src;
22988
22989 (mc68kcpu)->n_flag = NFLAG_8(res);
22990 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
22991 (mc68kcpu)->v_flag = src & res;
22992 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
22993
22994 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
22995 }
22996
22997
22998 static void m68k_op_neg_8_pi(m68000_base_device* mc68kcpu)
22999 {
23000 uint32_t ea = EA_AY_PI_8(mc68kcpu);
23001 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23002 uint32_t res = 0 - src;
23003
23004 (mc68kcpu)->n_flag = NFLAG_8(res);
23005 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
23006 (mc68kcpu)->v_flag = src & res;
23007 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
23008
23009 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23010 }
23011
23012
23013 static void m68k_op_neg_8_pi7(m68000_base_device* mc68kcpu)
23014 {
23015 uint32_t ea = EA_A7_PI_8(mc68kcpu);
23016 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23017 uint32_t res = 0 - src;
23018
23019 (mc68kcpu)->n_flag = NFLAG_8(res);
23020 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
23021 (mc68kcpu)->v_flag = src & res;
23022 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
23023
23024 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23025 }
23026
23027
23028 static void m68k_op_neg_8_pd(m68000_base_device* mc68kcpu)
23029 {
23030 uint32_t ea = EA_AY_PD_8(mc68kcpu);
23031 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23032 uint32_t res = 0 - src;
23033
23034 (mc68kcpu)->n_flag = NFLAG_8(res);
23035 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
23036 (mc68kcpu)->v_flag = src & res;
23037 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
23038
23039 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23040 }
23041
23042
23043 static void m68k_op_neg_8_pd7(m68000_base_device* mc68kcpu)
23044 {
23045 uint32_t ea = EA_A7_PD_8(mc68kcpu);
23046 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23047 uint32_t res = 0 - src;
23048
23049 (mc68kcpu)->n_flag = NFLAG_8(res);
23050 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
23051 (mc68kcpu)->v_flag = src & res;
23052 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
23053
23054 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23055 }
23056
23057
23058 static void m68k_op_neg_8_di(m68000_base_device* mc68kcpu)
23059 {
23060 uint32_t ea = EA_AY_DI_8(mc68kcpu);
23061 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23062 uint32_t res = 0 - src;
23063
23064 (mc68kcpu)->n_flag = NFLAG_8(res);
23065 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
23066 (mc68kcpu)->v_flag = src & res;
23067 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
23068
23069 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23070 }
23071
23072
23073 static void m68k_op_neg_8_ix(m68000_base_device* mc68kcpu)
23074 {
23075 uint32_t ea = EA_AY_IX_8(mc68kcpu);
23076 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23077 uint32_t res = 0 - src;
23078
23079 (mc68kcpu)->n_flag = NFLAG_8(res);
23080 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
23081 (mc68kcpu)->v_flag = src & res;
23082 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
23083
23084 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23085 }
23086
23087
23088 static void m68k_op_neg_8_aw(m68000_base_device* mc68kcpu)
23089 {
23090 uint32_t ea = EA_AW_8(mc68kcpu);
23091 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23092 uint32_t res = 0 - src;
23093
23094 (mc68kcpu)->n_flag = NFLAG_8(res);
23095 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
23096 (mc68kcpu)->v_flag = src & res;
23097 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
23098
23099 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23100 }
23101
23102
23103 static void m68k_op_neg_8_al(m68000_base_device* mc68kcpu)
23104 {
23105 uint32_t ea = EA_AL_8(mc68kcpu);
23106 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23107 uint32_t res = 0 - src;
23108
23109 (mc68kcpu)->n_flag = NFLAG_8(res);
23110 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res);
23111 (mc68kcpu)->v_flag = src & res;
23112 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
23113
23114 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23115 }
23116
23117
23118 static void m68k_op_neg_16_d(m68000_base_device* mc68kcpu)
23119 {
23120 uint32_t* r_dst = &DY(mc68kcpu);
23121 uint32_t res = 0 - MASK_OUT_ABOVE_16(*r_dst);
23122
23123 (mc68kcpu)->n_flag = NFLAG_16(res);
23124 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res);
23125 (mc68kcpu)->v_flag = (*r_dst & res)>>8;
23126 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
23127
23128 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
23129 }
23130
23131
23132 static void m68k_op_neg_16_ai(m68000_base_device* mc68kcpu)
23133 {
23134 uint32_t ea = EA_AY_AI_16(mc68kcpu);
23135 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23136 uint32_t res = 0 - src;
23137
23138 (mc68kcpu)->n_flag = NFLAG_16(res);
23139 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res);
23140 (mc68kcpu)->v_flag = (src & res)>>8;
23141 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
23142
23143 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23144 }
23145
23146
23147 static void m68k_op_neg_16_pi(m68000_base_device* mc68kcpu)
23148 {
23149 uint32_t ea = EA_AY_PI_16(mc68kcpu);
23150 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23151 uint32_t res = 0 - src;
23152
23153 (mc68kcpu)->n_flag = NFLAG_16(res);
23154 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res);
23155 (mc68kcpu)->v_flag = (src & res)>>8;
23156 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
23157
23158 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23159 }
23160
23161
23162 static void m68k_op_neg_16_pd(m68000_base_device* mc68kcpu)
23163 {
23164 uint32_t ea = EA_AY_PD_16(mc68kcpu);
23165 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23166 uint32_t res = 0 - src;
23167
23168 (mc68kcpu)->n_flag = NFLAG_16(res);
23169 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res);
23170 (mc68kcpu)->v_flag = (src & res)>>8;
23171 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
23172
23173 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23174 }
23175
23176
23177 static void m68k_op_neg_16_di(m68000_base_device* mc68kcpu)
23178 {
23179 uint32_t ea = EA_AY_DI_16(mc68kcpu);
23180 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23181 uint32_t res = 0 - src;
23182
23183 (mc68kcpu)->n_flag = NFLAG_16(res);
23184 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res);
23185 (mc68kcpu)->v_flag = (src & res)>>8;
23186 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
23187
23188 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23189 }
23190
23191
23192 static void m68k_op_neg_16_ix(m68000_base_device* mc68kcpu)
23193 {
23194 uint32_t ea = EA_AY_IX_16(mc68kcpu);
23195 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23196 uint32_t res = 0 - src;
23197
23198 (mc68kcpu)->n_flag = NFLAG_16(res);
23199 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res);
23200 (mc68kcpu)->v_flag = (src & res)>>8;
23201 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
23202
23203 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23204 }
23205
23206
23207 static void m68k_op_neg_16_aw(m68000_base_device* mc68kcpu)
23208 {
23209 uint32_t ea = EA_AW_16(mc68kcpu);
23210 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23211 uint32_t res = 0 - src;
23212
23213 (mc68kcpu)->n_flag = NFLAG_16(res);
23214 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res);
23215 (mc68kcpu)->v_flag = (src & res)>>8;
23216 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
23217
23218 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23219 }
23220
23221
23222 static void m68k_op_neg_16_al(m68000_base_device* mc68kcpu)
23223 {
23224 uint32_t ea = EA_AL_16(mc68kcpu);
23225 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23226 uint32_t res = 0 - src;
23227
23228 (mc68kcpu)->n_flag = NFLAG_16(res);
23229 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res);
23230 (mc68kcpu)->v_flag = (src & res)>>8;
23231 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
23232
23233 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23234 }
23235
23236
23237 static void m68k_op_neg_32_d(m68000_base_device* mc68kcpu)
23238 {
23239 uint32_t* r_dst = &DY(mc68kcpu);
23240 uint32_t res = 0 - *r_dst;
23241
23242 (mc68kcpu)->n_flag = NFLAG_32(res);
23243 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(*r_dst, 0, res);
23244 (mc68kcpu)->v_flag = (*r_dst & res)>>24;
23245 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
23246
23247 *r_dst = (mc68kcpu)->not_z_flag;
23248 }
23249
23250
23251 static void m68k_op_neg_32_ai(m68000_base_device* mc68kcpu)
23252 {
23253 uint32_t ea = EA_AY_AI_32(mc68kcpu);
23254 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23255 uint32_t res = 0 - src;
23256
23257 (mc68kcpu)->n_flag = NFLAG_32(res);
23258 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res);
23259 (mc68kcpu)->v_flag = (src & res)>>24;
23260 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
23261
23262 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23263 }
23264
23265
23266 static void m68k_op_neg_32_pi(m68000_base_device* mc68kcpu)
23267 {
23268 uint32_t ea = EA_AY_PI_32(mc68kcpu);
23269 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23270 uint32_t res = 0 - src;
23271
23272 (mc68kcpu)->n_flag = NFLAG_32(res);
23273 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res);
23274 (mc68kcpu)->v_flag = (src & res)>>24;
23275 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
23276
23277 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23278 }
23279
23280
23281 static void m68k_op_neg_32_pd(m68000_base_device* mc68kcpu)
23282 {
23283 uint32_t ea = EA_AY_PD_32(mc68kcpu);
23284 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23285 uint32_t res = 0 - src;
23286
23287 (mc68kcpu)->n_flag = NFLAG_32(res);
23288 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res);
23289 (mc68kcpu)->v_flag = (src & res)>>24;
23290 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
23291
23292 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23293 }
23294
23295
23296 static void m68k_op_neg_32_di(m68000_base_device* mc68kcpu)
23297 {
23298 uint32_t ea = EA_AY_DI_32(mc68kcpu);
23299 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23300 uint32_t res = 0 - src;
23301
23302 (mc68kcpu)->n_flag = NFLAG_32(res);
23303 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res);
23304 (mc68kcpu)->v_flag = (src & res)>>24;
23305 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
23306
23307 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23308 }
23309
23310
23311 static void m68k_op_neg_32_ix(m68000_base_device* mc68kcpu)
23312 {
23313 uint32_t ea = EA_AY_IX_32(mc68kcpu);
23314 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23315 uint32_t res = 0 - src;
23316
23317 (mc68kcpu)->n_flag = NFLAG_32(res);
23318 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res);
23319 (mc68kcpu)->v_flag = (src & res)>>24;
23320 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
23321
23322 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23323 }
23324
23325
23326 static void m68k_op_neg_32_aw(m68000_base_device* mc68kcpu)
23327 {
23328 uint32_t ea = EA_AW_32(mc68kcpu);
23329 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23330 uint32_t res = 0 - src;
23331
23332 (mc68kcpu)->n_flag = NFLAG_32(res);
23333 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res);
23334 (mc68kcpu)->v_flag = (src & res)>>24;
23335 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
23336
23337 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23338 }
23339
23340
23341 static void m68k_op_neg_32_al(m68000_base_device* mc68kcpu)
23342 {
23343 uint32_t ea = EA_AL_32(mc68kcpu);
23344 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23345 uint32_t res = 0 - src;
23346
23347 (mc68kcpu)->n_flag = NFLAG_32(res);
23348 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res);
23349 (mc68kcpu)->v_flag = (src & res)>>24;
23350 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
23351
23352 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
23353 }
23354
23355
23356 static void m68k_op_negx_8_d(m68000_base_device* mc68kcpu)
23357 {
23358 uint32_t* r_dst = &DY(mc68kcpu);
23359 uint32_t res = 0 - MASK_OUT_ABOVE_8(*r_dst) - XFLAG_AS_1(mc68kcpu);
23360
23361 (mc68kcpu)->n_flag = NFLAG_8(res);
23362 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23363 (mc68kcpu)->v_flag = *r_dst & res;
23364
23365 res = MASK_OUT_ABOVE_8(res);
23366 (mc68kcpu)->not_z_flag |= res;
23367
23368 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
23369 }
23370
23371
23372 static void m68k_op_negx_8_ai(m68000_base_device* mc68kcpu)
23373 {
23374 uint32_t ea = EA_AY_AI_8(mc68kcpu);
23375 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23376 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23377
23378 (mc68kcpu)->n_flag = NFLAG_8(res);
23379 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23380 (mc68kcpu)->v_flag = src & res;
23381
23382 res = MASK_OUT_ABOVE_8(res);
23383 (mc68kcpu)->not_z_flag |= res;
23384
23385 m68ki_write_8((mc68kcpu), ea, res);
23386 }
23387
23388
23389 static void m68k_op_negx_8_pi(m68000_base_device* mc68kcpu)
23390 {
23391 uint32_t ea = EA_AY_PI_8(mc68kcpu);
23392 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23393 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23394
23395 (mc68kcpu)->n_flag = NFLAG_8(res);
23396 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23397 (mc68kcpu)->v_flag = src & res;
23398
23399 res = MASK_OUT_ABOVE_8(res);
23400 (mc68kcpu)->not_z_flag |= res;
23401
23402 m68ki_write_8((mc68kcpu), ea, res);
23403 }
23404
23405
23406 static void m68k_op_negx_8_pi7(m68000_base_device* mc68kcpu)
23407 {
23408 uint32_t ea = EA_A7_PI_8(mc68kcpu);
23409 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23410 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23411
23412 (mc68kcpu)->n_flag = NFLAG_8(res);
23413 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23414 (mc68kcpu)->v_flag = src & res;
23415
23416 res = MASK_OUT_ABOVE_8(res);
23417 (mc68kcpu)->not_z_flag |= res;
23418
23419 m68ki_write_8((mc68kcpu), ea, res);
23420 }
23421
23422
23423 static void m68k_op_negx_8_pd(m68000_base_device* mc68kcpu)
23424 {
23425 uint32_t ea = EA_AY_PD_8(mc68kcpu);
23426 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23427 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23428
23429 (mc68kcpu)->n_flag = NFLAG_8(res);
23430 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23431 (mc68kcpu)->v_flag = src & res;
23432
23433 res = MASK_OUT_ABOVE_8(res);
23434 (mc68kcpu)->not_z_flag |= res;
23435
23436 m68ki_write_8((mc68kcpu), ea, res);
23437 }
23438
23439
23440 static void m68k_op_negx_8_pd7(m68000_base_device* mc68kcpu)
23441 {
23442 uint32_t ea = EA_A7_PD_8(mc68kcpu);
23443 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23444 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23445
23446 (mc68kcpu)->n_flag = NFLAG_8(res);
23447 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23448 (mc68kcpu)->v_flag = src & res;
23449
23450 res = MASK_OUT_ABOVE_8(res);
23451 (mc68kcpu)->not_z_flag |= res;
23452
23453 m68ki_write_8((mc68kcpu), ea, res);
23454 }
23455
23456
23457 static void m68k_op_negx_8_di(m68000_base_device* mc68kcpu)
23458 {
23459 uint32_t ea = EA_AY_DI_8(mc68kcpu);
23460 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23461 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23462
23463 (mc68kcpu)->n_flag = NFLAG_8(res);
23464 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23465 (mc68kcpu)->v_flag = src & res;
23466
23467 res = MASK_OUT_ABOVE_8(res);
23468 (mc68kcpu)->not_z_flag |= res;
23469
23470 m68ki_write_8((mc68kcpu), ea, res);
23471 }
23472
23473
23474 static void m68k_op_negx_8_ix(m68000_base_device* mc68kcpu)
23475 {
23476 uint32_t ea = EA_AY_IX_8(mc68kcpu);
23477 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23478 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23479
23480 (mc68kcpu)->n_flag = NFLAG_8(res);
23481 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23482 (mc68kcpu)->v_flag = src & res;
23483
23484 res = MASK_OUT_ABOVE_8(res);
23485 (mc68kcpu)->not_z_flag |= res;
23486
23487 m68ki_write_8((mc68kcpu), ea, res);
23488 }
23489
23490
23491 static void m68k_op_negx_8_aw(m68000_base_device* mc68kcpu)
23492 {
23493 uint32_t ea = EA_AW_8(mc68kcpu);
23494 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23495 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23496
23497 (mc68kcpu)->n_flag = NFLAG_8(res);
23498 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23499 (mc68kcpu)->v_flag = src & res;
23500
23501 res = MASK_OUT_ABOVE_8(res);
23502 (mc68kcpu)->not_z_flag |= res;
23503
23504 m68ki_write_8((mc68kcpu), ea, res);
23505 }
23506
23507
23508 static void m68k_op_negx_8_al(m68000_base_device* mc68kcpu)
23509 {
23510 uint32_t ea = EA_AL_8(mc68kcpu);
23511 uint32_t src = m68ki_read_8((mc68kcpu), ea);
23512 uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu);
23513
23514 (mc68kcpu)->n_flag = NFLAG_8(res);
23515 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
23516 (mc68kcpu)->v_flag = src & res;
23517
23518 res = MASK_OUT_ABOVE_8(res);
23519 (mc68kcpu)->not_z_flag |= res;
23520
23521 m68ki_write_8((mc68kcpu), ea, res);
23522 }
23523
23524
23525 static void m68k_op_negx_16_d(m68000_base_device* mc68kcpu)
23526 {
23527 uint32_t* r_dst = &DY(mc68kcpu);
23528 uint32_t res = 0 - MASK_OUT_ABOVE_16(*r_dst) - XFLAG_AS_1(mc68kcpu);
23529
23530 (mc68kcpu)->n_flag = NFLAG_16(res);
23531 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
23532 (mc68kcpu)->v_flag = (*r_dst & res)>>8;
23533
23534 res = MASK_OUT_ABOVE_16(res);
23535 (mc68kcpu)->not_z_flag |= res;
23536
23537 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
23538 }
23539
23540
23541 static void m68k_op_negx_16_ai(m68000_base_device* mc68kcpu)
23542 {
23543 uint32_t ea = EA_AY_AI_16(mc68kcpu);
23544 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23545 uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu);
23546
23547 (mc68kcpu)->n_flag = NFLAG_16(res);
23548 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
23549 (mc68kcpu)->v_flag = (src & res)>>8;
23550
23551 res = MASK_OUT_ABOVE_16(res);
23552 (mc68kcpu)->not_z_flag |= res;
23553
23554 m68ki_write_16((mc68kcpu), ea, res);
23555 }
23556
23557
23558 static void m68k_op_negx_16_pi(m68000_base_device* mc68kcpu)
23559 {
23560 uint32_t ea = EA_AY_PI_16(mc68kcpu);
23561 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23562 uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu);
23563
23564 (mc68kcpu)->n_flag = NFLAG_16(res);
23565 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
23566 (mc68kcpu)->v_flag = (src & res)>>8;
23567
23568 res = MASK_OUT_ABOVE_16(res);
23569 (mc68kcpu)->not_z_flag |= res;
23570
23571 m68ki_write_16((mc68kcpu), ea, res);
23572 }
23573
23574
23575 static void m68k_op_negx_16_pd(m68000_base_device* mc68kcpu)
23576 {
23577 uint32_t ea = EA_AY_PD_16(mc68kcpu);
23578 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23579 uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu);
23580
23581 (mc68kcpu)->n_flag = NFLAG_16(res);
23582 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
23583 (mc68kcpu)->v_flag = (src & res)>>8;
23584
23585 res = MASK_OUT_ABOVE_16(res);
23586 (mc68kcpu)->not_z_flag |= res;
23587
23588 m68ki_write_16((mc68kcpu), ea, res);
23589 }
23590
23591
23592 static void m68k_op_negx_16_di(m68000_base_device* mc68kcpu)
23593 {
23594 uint32_t ea = EA_AY_DI_16(mc68kcpu);
23595 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23596 uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu);
23597
23598 (mc68kcpu)->n_flag = NFLAG_16(res);
23599 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
23600 (mc68kcpu)->v_flag = (src & res)>>8;
23601
23602 res = MASK_OUT_ABOVE_16(res);
23603 (mc68kcpu)->not_z_flag |= res;
23604
23605 m68ki_write_16((mc68kcpu), ea, res);
23606 }
23607
23608
23609 static void m68k_op_negx_16_ix(m68000_base_device* mc68kcpu)
23610 {
23611 uint32_t ea = EA_AY_IX_16(mc68kcpu);
23612 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23613 uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu);
23614
23615 (mc68kcpu)->n_flag = NFLAG_16(res);
23616 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
23617 (mc68kcpu)->v_flag = (src & res)>>8;
23618
23619 res = MASK_OUT_ABOVE_16(res);
23620 (mc68kcpu)->not_z_flag |= res;
23621
23622 m68ki_write_16((mc68kcpu), ea, res);
23623 }
23624
23625
23626 static void m68k_op_negx_16_aw(m68000_base_device* mc68kcpu)
23627 {
23628 uint32_t ea = EA_AW_16(mc68kcpu);
23629 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23630 uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu);
23631
23632 (mc68kcpu)->n_flag = NFLAG_16(res);
23633 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
23634 (mc68kcpu)->v_flag = (src & res)>>8;
23635
23636 res = MASK_OUT_ABOVE_16(res);
23637 (mc68kcpu)->not_z_flag |= res;
23638
23639 m68ki_write_16((mc68kcpu), ea, res);
23640 }
23641
23642
23643 static void m68k_op_negx_16_al(m68000_base_device* mc68kcpu)
23644 {
23645 uint32_t ea = EA_AL_16(mc68kcpu);
23646 uint32_t src = m68ki_read_16((mc68kcpu), ea);
23647 uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu);
23648
23649 (mc68kcpu)->n_flag = NFLAG_16(res);
23650 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
23651 (mc68kcpu)->v_flag = (src & res)>>8;
23652
23653 res = MASK_OUT_ABOVE_16(res);
23654 (mc68kcpu)->not_z_flag |= res;
23655
23656 m68ki_write_16((mc68kcpu), ea, res);
23657 }
23658
23659
23660 static void m68k_op_negx_32_d(m68000_base_device* mc68kcpu)
23661 {
23662 uint32_t* r_dst = &DY(mc68kcpu);
23663 uint32_t res = 0 - MASK_OUT_ABOVE_32(*r_dst) - XFLAG_AS_1(mc68kcpu);
23664
23665 (mc68kcpu)->n_flag = NFLAG_32(res);
23666 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(*r_dst, 0, res);
23667 (mc68kcpu)->v_flag = (*r_dst & res)>>24;
23668
23669 res = MASK_OUT_ABOVE_32(res);
23670 (mc68kcpu)->not_z_flag |= res;
23671
23672 *r_dst = res;
23673 }
23674
23675
23676 static void m68k_op_negx_32_ai(m68000_base_device* mc68kcpu)
23677 {
23678 uint32_t ea = EA_AY_AI_32(mc68kcpu);
23679 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23680 uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu);
23681
23682 (mc68kcpu)->n_flag = NFLAG_32(res);
23683 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res);
23684 (mc68kcpu)->v_flag = (src & res)>>24;
23685
23686 res = MASK_OUT_ABOVE_32(res);
23687 (mc68kcpu)->not_z_flag |= res;
23688
23689 m68ki_write_32((mc68kcpu), ea, res);
23690 }
23691
23692
23693 static void m68k_op_negx_32_pi(m68000_base_device* mc68kcpu)
23694 {
23695 uint32_t ea = EA_AY_PI_32(mc68kcpu);
23696 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23697 uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu);
23698
23699 (mc68kcpu)->n_flag = NFLAG_32(res);
23700 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res);
23701 (mc68kcpu)->v_flag = (src & res)>>24;
23702
23703 res = MASK_OUT_ABOVE_32(res);
23704 (mc68kcpu)->not_z_flag |= res;
23705
23706 m68ki_write_32((mc68kcpu), ea, res);
23707 }
23708
23709
23710 static void m68k_op_negx_32_pd(m68000_base_device* mc68kcpu)
23711 {
23712 uint32_t ea = EA_AY_PD_32(mc68kcpu);
23713 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23714 uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu);
23715
23716 (mc68kcpu)->n_flag = NFLAG_32(res);
23717 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res);
23718 (mc68kcpu)->v_flag = (src & res)>>24;
23719
23720 res = MASK_OUT_ABOVE_32(res);
23721 (mc68kcpu)->not_z_flag |= res;
23722
23723 m68ki_write_32((mc68kcpu), ea, res);
23724 }
23725
23726
23727 static void m68k_op_negx_32_di(m68000_base_device* mc68kcpu)
23728 {
23729 uint32_t ea = EA_AY_DI_32(mc68kcpu);
23730 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23731 uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu);
23732
23733 (mc68kcpu)->n_flag = NFLAG_32(res);
23734 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res);
23735 (mc68kcpu)->v_flag = (src & res)>>24;
23736
23737 res = MASK_OUT_ABOVE_32(res);
23738 (mc68kcpu)->not_z_flag |= res;
23739
23740 m68ki_write_32((mc68kcpu), ea, res);
23741 }
23742
23743
23744 static void m68k_op_negx_32_ix(m68000_base_device* mc68kcpu)
23745 {
23746 uint32_t ea = EA_AY_IX_32(mc68kcpu);
23747 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23748 uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu);
23749
23750 (mc68kcpu)->n_flag = NFLAG_32(res);
23751 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res);
23752 (mc68kcpu)->v_flag = (src & res)>>24;
23753
23754 res = MASK_OUT_ABOVE_32(res);
23755 (mc68kcpu)->not_z_flag |= res;
23756
23757 m68ki_write_32((mc68kcpu), ea, res);
23758 }
23759
23760
23761 static void m68k_op_negx_32_aw(m68000_base_device* mc68kcpu)
23762 {
23763 uint32_t ea = EA_AW_32(mc68kcpu);
23764 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23765 uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu);
23766
23767 (mc68kcpu)->n_flag = NFLAG_32(res);
23768 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res);
23769 (mc68kcpu)->v_flag = (src & res)>>24;
23770
23771 res = MASK_OUT_ABOVE_32(res);
23772 (mc68kcpu)->not_z_flag |= res;
23773
23774 m68ki_write_32((mc68kcpu), ea, res);
23775 }
23776
23777
23778 static void m68k_op_negx_32_al(m68000_base_device* mc68kcpu)
23779 {
23780 uint32_t ea = EA_AL_32(mc68kcpu);
23781 uint32_t src = m68ki_read_32((mc68kcpu), ea);
23782 uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu);
23783
23784 (mc68kcpu)->n_flag = NFLAG_32(res);
23785 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res);
23786 (mc68kcpu)->v_flag = (src & res)>>24;
23787
23788 res = MASK_OUT_ABOVE_32(res);
23789 (mc68kcpu)->not_z_flag |= res;
23790
23791 m68ki_write_32((mc68kcpu), ea, res);
23792 }
23793
23794
23795 static void m68k_op_nop(m68000_base_device* mc68kcpu)
23796 {
23797 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
23798 }
23799
23800
23801 static void m68k_op_not_8_d(m68000_base_device* mc68kcpu)
23802 {
23803 uint32_t* r_dst = &DY(mc68kcpu);
23804 uint32_t res = MASK_OUT_ABOVE_8(~*r_dst);
23805
23806 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
23807
23808 (mc68kcpu)->n_flag = NFLAG_8(res);
23809 (mc68kcpu)->not_z_flag = res;
23810 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23811 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23812 }
23813
23814
23815 static void m68k_op_not_8_ai(m68000_base_device* mc68kcpu)
23816 {
23817 uint32_t ea = EA_AY_AI_8(mc68kcpu);
23818 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23819
23820 m68ki_write_8((mc68kcpu), ea, res);
23821
23822 (mc68kcpu)->n_flag = NFLAG_8(res);
23823 (mc68kcpu)->not_z_flag = res;
23824 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23825 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23826 }
23827
23828
23829 static void m68k_op_not_8_pi(m68000_base_device* mc68kcpu)
23830 {
23831 uint32_t ea = EA_AY_PI_8(mc68kcpu);
23832 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23833
23834 m68ki_write_8((mc68kcpu), ea, res);
23835
23836 (mc68kcpu)->n_flag = NFLAG_8(res);
23837 (mc68kcpu)->not_z_flag = res;
23838 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23839 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23840 }
23841
23842
23843 static void m68k_op_not_8_pi7(m68000_base_device* mc68kcpu)
23844 {
23845 uint32_t ea = EA_A7_PI_8(mc68kcpu);
23846 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23847
23848 m68ki_write_8((mc68kcpu), ea, res);
23849
23850 (mc68kcpu)->n_flag = NFLAG_8(res);
23851 (mc68kcpu)->not_z_flag = res;
23852 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23853 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23854 }
23855
23856
23857 static void m68k_op_not_8_pd(m68000_base_device* mc68kcpu)
23858 {
23859 uint32_t ea = EA_AY_PD_8(mc68kcpu);
23860 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23861
23862 m68ki_write_8((mc68kcpu), ea, res);
23863
23864 (mc68kcpu)->n_flag = NFLAG_8(res);
23865 (mc68kcpu)->not_z_flag = res;
23866 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23867 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23868 }
23869
23870
23871 static void m68k_op_not_8_pd7(m68000_base_device* mc68kcpu)
23872 {
23873 uint32_t ea = EA_A7_PD_8(mc68kcpu);
23874 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23875
23876 m68ki_write_8((mc68kcpu), ea, res);
23877
23878 (mc68kcpu)->n_flag = NFLAG_8(res);
23879 (mc68kcpu)->not_z_flag = res;
23880 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23881 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23882 }
23883
23884
23885 static void m68k_op_not_8_di(m68000_base_device* mc68kcpu)
23886 {
23887 uint32_t ea = EA_AY_DI_8(mc68kcpu);
23888 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23889
23890 m68ki_write_8((mc68kcpu), ea, res);
23891
23892 (mc68kcpu)->n_flag = NFLAG_8(res);
23893 (mc68kcpu)->not_z_flag = res;
23894 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23895 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23896 }
23897
23898
23899 static void m68k_op_not_8_ix(m68000_base_device* mc68kcpu)
23900 {
23901 uint32_t ea = EA_AY_IX_8(mc68kcpu);
23902 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23903
23904 m68ki_write_8((mc68kcpu), ea, res);
23905
23906 (mc68kcpu)->n_flag = NFLAG_8(res);
23907 (mc68kcpu)->not_z_flag = res;
23908 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23909 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23910 }
23911
23912
23913 static void m68k_op_not_8_aw(m68000_base_device* mc68kcpu)
23914 {
23915 uint32_t ea = EA_AW_8(mc68kcpu);
23916 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23917
23918 m68ki_write_8((mc68kcpu), ea, res);
23919
23920 (mc68kcpu)->n_flag = NFLAG_8(res);
23921 (mc68kcpu)->not_z_flag = res;
23922 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23923 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23924 }
23925
23926
23927 static void m68k_op_not_8_al(m68000_base_device* mc68kcpu)
23928 {
23929 uint32_t ea = EA_AL_8(mc68kcpu);
23930 uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea));
23931
23932 m68ki_write_8((mc68kcpu), ea, res);
23933
23934 (mc68kcpu)->n_flag = NFLAG_8(res);
23935 (mc68kcpu)->not_z_flag = res;
23936 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23937 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23938 }
23939
23940
23941 static void m68k_op_not_16_d(m68000_base_device* mc68kcpu)
23942 {
23943 uint32_t* r_dst = &DY(mc68kcpu);
23944 uint32_t res = MASK_OUT_ABOVE_16(~*r_dst);
23945
23946 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
23947
23948 (mc68kcpu)->n_flag = NFLAG_16(res);
23949 (mc68kcpu)->not_z_flag = res;
23950 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23951 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23952 }
23953
23954
23955 static void m68k_op_not_16_ai(m68000_base_device* mc68kcpu)
23956 {
23957 uint32_t ea = EA_AY_AI_16(mc68kcpu);
23958 uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea));
23959
23960 m68ki_write_16((mc68kcpu), ea, res);
23961
23962 (mc68kcpu)->n_flag = NFLAG_16(res);
23963 (mc68kcpu)->not_z_flag = res;
23964 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23965 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23966 }
23967
23968
23969 static void m68k_op_not_16_pi(m68000_base_device* mc68kcpu)
23970 {
23971 uint32_t ea = EA_AY_PI_16(mc68kcpu);
23972 uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea));
23973
23974 m68ki_write_16((mc68kcpu), ea, res);
23975
23976 (mc68kcpu)->n_flag = NFLAG_16(res);
23977 (mc68kcpu)->not_z_flag = res;
23978 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23979 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23980 }
23981
23982
23983 static void m68k_op_not_16_pd(m68000_base_device* mc68kcpu)
23984 {
23985 uint32_t ea = EA_AY_PD_16(mc68kcpu);
23986 uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea));
23987
23988 m68ki_write_16((mc68kcpu), ea, res);
23989
23990 (mc68kcpu)->n_flag = NFLAG_16(res);
23991 (mc68kcpu)->not_z_flag = res;
23992 (mc68kcpu)->c_flag = CFLAG_CLEAR;
23993 (mc68kcpu)->v_flag = VFLAG_CLEAR;
23994 }
23995
23996
23997 static void m68k_op_not_16_di(m68000_base_device* mc68kcpu)
23998 {
23999 uint32_t ea = EA_AY_DI_16(mc68kcpu);
24000 uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea));
24001
24002 m68ki_write_16((mc68kcpu), ea, res);
24003
24004 (mc68kcpu)->n_flag = NFLAG_16(res);
24005 (mc68kcpu)->not_z_flag = res;
24006 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24007 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24008 }
24009
24010
24011 static void m68k_op_not_16_ix(m68000_base_device* mc68kcpu)
24012 {
24013 uint32_t ea = EA_AY_IX_16(mc68kcpu);
24014 uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea));
24015
24016 m68ki_write_16((mc68kcpu), ea, res);
24017
24018 (mc68kcpu)->n_flag = NFLAG_16(res);
24019 (mc68kcpu)->not_z_flag = res;
24020 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24021 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24022 }
24023
24024
24025 static void m68k_op_not_16_aw(m68000_base_device* mc68kcpu)
24026 {
24027 uint32_t ea = EA_AW_16(mc68kcpu);
24028 uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea));
24029
24030 m68ki_write_16((mc68kcpu), ea, res);
24031
24032 (mc68kcpu)->n_flag = NFLAG_16(res);
24033 (mc68kcpu)->not_z_flag = res;
24034 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24035 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24036 }
24037
24038
24039 static void m68k_op_not_16_al(m68000_base_device* mc68kcpu)
24040 {
24041 uint32_t ea = EA_AL_16(mc68kcpu);
24042 uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea));
24043
24044 m68ki_write_16((mc68kcpu), ea, res);
24045
24046 (mc68kcpu)->n_flag = NFLAG_16(res);
24047 (mc68kcpu)->not_z_flag = res;
24048 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24049 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24050 }
24051
24052
24053 static void m68k_op_not_32_d(m68000_base_device* mc68kcpu)
24054 {
24055 uint32_t* r_dst = &DY(mc68kcpu);
24056 uint32_t res = *r_dst = MASK_OUT_ABOVE_32(~*r_dst);
24057
24058 (mc68kcpu)->n_flag = NFLAG_32(res);
24059 (mc68kcpu)->not_z_flag = res;
24060 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24061 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24062 }
24063
24064
24065 static void m68k_op_not_32_ai(m68000_base_device* mc68kcpu)
24066 {
24067 uint32_t ea = EA_AY_AI_32(mc68kcpu);
24068 uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea));
24069
24070 m68ki_write_32((mc68kcpu), ea, res);
24071
24072 (mc68kcpu)->n_flag = NFLAG_32(res);
24073 (mc68kcpu)->not_z_flag = res;
24074 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24075 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24076 }
24077
24078
24079 static void m68k_op_not_32_pi(m68000_base_device* mc68kcpu)
24080 {
24081 uint32_t ea = EA_AY_PI_32(mc68kcpu);
24082 uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea));
24083
24084 m68ki_write_32((mc68kcpu), ea, res);
24085
24086 (mc68kcpu)->n_flag = NFLAG_32(res);
24087 (mc68kcpu)->not_z_flag = res;
24088 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24089 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24090 }
24091
24092
24093 static void m68k_op_not_32_pd(m68000_base_device* mc68kcpu)
24094 {
24095 uint32_t ea = EA_AY_PD_32(mc68kcpu);
24096 uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea));
24097
24098 m68ki_write_32((mc68kcpu), ea, res);
24099
24100 (mc68kcpu)->n_flag = NFLAG_32(res);
24101 (mc68kcpu)->not_z_flag = res;
24102 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24103 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24104 }
24105
24106
24107 static void m68k_op_not_32_di(m68000_base_device* mc68kcpu)
24108 {
24109 uint32_t ea = EA_AY_DI_32(mc68kcpu);
24110 uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea));
24111
24112 m68ki_write_32((mc68kcpu), ea, res);
24113
24114 (mc68kcpu)->n_flag = NFLAG_32(res);
24115 (mc68kcpu)->not_z_flag = res;
24116 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24117 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24118 }
24119
24120
24121 static void m68k_op_not_32_ix(m68000_base_device* mc68kcpu)
24122 {
24123 uint32_t ea = EA_AY_IX_32(mc68kcpu);
24124 uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea));
24125
24126 m68ki_write_32((mc68kcpu), ea, res);
24127
24128 (mc68kcpu)->n_flag = NFLAG_32(res);
24129 (mc68kcpu)->not_z_flag = res;
24130 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24131 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24132 }
24133
24134
24135 static void m68k_op_not_32_aw(m68000_base_device* mc68kcpu)
24136 {
24137 uint32_t ea = EA_AW_32(mc68kcpu);
24138 uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea));
24139
24140 m68ki_write_32((mc68kcpu), ea, res);
24141
24142 (mc68kcpu)->n_flag = NFLAG_32(res);
24143 (mc68kcpu)->not_z_flag = res;
24144 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24145 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24146 }
24147
24148
24149 static void m68k_op_not_32_al(m68000_base_device* mc68kcpu)
24150 {
24151 uint32_t ea = EA_AL_32(mc68kcpu);
24152 uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea));
24153
24154 m68ki_write_32((mc68kcpu), ea, res);
24155
24156 (mc68kcpu)->n_flag = NFLAG_32(res);
24157 (mc68kcpu)->not_z_flag = res;
24158 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24159 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24160 }
24161
24162
24163 static void m68k_op_or_8_er_d(m68000_base_device* mc68kcpu)
24164 {
24165 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= MASK_OUT_ABOVE_8(DY(mc68kcpu))));
24166
24167 (mc68kcpu)->n_flag = NFLAG_8(res);
24168 (mc68kcpu)->not_z_flag = res;
24169 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24170 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24171 }
24172
24173
24174 static void m68k_op_or_8_er_ai(m68000_base_device* mc68kcpu)
24175 {
24176 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_AI_8(mc68kcpu)));
24177
24178 (mc68kcpu)->n_flag = NFLAG_8(res);
24179 (mc68kcpu)->not_z_flag = res;
24180 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24181 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24182 }
24183
24184
24185 static void m68k_op_or_8_er_pi(m68000_base_device* mc68kcpu)
24186 {
24187 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_PI_8(mc68kcpu)));
24188
24189 (mc68kcpu)->n_flag = NFLAG_8(res);
24190 (mc68kcpu)->not_z_flag = res;
24191 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24192 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24193 }
24194
24195
24196 static void m68k_op_or_8_er_pi7(m68000_base_device* mc68kcpu)
24197 {
24198 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_A7_PI_8(mc68kcpu)));
24199
24200 (mc68kcpu)->n_flag = NFLAG_8(res);
24201 (mc68kcpu)->not_z_flag = res;
24202 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24203 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24204 }
24205
24206
24207 static void m68k_op_or_8_er_pd(m68000_base_device* mc68kcpu)
24208 {
24209 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_PD_8(mc68kcpu)));
24210
24211 (mc68kcpu)->n_flag = NFLAG_8(res);
24212 (mc68kcpu)->not_z_flag = res;
24213 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24214 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24215 }
24216
24217
24218 static void m68k_op_or_8_er_pd7(m68000_base_device* mc68kcpu)
24219 {
24220 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_A7_PD_8(mc68kcpu)));
24221
24222 (mc68kcpu)->n_flag = NFLAG_8(res);
24223 (mc68kcpu)->not_z_flag = res;
24224 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24225 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24226 }
24227
24228
24229 static void m68k_op_or_8_er_di(m68000_base_device* mc68kcpu)
24230 {
24231 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_DI_8(mc68kcpu)));
24232
24233 (mc68kcpu)->n_flag = NFLAG_8(res);
24234 (mc68kcpu)->not_z_flag = res;
24235 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24236 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24237 }
24238
24239
24240 static void m68k_op_or_8_er_ix(m68000_base_device* mc68kcpu)
24241 {
24242 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_IX_8(mc68kcpu)));
24243
24244 (mc68kcpu)->n_flag = NFLAG_8(res);
24245 (mc68kcpu)->not_z_flag = res;
24246 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24247 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24248 }
24249
24250
24251 static void m68k_op_or_8_er_aw(m68000_base_device* mc68kcpu)
24252 {
24253 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AW_8(mc68kcpu)));
24254
24255 (mc68kcpu)->n_flag = NFLAG_8(res);
24256 (mc68kcpu)->not_z_flag = res;
24257 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24258 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24259 }
24260
24261
24262 static void m68k_op_or_8_er_al(m68000_base_device* mc68kcpu)
24263 {
24264 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AL_8(mc68kcpu)));
24265
24266 (mc68kcpu)->n_flag = NFLAG_8(res);
24267 (mc68kcpu)->not_z_flag = res;
24268 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24269 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24270 }
24271
24272
24273 static void m68k_op_or_8_er_pcdi(m68000_base_device* mc68kcpu)
24274 {
24275 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_PCDI_8(mc68kcpu)));
24276
24277 (mc68kcpu)->n_flag = NFLAG_8(res);
24278 (mc68kcpu)->not_z_flag = res;
24279 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24280 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24281 }
24282
24283
24284 static void m68k_op_or_8_er_pcix(m68000_base_device* mc68kcpu)
24285 {
24286 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_PCIX_8(mc68kcpu)));
24287
24288 (mc68kcpu)->n_flag = NFLAG_8(res);
24289 (mc68kcpu)->not_z_flag = res;
24290 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24291 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24292 }
24293
24294
24295 static void m68k_op_or_8_er_i(m68000_base_device* mc68kcpu)
24296 {
24297 uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_I_8(mc68kcpu)));
24298
24299 (mc68kcpu)->n_flag = NFLAG_8(res);
24300 (mc68kcpu)->not_z_flag = res;
24301 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24302 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24303 }
24304
24305
24306 static void m68k_op_or_16_er_d(m68000_base_device* mc68kcpu)
24307 {
24308 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= MASK_OUT_ABOVE_16(DY(mc68kcpu))));
24309
24310 (mc68kcpu)->n_flag = NFLAG_16(res);
24311 (mc68kcpu)->not_z_flag = res;
24312 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24313 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24314 }
24315
24316
24317 static void m68k_op_or_16_er_ai(m68000_base_device* mc68kcpu)
24318 {
24319 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_AI_16(mc68kcpu)));
24320
24321 (mc68kcpu)->n_flag = NFLAG_16(res);
24322 (mc68kcpu)->not_z_flag = res;
24323 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24324 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24325 }
24326
24327
24328 static void m68k_op_or_16_er_pi(m68000_base_device* mc68kcpu)
24329 {
24330 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_PI_16(mc68kcpu)));
24331
24332 (mc68kcpu)->n_flag = NFLAG_16(res);
24333 (mc68kcpu)->not_z_flag = res;
24334 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24335 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24336 }
24337
24338
24339 static void m68k_op_or_16_er_pd(m68000_base_device* mc68kcpu)
24340 {
24341 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_PD_16(mc68kcpu)));
24342
24343 (mc68kcpu)->n_flag = NFLAG_16(res);
24344 (mc68kcpu)->not_z_flag = res;
24345 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24346 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24347 }
24348
24349
24350 static void m68k_op_or_16_er_di(m68000_base_device* mc68kcpu)
24351 {
24352 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_DI_16(mc68kcpu)));
24353
24354 (mc68kcpu)->n_flag = NFLAG_16(res);
24355 (mc68kcpu)->not_z_flag = res;
24356 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24357 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24358 }
24359
24360
24361 static void m68k_op_or_16_er_ix(m68000_base_device* mc68kcpu)
24362 {
24363 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_IX_16(mc68kcpu)));
24364
24365 (mc68kcpu)->n_flag = NFLAG_16(res);
24366 (mc68kcpu)->not_z_flag = res;
24367 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24368 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24369 }
24370
24371
24372 static void m68k_op_or_16_er_aw(m68000_base_device* mc68kcpu)
24373 {
24374 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AW_16(mc68kcpu)));
24375
24376 (mc68kcpu)->n_flag = NFLAG_16(res);
24377 (mc68kcpu)->not_z_flag = res;
24378 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24379 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24380 }
24381
24382
24383 static void m68k_op_or_16_er_al(m68000_base_device* mc68kcpu)
24384 {
24385 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AL_16(mc68kcpu)));
24386
24387 (mc68kcpu)->n_flag = NFLAG_16(res);
24388 (mc68kcpu)->not_z_flag = res;
24389 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24390 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24391 }
24392
24393
24394 static void m68k_op_or_16_er_pcdi(m68000_base_device* mc68kcpu)
24395 {
24396 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_PCDI_16(mc68kcpu)));
24397
24398 (mc68kcpu)->n_flag = NFLAG_16(res);
24399 (mc68kcpu)->not_z_flag = res;
24400 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24401 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24402 }
24403
24404
24405 static void m68k_op_or_16_er_pcix(m68000_base_device* mc68kcpu)
24406 {
24407 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_PCIX_16(mc68kcpu)));
24408
24409 (mc68kcpu)->n_flag = NFLAG_16(res);
24410 (mc68kcpu)->not_z_flag = res;
24411 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24412 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24413 }
24414
24415
24416 static void m68k_op_or_16_er_i(m68000_base_device* mc68kcpu)
24417 {
24418 uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_I_16(mc68kcpu)));
24419
24420 (mc68kcpu)->n_flag = NFLAG_16(res);
24421 (mc68kcpu)->not_z_flag = res;
24422 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24423 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24424 }
24425
24426
24427 static void m68k_op_or_32_er_d(m68000_base_device* mc68kcpu)
24428 {
24429 uint32_t res = DX(mc68kcpu) |= DY(mc68kcpu);
24430
24431 (mc68kcpu)->n_flag = NFLAG_32(res);
24432 (mc68kcpu)->not_z_flag = res;
24433 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24434 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24435 }
24436
24437
24438 static void m68k_op_or_32_er_ai(m68000_base_device* mc68kcpu)
24439 {
24440 uint32_t res = DX(mc68kcpu) |= OPER_AY_AI_32(mc68kcpu);
24441
24442 (mc68kcpu)->n_flag = NFLAG_32(res);
24443 (mc68kcpu)->not_z_flag = res;
24444 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24445 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24446 }
24447
24448
24449 static void m68k_op_or_32_er_pi(m68000_base_device* mc68kcpu)
24450 {
24451 uint32_t res = DX(mc68kcpu) |= OPER_AY_PI_32(mc68kcpu);
24452
24453 (mc68kcpu)->n_flag = NFLAG_32(res);
24454 (mc68kcpu)->not_z_flag = res;
24455 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24456 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24457 }
24458
24459
24460 static void m68k_op_or_32_er_pd(m68000_base_device* mc68kcpu)
24461 {
24462 uint32_t res = DX(mc68kcpu) |= OPER_AY_PD_32(mc68kcpu);
24463
24464 (mc68kcpu)->n_flag = NFLAG_32(res);
24465 (mc68kcpu)->not_z_flag = res;
24466 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24467 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24468 }
24469
24470
24471 static void m68k_op_or_32_er_di(m68000_base_device* mc68kcpu)
24472 {
24473 uint32_t res = DX(mc68kcpu) |= OPER_AY_DI_32(mc68kcpu);
24474
24475 (mc68kcpu)->n_flag = NFLAG_32(res);
24476 (mc68kcpu)->not_z_flag = res;
24477 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24478 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24479 }
24480
24481
24482 static void m68k_op_or_32_er_ix(m68000_base_device* mc68kcpu)
24483 {
24484 uint32_t res = DX(mc68kcpu) |= OPER_AY_IX_32(mc68kcpu);
24485
24486 (mc68kcpu)->n_flag = NFLAG_32(res);
24487 (mc68kcpu)->not_z_flag = res;
24488 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24489 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24490 }
24491
24492
24493 static void m68k_op_or_32_er_aw(m68000_base_device* mc68kcpu)
24494 {
24495 uint32_t res = DX(mc68kcpu) |= OPER_AW_32(mc68kcpu);
24496
24497 (mc68kcpu)->n_flag = NFLAG_32(res);
24498 (mc68kcpu)->not_z_flag = res;
24499 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24500 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24501 }
24502
24503
24504 static void m68k_op_or_32_er_al(m68000_base_device* mc68kcpu)
24505 {
24506 uint32_t res = DX(mc68kcpu) |= OPER_AL_32(mc68kcpu);
24507
24508 (mc68kcpu)->n_flag = NFLAG_32(res);
24509 (mc68kcpu)->not_z_flag = res;
24510 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24511 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24512 }
24513
24514
24515 static void m68k_op_or_32_er_pcdi(m68000_base_device* mc68kcpu)
24516 {
24517 uint32_t res = DX(mc68kcpu) |= OPER_PCDI_32(mc68kcpu);
24518
24519 (mc68kcpu)->n_flag = NFLAG_32(res);
24520 (mc68kcpu)->not_z_flag = res;
24521 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24522 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24523 }
24524
24525
24526 static void m68k_op_or_32_er_pcix(m68000_base_device* mc68kcpu)
24527 {
24528 uint32_t res = DX(mc68kcpu) |= OPER_PCIX_32(mc68kcpu);
24529
24530 (mc68kcpu)->n_flag = NFLAG_32(res);
24531 (mc68kcpu)->not_z_flag = res;
24532 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24533 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24534 }
24535
24536
24537 static void m68k_op_or_32_er_i(m68000_base_device* mc68kcpu)
24538 {
24539 uint32_t res = DX(mc68kcpu) |= OPER_I_32(mc68kcpu);
24540
24541 (mc68kcpu)->n_flag = NFLAG_32(res);
24542 (mc68kcpu)->not_z_flag = res;
24543 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24544 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24545 }
24546
24547
24548 static void m68k_op_or_8_re_ai(m68000_base_device* mc68kcpu)
24549 {
24550 uint32_t ea = EA_AY_AI_8(mc68kcpu);
24551 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24552
24553 m68ki_write_8((mc68kcpu), ea, res);
24554
24555 (mc68kcpu)->n_flag = NFLAG_8(res);
24556 (mc68kcpu)->not_z_flag = res;
24557 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24558 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24559 }
24560
24561
24562 static void m68k_op_or_8_re_pi(m68000_base_device* mc68kcpu)
24563 {
24564 uint32_t ea = EA_AY_PI_8(mc68kcpu);
24565 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24566
24567 m68ki_write_8((mc68kcpu), ea, res);
24568
24569 (mc68kcpu)->n_flag = NFLAG_8(res);
24570 (mc68kcpu)->not_z_flag = res;
24571 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24572 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24573 }
24574
24575
24576 static void m68k_op_or_8_re_pi7(m68000_base_device* mc68kcpu)
24577 {
24578 uint32_t ea = EA_A7_PI_8(mc68kcpu);
24579 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24580
24581 m68ki_write_8((mc68kcpu), ea, res);
24582
24583 (mc68kcpu)->n_flag = NFLAG_8(res);
24584 (mc68kcpu)->not_z_flag = res;
24585 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24586 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24587 }
24588
24589
24590 static void m68k_op_or_8_re_pd(m68000_base_device* mc68kcpu)
24591 {
24592 uint32_t ea = EA_AY_PD_8(mc68kcpu);
24593 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24594
24595 m68ki_write_8((mc68kcpu), ea, res);
24596
24597 (mc68kcpu)->n_flag = NFLAG_8(res);
24598 (mc68kcpu)->not_z_flag = res;
24599 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24600 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24601 }
24602
24603
24604 static void m68k_op_or_8_re_pd7(m68000_base_device* mc68kcpu)
24605 {
24606 uint32_t ea = EA_A7_PD_8(mc68kcpu);
24607 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24608
24609 m68ki_write_8((mc68kcpu), ea, res);
24610
24611 (mc68kcpu)->n_flag = NFLAG_8(res);
24612 (mc68kcpu)->not_z_flag = res;
24613 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24614 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24615 }
24616
24617
24618 static void m68k_op_or_8_re_di(m68000_base_device* mc68kcpu)
24619 {
24620 uint32_t ea = EA_AY_DI_8(mc68kcpu);
24621 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24622
24623 m68ki_write_8((mc68kcpu), ea, res);
24624
24625 (mc68kcpu)->n_flag = NFLAG_8(res);
24626 (mc68kcpu)->not_z_flag = res;
24627 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24628 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24629 }
24630
24631
24632 static void m68k_op_or_8_re_ix(m68000_base_device* mc68kcpu)
24633 {
24634 uint32_t ea = EA_AY_IX_8(mc68kcpu);
24635 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24636
24637 m68ki_write_8((mc68kcpu), ea, res);
24638
24639 (mc68kcpu)->n_flag = NFLAG_8(res);
24640 (mc68kcpu)->not_z_flag = res;
24641 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24642 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24643 }
24644
24645
24646 static void m68k_op_or_8_re_aw(m68000_base_device* mc68kcpu)
24647 {
24648 uint32_t ea = EA_AW_8(mc68kcpu);
24649 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24650
24651 m68ki_write_8((mc68kcpu), ea, res);
24652
24653 (mc68kcpu)->n_flag = NFLAG_8(res);
24654 (mc68kcpu)->not_z_flag = res;
24655 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24656 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24657 }
24658
24659
24660 static void m68k_op_or_8_re_al(m68000_base_device* mc68kcpu)
24661 {
24662 uint32_t ea = EA_AL_8(mc68kcpu);
24663 uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea));
24664
24665 m68ki_write_8((mc68kcpu), ea, res);
24666
24667 (mc68kcpu)->n_flag = NFLAG_8(res);
24668 (mc68kcpu)->not_z_flag = res;
24669 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24670 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24671 }
24672
24673
24674 static void m68k_op_or_16_re_ai(m68000_base_device* mc68kcpu)
24675 {
24676 uint32_t ea = EA_AY_AI_16(mc68kcpu);
24677 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea));
24678
24679 m68ki_write_16((mc68kcpu), ea, res);
24680
24681 (mc68kcpu)->n_flag = NFLAG_16(res);
24682 (mc68kcpu)->not_z_flag = res;
24683 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24684 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24685 }
24686
24687
24688 static void m68k_op_or_16_re_pi(m68000_base_device* mc68kcpu)
24689 {
24690 uint32_t ea = EA_AY_PI_16(mc68kcpu);
24691 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea));
24692
24693 m68ki_write_16((mc68kcpu), ea, res);
24694
24695 (mc68kcpu)->n_flag = NFLAG_16(res);
24696 (mc68kcpu)->not_z_flag = res;
24697 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24698 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24699 }
24700
24701
24702 static void m68k_op_or_16_re_pd(m68000_base_device* mc68kcpu)
24703 {
24704 uint32_t ea = EA_AY_PD_16(mc68kcpu);
24705 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea));
24706
24707 m68ki_write_16((mc68kcpu), ea, res);
24708
24709 (mc68kcpu)->n_flag = NFLAG_16(res);
24710 (mc68kcpu)->not_z_flag = res;
24711 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24712 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24713 }
24714
24715
24716 static void m68k_op_or_16_re_di(m68000_base_device* mc68kcpu)
24717 {
24718 uint32_t ea = EA_AY_DI_16(mc68kcpu);
24719 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea));
24720
24721 m68ki_write_16((mc68kcpu), ea, res);
24722
24723 (mc68kcpu)->n_flag = NFLAG_16(res);
24724 (mc68kcpu)->not_z_flag = res;
24725 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24726 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24727 }
24728
24729
24730 static void m68k_op_or_16_re_ix(m68000_base_device* mc68kcpu)
24731 {
24732 uint32_t ea = EA_AY_IX_16(mc68kcpu);
24733 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea));
24734
24735 m68ki_write_16((mc68kcpu), ea, res);
24736
24737 (mc68kcpu)->n_flag = NFLAG_16(res);
24738 (mc68kcpu)->not_z_flag = res;
24739 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24740 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24741 }
24742
24743
24744 static void m68k_op_or_16_re_aw(m68000_base_device* mc68kcpu)
24745 {
24746 uint32_t ea = EA_AW_16(mc68kcpu);
24747 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea));
24748
24749 m68ki_write_16((mc68kcpu), ea, res);
24750
24751 (mc68kcpu)->n_flag = NFLAG_16(res);
24752 (mc68kcpu)->not_z_flag = res;
24753 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24754 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24755 }
24756
24757
24758 static void m68k_op_or_16_re_al(m68000_base_device* mc68kcpu)
24759 {
24760 uint32_t ea = EA_AL_16(mc68kcpu);
24761 uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea));
24762
24763 m68ki_write_16((mc68kcpu), ea, res);
24764
24765 (mc68kcpu)->n_flag = NFLAG_16(res);
24766 (mc68kcpu)->not_z_flag = res;
24767 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24768 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24769 }
24770
24771
24772 static void m68k_op_or_32_re_ai(m68000_base_device* mc68kcpu)
24773 {
24774 uint32_t ea = EA_AY_AI_32(mc68kcpu);
24775 uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea);
24776
24777 m68ki_write_32((mc68kcpu), ea, res);
24778
24779 (mc68kcpu)->n_flag = NFLAG_32(res);
24780 (mc68kcpu)->not_z_flag = res;
24781 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24782 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24783 }
24784
24785
24786 static void m68k_op_or_32_re_pi(m68000_base_device* mc68kcpu)
24787 {
24788 uint32_t ea = EA_AY_PI_32(mc68kcpu);
24789 uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea);
24790
24791 m68ki_write_32((mc68kcpu), ea, res);
24792
24793 (mc68kcpu)->n_flag = NFLAG_32(res);
24794 (mc68kcpu)->not_z_flag = res;
24795 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24796 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24797 }
24798
24799
24800 static void m68k_op_or_32_re_pd(m68000_base_device* mc68kcpu)
24801 {
24802 uint32_t ea = EA_AY_PD_32(mc68kcpu);
24803 uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea);
24804
24805 m68ki_write_32((mc68kcpu), ea, res);
24806
24807 (mc68kcpu)->n_flag = NFLAG_32(res);
24808 (mc68kcpu)->not_z_flag = res;
24809 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24810 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24811 }
24812
24813
24814 static void m68k_op_or_32_re_di(m68000_base_device* mc68kcpu)
24815 {
24816 uint32_t ea = EA_AY_DI_32(mc68kcpu);
24817 uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea);
24818
24819 m68ki_write_32((mc68kcpu), ea, res);
24820
24821 (mc68kcpu)->n_flag = NFLAG_32(res);
24822 (mc68kcpu)->not_z_flag = res;
24823 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24824 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24825 }
24826
24827
24828 static void m68k_op_or_32_re_ix(m68000_base_device* mc68kcpu)
24829 {
24830 uint32_t ea = EA_AY_IX_32(mc68kcpu);
24831 uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea);
24832
24833 m68ki_write_32((mc68kcpu), ea, res);
24834
24835 (mc68kcpu)->n_flag = NFLAG_32(res);
24836 (mc68kcpu)->not_z_flag = res;
24837 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24838 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24839 }
24840
24841
24842 static void m68k_op_or_32_re_aw(m68000_base_device* mc68kcpu)
24843 {
24844 uint32_t ea = EA_AW_32(mc68kcpu);
24845 uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea);
24846
24847 m68ki_write_32((mc68kcpu), ea, res);
24848
24849 (mc68kcpu)->n_flag = NFLAG_32(res);
24850 (mc68kcpu)->not_z_flag = res;
24851 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24852 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24853 }
24854
24855
24856 static void m68k_op_or_32_re_al(m68000_base_device* mc68kcpu)
24857 {
24858 uint32_t ea = EA_AL_32(mc68kcpu);
24859 uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea);
24860
24861 m68ki_write_32((mc68kcpu), ea, res);
24862
24863 (mc68kcpu)->n_flag = NFLAG_32(res);
24864 (mc68kcpu)->not_z_flag = res;
24865 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24866 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24867 }
24868
24869
24870 static void m68k_op_ori_8_d(m68000_base_device* mc68kcpu)
24871 {
24872 uint32_t res = MASK_OUT_ABOVE_8((DY(mc68kcpu) |= OPER_I_8(mc68kcpu)));
24873
24874 (mc68kcpu)->n_flag = NFLAG_8(res);
24875 (mc68kcpu)->not_z_flag = res;
24876 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24877 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24878 }
24879
24880
24881 static void m68k_op_ori_8_ai(m68000_base_device* mc68kcpu)
24882 {
24883 uint32_t src = OPER_I_8(mc68kcpu);
24884 uint32_t ea = EA_AY_AI_8(mc68kcpu);
24885 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
24886
24887 m68ki_write_8((mc68kcpu), ea, res);
24888
24889 (mc68kcpu)->n_flag = NFLAG_8(res);
24890 (mc68kcpu)->not_z_flag = res;
24891 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24892 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24893 }
24894
24895
24896 static void m68k_op_ori_8_pi(m68000_base_device* mc68kcpu)
24897 {
24898 uint32_t src = OPER_I_8(mc68kcpu);
24899 uint32_t ea = EA_AY_PI_8(mc68kcpu);
24900 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
24901
24902 m68ki_write_8((mc68kcpu), ea, res);
24903
24904 (mc68kcpu)->n_flag = NFLAG_8(res);
24905 (mc68kcpu)->not_z_flag = res;
24906 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24907 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24908 }
24909
24910
24911 static void m68k_op_ori_8_pi7(m68000_base_device* mc68kcpu)
24912 {
24913 uint32_t src = OPER_I_8(mc68kcpu);
24914 uint32_t ea = EA_A7_PI_8(mc68kcpu);
24915 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
24916
24917 m68ki_write_8((mc68kcpu), ea, res);
24918
24919 (mc68kcpu)->n_flag = NFLAG_8(res);
24920 (mc68kcpu)->not_z_flag = res;
24921 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24922 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24923 }
24924
24925
24926 static void m68k_op_ori_8_pd(m68000_base_device* mc68kcpu)
24927 {
24928 uint32_t src = OPER_I_8(mc68kcpu);
24929 uint32_t ea = EA_AY_PD_8(mc68kcpu);
24930 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
24931
24932 m68ki_write_8((mc68kcpu), ea, res);
24933
24934 (mc68kcpu)->n_flag = NFLAG_8(res);
24935 (mc68kcpu)->not_z_flag = res;
24936 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24937 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24938 }
24939
24940
24941 static void m68k_op_ori_8_pd7(m68000_base_device* mc68kcpu)
24942 {
24943 uint32_t src = OPER_I_8(mc68kcpu);
24944 uint32_t ea = EA_A7_PD_8(mc68kcpu);
24945 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
24946
24947 m68ki_write_8((mc68kcpu), ea, res);
24948
24949 (mc68kcpu)->n_flag = NFLAG_8(res);
24950 (mc68kcpu)->not_z_flag = res;
24951 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24952 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24953 }
24954
24955
24956 static void m68k_op_ori_8_di(m68000_base_device* mc68kcpu)
24957 {
24958 uint32_t src = OPER_I_8(mc68kcpu);
24959 uint32_t ea = EA_AY_DI_8(mc68kcpu);
24960 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
24961
24962 m68ki_write_8((mc68kcpu), ea, res);
24963
24964 (mc68kcpu)->n_flag = NFLAG_8(res);
24965 (mc68kcpu)->not_z_flag = res;
24966 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24967 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24968 }
24969
24970
24971 static void m68k_op_ori_8_ix(m68000_base_device* mc68kcpu)
24972 {
24973 uint32_t src = OPER_I_8(mc68kcpu);
24974 uint32_t ea = EA_AY_IX_8(mc68kcpu);
24975 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
24976
24977 m68ki_write_8((mc68kcpu), ea, res);
24978
24979 (mc68kcpu)->n_flag = NFLAG_8(res);
24980 (mc68kcpu)->not_z_flag = res;
24981 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24982 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24983 }
24984
24985
24986 static void m68k_op_ori_8_aw(m68000_base_device* mc68kcpu)
24987 {
24988 uint32_t src = OPER_I_8(mc68kcpu);
24989 uint32_t ea = EA_AW_8(mc68kcpu);
24990 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
24991
24992 m68ki_write_8((mc68kcpu), ea, res);
24993
24994 (mc68kcpu)->n_flag = NFLAG_8(res);
24995 (mc68kcpu)->not_z_flag = res;
24996 (mc68kcpu)->c_flag = CFLAG_CLEAR;
24997 (mc68kcpu)->v_flag = VFLAG_CLEAR;
24998 }
24999
25000
25001 static void m68k_op_ori_8_al(m68000_base_device* mc68kcpu)
25002 {
25003 uint32_t src = OPER_I_8(mc68kcpu);
25004 uint32_t ea = EA_AL_8(mc68kcpu);
25005 uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea));
25006
25007 m68ki_write_8((mc68kcpu), ea, res);
25008
25009 (mc68kcpu)->n_flag = NFLAG_8(res);
25010 (mc68kcpu)->not_z_flag = res;
25011 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25012 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25013 }
25014
25015
25016 static void m68k_op_ori_16_d(m68000_base_device* mc68kcpu)
25017 {
25018 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu) |= OPER_I_16(mc68kcpu));
25019
25020 (mc68kcpu)->n_flag = NFLAG_16(res);
25021 (mc68kcpu)->not_z_flag = res;
25022 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25023 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25024 }
25025
25026
25027 static void m68k_op_ori_16_ai(m68000_base_device* mc68kcpu)
25028 {
25029 uint32_t src = OPER_I_16(mc68kcpu);
25030 uint32_t ea = EA_AY_AI_16(mc68kcpu);
25031 uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea));
25032
25033 m68ki_write_16((mc68kcpu), ea, res);
25034
25035 (mc68kcpu)->n_flag = NFLAG_16(res);
25036 (mc68kcpu)->not_z_flag = res;
25037 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25038 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25039 }
25040
25041
25042 static void m68k_op_ori_16_pi(m68000_base_device* mc68kcpu)
25043 {
25044 uint32_t src = OPER_I_16(mc68kcpu);
25045 uint32_t ea = EA_AY_PI_16(mc68kcpu);
25046 uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea));
25047
25048 m68ki_write_16((mc68kcpu), ea, res);
25049
25050 (mc68kcpu)->n_flag = NFLAG_16(res);
25051 (mc68kcpu)->not_z_flag = res;
25052 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25053 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25054 }
25055
25056
25057 static void m68k_op_ori_16_pd(m68000_base_device* mc68kcpu)
25058 {
25059 uint32_t src = OPER_I_16(mc68kcpu);
25060 uint32_t ea = EA_AY_PD_16(mc68kcpu);
25061 uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea));
25062
25063 m68ki_write_16((mc68kcpu), ea, res);
25064
25065 (mc68kcpu)->n_flag = NFLAG_16(res);
25066 (mc68kcpu)->not_z_flag = res;
25067 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25068 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25069 }
25070
25071
25072 static void m68k_op_ori_16_di(m68000_base_device* mc68kcpu)
25073 {
25074 uint32_t src = OPER_I_16(mc68kcpu);
25075 uint32_t ea = EA_AY_DI_16(mc68kcpu);
25076 uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea));
25077
25078 m68ki_write_16((mc68kcpu), ea, res);
25079
25080 (mc68kcpu)->n_flag = NFLAG_16(res);
25081 (mc68kcpu)->not_z_flag = res;
25082 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25083 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25084 }
25085
25086
25087 static void m68k_op_ori_16_ix(m68000_base_device* mc68kcpu)
25088 {
25089 uint32_t src = OPER_I_16(mc68kcpu);
25090 uint32_t ea = EA_AY_IX_16(mc68kcpu);
25091 uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea));
25092
25093 m68ki_write_16((mc68kcpu), ea, res);
25094
25095 (mc68kcpu)->n_flag = NFLAG_16(res);
25096 (mc68kcpu)->not_z_flag = res;
25097 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25098 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25099 }
25100
25101
25102 static void m68k_op_ori_16_aw(m68000_base_device* mc68kcpu)
25103 {
25104 uint32_t src = OPER_I_16(mc68kcpu);
25105 uint32_t ea = EA_AW_16(mc68kcpu);
25106 uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea));
25107
25108 m68ki_write_16((mc68kcpu), ea, res);
25109
25110 (mc68kcpu)->n_flag = NFLAG_16(res);
25111 (mc68kcpu)->not_z_flag = res;
25112 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25113 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25114 }
25115
25116
25117 static void m68k_op_ori_16_al(m68000_base_device* mc68kcpu)
25118 {
25119 uint32_t src = OPER_I_16(mc68kcpu);
25120 uint32_t ea = EA_AL_16(mc68kcpu);
25121 uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea));
25122
25123 m68ki_write_16((mc68kcpu), ea, res);
25124
25125 (mc68kcpu)->n_flag = NFLAG_16(res);
25126 (mc68kcpu)->not_z_flag = res;
25127 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25128 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25129 }
25130
25131
25132 static void m68k_op_ori_32_d(m68000_base_device* mc68kcpu)
25133 {
25134 uint32_t res = DY(mc68kcpu) |= OPER_I_32(mc68kcpu);
25135
25136 (mc68kcpu)->n_flag = NFLAG_32(res);
25137 (mc68kcpu)->not_z_flag = res;
25138 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25139 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25140 }
25141
25142
25143 static void m68k_op_ori_32_ai(m68000_base_device* mc68kcpu)
25144 {
25145 uint32_t src = OPER_I_32(mc68kcpu);
25146 uint32_t ea = EA_AY_AI_32(mc68kcpu);
25147 uint32_t res = src | m68ki_read_32((mc68kcpu), ea);
25148
25149 m68ki_write_32((mc68kcpu), ea, res);
25150
25151 (mc68kcpu)->n_flag = NFLAG_32(res);
25152 (mc68kcpu)->not_z_flag = res;
25153 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25154 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25155 }
25156
25157
25158 static void m68k_op_ori_32_pi(m68000_base_device* mc68kcpu)
25159 {
25160 uint32_t src = OPER_I_32(mc68kcpu);
25161 uint32_t ea = EA_AY_PI_32(mc68kcpu);
25162 uint32_t res = src | m68ki_read_32((mc68kcpu), ea);
25163
25164 m68ki_write_32((mc68kcpu), ea, res);
25165
25166 (mc68kcpu)->n_flag = NFLAG_32(res);
25167 (mc68kcpu)->not_z_flag = res;
25168 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25169 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25170 }
25171
25172
25173 static void m68k_op_ori_32_pd(m68000_base_device* mc68kcpu)
25174 {
25175 uint32_t src = OPER_I_32(mc68kcpu);
25176 uint32_t ea = EA_AY_PD_32(mc68kcpu);
25177 uint32_t res = src | m68ki_read_32((mc68kcpu), ea);
25178
25179 m68ki_write_32((mc68kcpu), ea, res);
25180
25181 (mc68kcpu)->n_flag = NFLAG_32(res);
25182 (mc68kcpu)->not_z_flag = res;
25183 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25184 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25185 }
25186
25187
25188 static void m68k_op_ori_32_di(m68000_base_device* mc68kcpu)
25189 {
25190 uint32_t src = OPER_I_32(mc68kcpu);
25191 uint32_t ea = EA_AY_DI_32(mc68kcpu);
25192 uint32_t res = src | m68ki_read_32((mc68kcpu), ea);
25193
25194 m68ki_write_32((mc68kcpu), ea, res);
25195
25196 (mc68kcpu)->n_flag = NFLAG_32(res);
25197 (mc68kcpu)->not_z_flag = res;
25198 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25199 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25200 }
25201
25202
25203 static void m68k_op_ori_32_ix(m68000_base_device* mc68kcpu)
25204 {
25205 uint32_t src = OPER_I_32(mc68kcpu);
25206 uint32_t ea = EA_AY_IX_32(mc68kcpu);
25207 uint32_t res = src | m68ki_read_32((mc68kcpu), ea);
25208
25209 m68ki_write_32((mc68kcpu), ea, res);
25210
25211 (mc68kcpu)->n_flag = NFLAG_32(res);
25212 (mc68kcpu)->not_z_flag = res;
25213 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25214 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25215 }
25216
25217
25218 static void m68k_op_ori_32_aw(m68000_base_device* mc68kcpu)
25219 {
25220 uint32_t src = OPER_I_32(mc68kcpu);
25221 uint32_t ea = EA_AW_32(mc68kcpu);
25222 uint32_t res = src | m68ki_read_32((mc68kcpu), ea);
25223
25224 m68ki_write_32((mc68kcpu), ea, res);
25225
25226 (mc68kcpu)->n_flag = NFLAG_32(res);
25227 (mc68kcpu)->not_z_flag = res;
25228 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25229 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25230 }
25231
25232
25233 static void m68k_op_ori_32_al(m68000_base_device* mc68kcpu)
25234 {
25235 uint32_t src = OPER_I_32(mc68kcpu);
25236 uint32_t ea = EA_AL_32(mc68kcpu);
25237 uint32_t res = src | m68ki_read_32((mc68kcpu), ea);
25238
25239 m68ki_write_32((mc68kcpu), ea, res);
25240
25241 (mc68kcpu)->n_flag = NFLAG_32(res);
25242 (mc68kcpu)->not_z_flag = res;
25243 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25244 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25245 }
25246
25247
25248 static void m68k_op_ori_16_toc(m68000_base_device* mc68kcpu)
25249 {
25250 m68ki_set_ccr((mc68kcpu), m68ki_get_ccr(mc68kcpu) | OPER_I_16(mc68kcpu));
25251 }
25252
25253
25254 static void m68k_op_ori_16_tos(m68000_base_device* mc68kcpu)
25255 {
25256 if((mc68kcpu)->s_flag)
25257 {
25258 uint32_t src = OPER_I_16(mc68kcpu);
25259 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
25260 m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) | src);
25261 return;
25262 }
25263 m68ki_exception_privilege_violation(mc68kcpu);
25264 }
25265
25266
25267 static void m68k_op_pack_16_rr(m68000_base_device* mc68kcpu)
25268 {
25269 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
25270 {
25271 /* Note: DX(mc68kcpu) and DY(mc68kcpu) are reversed in Motorola's docs */
25272 uint32_t src = DY(mc68kcpu) + OPER_I_16(mc68kcpu);
25273 uint32_t* r_dst = &DX(mc68kcpu);
25274
25275 *r_dst = MASK_OUT_BELOW_8(*r_dst) | ((src >> 4) & 0x00f0) | (src & 0x000f);
25276 return;
25277 }
25278 m68ki_exception_illegal(mc68kcpu);
25279 }
25280
25281
25282 static void m68k_op_pack_16_mm_ax7(m68000_base_device* mc68kcpu)
25283 {
25284 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
25285 {
25286 /* Note: AX and AY are reversed in Motorola's docs */
25287 uint32_t ea_src = EA_AY_PD_8(mc68kcpu);
25288 uint32_t src = m68ki_read_8((mc68kcpu), ea_src);
25289 ea_src = EA_AY_PD_8(mc68kcpu);
25290 src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu);
25291
25292 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
25293 return;
25294 }
25295 m68ki_exception_illegal(mc68kcpu);
25296 }
25297
25298
25299 static void m68k_op_pack_16_mm_ay7(m68000_base_device* mc68kcpu)
25300 {
25301 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
25302 {
25303 /* Note: AX and AY are reversed in Motorola's docs */
25304 uint32_t ea_src = EA_A7_PD_8(mc68kcpu);
25305 uint32_t src = m68ki_read_8((mc68kcpu), ea_src);
25306 ea_src = EA_A7_PD_8(mc68kcpu);
25307 src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu);
25308
25309 m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
25310 return;
25311 }
25312 m68ki_exception_illegal(mc68kcpu);
25313 }
25314
25315
25316 static void m68k_op_pack_16_mm_axy7(m68000_base_device* mc68kcpu)
25317 {
25318 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
25319 {
25320 uint32_t ea_src = EA_A7_PD_8(mc68kcpu);
25321 uint32_t src = m68ki_read_8((mc68kcpu), ea_src);
25322 ea_src = EA_A7_PD_8(mc68kcpu);
25323 src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu);
25324
25325 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
25326 return;
25327 }
25328 m68ki_exception_illegal(mc68kcpu);
25329 }
25330
25331
25332 static void m68k_op_pack_16_mm(m68000_base_device* mc68kcpu)
25333 {
25334 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
25335 {
25336 /* Note: AX and AY are reversed in Motorola's docs */
25337 uint32_t ea_src = EA_AY_PD_8(mc68kcpu);
25338 uint32_t src = m68ki_read_8((mc68kcpu), ea_src);
25339 ea_src = EA_AY_PD_8(mc68kcpu);
25340 src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu);
25341
25342 m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
25343 return;
25344 }
25345 m68ki_exception_illegal(mc68kcpu);
25346 }
25347
25348
25349 static void m68k_op_pea_32_ai(m68000_base_device* mc68kcpu)
25350 {
25351 uint32_t ea = EA_AY_AI_32(mc68kcpu);
25352
25353 m68ki_push_32((mc68kcpu), ea);
25354 }
25355
25356
25357 static void m68k_op_pea_32_di(m68000_base_device* mc68kcpu)
25358 {
25359 uint32_t ea = EA_AY_DI_32(mc68kcpu);
25360
25361 m68ki_push_32((mc68kcpu), ea);
25362 }
25363
25364
25365 static void m68k_op_pea_32_ix(m68000_base_device* mc68kcpu)
25366 {
25367 uint32_t ea = EA_AY_IX_32(mc68kcpu);
25368
25369 m68ki_push_32((mc68kcpu), ea);
25370 }
25371
25372
25373 static void m68k_op_pea_32_aw(m68000_base_device* mc68kcpu)
25374 {
25375 uint32_t ea = EA_AW_32(mc68kcpu);
25376
25377 m68ki_push_32((mc68kcpu), ea);
25378 }
25379
25380
25381 static void m68k_op_pea_32_al(m68000_base_device* mc68kcpu)
25382 {
25383 uint32_t ea = EA_AL_32(mc68kcpu);
25384
25385 m68ki_push_32((mc68kcpu), ea);
25386 }
25387
25388
25389 static void m68k_op_pea_32_pcdi(m68000_base_device* mc68kcpu)
25390 {
25391 uint32_t ea = EA_PCDI_32(mc68kcpu);
25392
25393 m68ki_push_32((mc68kcpu), ea);
25394 }
25395
25396
25397 static void m68k_op_pea_32_pcix(m68000_base_device* mc68kcpu)
25398 {
25399 uint32_t ea = EA_PCIX_32(mc68kcpu);
25400
25401 m68ki_push_32((mc68kcpu), ea);
25402 }
25403
25404
25405 static void m68k_op_pflusha_32(m68000_base_device* mc68kcpu)
25406 {
25407 m68ki_exception_1111(mc68kcpu);
25408 }
25409
25410
25411 static void m68k_op_pflushan_32(m68000_base_device* mc68kcpu)
25412 {
25413 m68ki_exception_1111(mc68kcpu);
25414 }
25415
25416
25417 static void m68k_op_pmmu_32(m68000_base_device* mc68kcpu)
25418 {
25419
25420 m68ki_exception_1111(mc68kcpu);
25421 }
25422
25423
25424 static void m68k_op_ptest_32(m68000_base_device* mc68kcpu)
25425 {
25426
25427 m68ki_exception_1111(mc68kcpu);
25428 }
25429
25430
25431 static void m68k_op_reset(m68000_base_device* mc68kcpu)
25432 {
25433 if((mc68kcpu)->s_flag)
25434 {
25435 m68k_reset_handler handler = (m68k_reset_handler)(mc68kcpu)->c.reset_handler;
25436 handler(&(mc68kcpu)->c);
25437 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_reset;
25438 return;
25439 }
25440 m68ki_exception_privilege_violation(mc68kcpu);
25441 }
25442
25443
25444 static void m68k_op_ror_8_s(m68000_base_device* mc68kcpu)
25445 {
25446 uint32_t* r_dst = &DY(mc68kcpu);
25447 uint32_t orig_shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25448 uint32_t shift = orig_shift & 7;
25449 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
25450 uint32_t res = ROR_8(src, shift);
25451
25452 if(orig_shift != 0)
25453 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25454
25455 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
25456
25457 (mc68kcpu)->n_flag = NFLAG_8(res);
25458 (mc68kcpu)->not_z_flag = res;
25459 (mc68kcpu)->c_flag = src << (9-orig_shift);
25460 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25461 }
25462
25463
25464 static void m68k_op_ror_16_s(m68000_base_device* mc68kcpu)
25465 {
25466 uint32_t* r_dst = &DY(mc68kcpu);
25467 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25468 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
25469 uint32_t res = ROR_16(src, shift);
25470
25471 if(shift != 0)
25472 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25473
25474 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
25475
25476 (mc68kcpu)->n_flag = NFLAG_16(res);
25477 (mc68kcpu)->not_z_flag = res;
25478 (mc68kcpu)->c_flag = src << (9-shift);
25479 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25480 }
25481
25482
25483 static void m68k_op_ror_32_s(m68000_base_device* mc68kcpu)
25484 {
25485 uint32_t* r_dst = &DY(mc68kcpu);
25486 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25487 uint64_t src = *r_dst;
25488 uint32_t res = ROR_32(src, shift);
25489
25490 if(shift != 0)
25491 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25492
25493 *r_dst = res;
25494
25495 (mc68kcpu)->n_flag = NFLAG_32(res);
25496 (mc68kcpu)->not_z_flag = res;
25497 (mc68kcpu)->c_flag = src << (9-shift);
25498 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25499 }
25500
25501
25502 static void m68k_op_ror_8_r(m68000_base_device* mc68kcpu)
25503 {
25504 uint32_t* r_dst = &DY(mc68kcpu);
25505 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
25506 uint32_t shift = orig_shift & 7;
25507 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
25508 uint32_t res = ROR_8(src, shift);
25509
25510 if(orig_shift != 0)
25511 {
25512 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25513
25514 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
25515 (mc68kcpu)->c_flag = src << (8-((shift-1)&7));
25516 (mc68kcpu)->n_flag = NFLAG_8(res);
25517 (mc68kcpu)->not_z_flag = res;
25518 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25519 return;
25520 }
25521
25522 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25523 (mc68kcpu)->n_flag = NFLAG_8(src);
25524 (mc68kcpu)->not_z_flag = src;
25525 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25526 }
25527
25528
25529 static void m68k_op_ror_16_r(m68000_base_device* mc68kcpu)
25530 {
25531 uint32_t* r_dst = &DY(mc68kcpu);
25532 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
25533 uint32_t shift = orig_shift & 15;
25534 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
25535 uint32_t res = ROR_16(src, shift);
25536
25537 if(orig_shift != 0)
25538 {
25539 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25540
25541 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
25542 (mc68kcpu)->c_flag = (src >> ((shift - 1) & 15)) << 8;
25543 (mc68kcpu)->n_flag = NFLAG_16(res);
25544 (mc68kcpu)->not_z_flag = res;
25545 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25546 return;
25547 }
25548
25549 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25550 (mc68kcpu)->n_flag = NFLAG_16(src);
25551 (mc68kcpu)->not_z_flag = src;
25552 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25553 }
25554
25555
25556 static void m68k_op_ror_32_r(m68000_base_device* mc68kcpu)
25557 {
25558 uint32_t* r_dst = &DY(mc68kcpu);
25559 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
25560 uint32_t shift = orig_shift & 31;
25561 uint64_t src = *r_dst;
25562 uint32_t res = ROR_32(src, shift);
25563
25564 if(orig_shift != 0)
25565 {
25566 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25567
25568 *r_dst = res;
25569 (mc68kcpu)->c_flag = (src >> ((shift - 1) & 31)) << 8;
25570 (mc68kcpu)->n_flag = NFLAG_32(res);
25571 (mc68kcpu)->not_z_flag = res;
25572 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25573 return;
25574 }
25575
25576 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25577 (mc68kcpu)->n_flag = NFLAG_32(src);
25578 (mc68kcpu)->not_z_flag = src;
25579 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25580 }
25581
25582
25583 static void m68k_op_ror_16_ai(m68000_base_device* mc68kcpu)
25584 {
25585 uint32_t ea = EA_AY_AI_16(mc68kcpu);
25586 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25587 uint32_t res = ROR_16(src, 1);
25588
25589 m68ki_write_16((mc68kcpu), ea, res);
25590
25591 (mc68kcpu)->n_flag = NFLAG_16(res);
25592 (mc68kcpu)->not_z_flag = res;
25593 (mc68kcpu)->c_flag = src << 8;
25594 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25595 }
25596
25597
25598 static void m68k_op_ror_16_pi(m68000_base_device* mc68kcpu)
25599 {
25600 uint32_t ea = EA_AY_PI_16(mc68kcpu);
25601 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25602 uint32_t res = ROR_16(src, 1);
25603
25604 m68ki_write_16((mc68kcpu), ea, res);
25605
25606 (mc68kcpu)->n_flag = NFLAG_16(res);
25607 (mc68kcpu)->not_z_flag = res;
25608 (mc68kcpu)->c_flag = src << 8;
25609 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25610 }
25611
25612
25613 static void m68k_op_ror_16_pd(m68000_base_device* mc68kcpu)
25614 {
25615 uint32_t ea = EA_AY_PD_16(mc68kcpu);
25616 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25617 uint32_t res = ROR_16(src, 1);
25618
25619 m68ki_write_16((mc68kcpu), ea, res);
25620
25621 (mc68kcpu)->n_flag = NFLAG_16(res);
25622 (mc68kcpu)->not_z_flag = res;
25623 (mc68kcpu)->c_flag = src << 8;
25624 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25625 }
25626
25627
25628 static void m68k_op_ror_16_di(m68000_base_device* mc68kcpu)
25629 {
25630 uint32_t ea = EA_AY_DI_16(mc68kcpu);
25631 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25632 uint32_t res = ROR_16(src, 1);
25633
25634 m68ki_write_16((mc68kcpu), ea, res);
25635
25636 (mc68kcpu)->n_flag = NFLAG_16(res);
25637 (mc68kcpu)->not_z_flag = res;
25638 (mc68kcpu)->c_flag = src << 8;
25639 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25640 }
25641
25642
25643 static void m68k_op_ror_16_ix(m68000_base_device* mc68kcpu)
25644 {
25645 uint32_t ea = EA_AY_IX_16(mc68kcpu);
25646 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25647 uint32_t res = ROR_16(src, 1);
25648
25649 m68ki_write_16((mc68kcpu), ea, res);
25650
25651 (mc68kcpu)->n_flag = NFLAG_16(res);
25652 (mc68kcpu)->not_z_flag = res;
25653 (mc68kcpu)->c_flag = src << 8;
25654 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25655 }
25656
25657
25658 static void m68k_op_ror_16_aw(m68000_base_device* mc68kcpu)
25659 {
25660 uint32_t ea = EA_AW_16(mc68kcpu);
25661 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25662 uint32_t res = ROR_16(src, 1);
25663
25664 m68ki_write_16((mc68kcpu), ea, res);
25665
25666 (mc68kcpu)->n_flag = NFLAG_16(res);
25667 (mc68kcpu)->not_z_flag = res;
25668 (mc68kcpu)->c_flag = src << 8;
25669 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25670 }
25671
25672
25673 static void m68k_op_ror_16_al(m68000_base_device* mc68kcpu)
25674 {
25675 uint32_t ea = EA_AL_16(mc68kcpu);
25676 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25677 uint32_t res = ROR_16(src, 1);
25678
25679 m68ki_write_16((mc68kcpu), ea, res);
25680
25681 (mc68kcpu)->n_flag = NFLAG_16(res);
25682 (mc68kcpu)->not_z_flag = res;
25683 (mc68kcpu)->c_flag = src << 8;
25684 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25685 }
25686
25687
25688 static void m68k_op_rol_8_s(m68000_base_device* mc68kcpu)
25689 {
25690 uint32_t* r_dst = &DY(mc68kcpu);
25691 uint32_t orig_shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25692 uint32_t shift = orig_shift & 7;
25693 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
25694 uint32_t res = ROL_8(src, shift);
25695
25696 if(orig_shift != 0)
25697 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25698
25699 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
25700
25701 (mc68kcpu)->n_flag = NFLAG_8(res);
25702 (mc68kcpu)->not_z_flag = res;
25703 (mc68kcpu)->c_flag = src << orig_shift;
25704 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25705 }
25706
25707
25708 static void m68k_op_rol_16_s(m68000_base_device* mc68kcpu)
25709 {
25710 uint32_t* r_dst = &DY(mc68kcpu);
25711 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25712 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
25713 uint32_t res = ROL_16(src, shift);
25714
25715 if(shift != 0)
25716 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25717
25718 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
25719
25720 (mc68kcpu)->n_flag = NFLAG_16(res);
25721 (mc68kcpu)->not_z_flag = res;
25722 (mc68kcpu)->c_flag = src >> (8-shift);
25723 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25724 }
25725
25726
25727 static void m68k_op_rol_32_s(m68000_base_device* mc68kcpu)
25728 {
25729 uint32_t* r_dst = &DY(mc68kcpu);
25730 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25731 uint64_t src = *r_dst;
25732 uint32_t res = ROL_32(src, shift);
25733
25734 if(shift != 0)
25735 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25736
25737 *r_dst = res;
25738
25739 (mc68kcpu)->n_flag = NFLAG_32(res);
25740 (mc68kcpu)->not_z_flag = res;
25741 (mc68kcpu)->c_flag = src >> (24-shift);
25742 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25743 }
25744
25745
25746 static void m68k_op_rol_8_r(m68000_base_device* mc68kcpu)
25747 {
25748 uint32_t* r_dst = &DY(mc68kcpu);
25749 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
25750 uint32_t shift = orig_shift & 7;
25751 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
25752 uint32_t res = ROL_8(src, shift);
25753
25754 if(orig_shift != 0)
25755 {
25756 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25757
25758 if(shift != 0)
25759 {
25760 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
25761 (mc68kcpu)->c_flag = src << shift;
25762 (mc68kcpu)->n_flag = NFLAG_8(res);
25763 (mc68kcpu)->not_z_flag = res;
25764 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25765 return;
25766 }
25767 (mc68kcpu)->c_flag = (src & 1)<<8;
25768 (mc68kcpu)->n_flag = NFLAG_8(src);
25769 (mc68kcpu)->not_z_flag = src;
25770 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25771 return;
25772 }
25773
25774 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25775 (mc68kcpu)->n_flag = NFLAG_8(src);
25776 (mc68kcpu)->not_z_flag = src;
25777 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25778 }
25779
25780
25781 static void m68k_op_rol_16_r(m68000_base_device* mc68kcpu)
25782 {
25783 uint32_t* r_dst = &DY(mc68kcpu);
25784 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
25785 uint32_t shift = orig_shift & 15;
25786 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
25787 uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, shift));
25788
25789 if(orig_shift != 0)
25790 {
25791 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25792
25793 if(shift != 0)
25794 {
25795 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
25796 (mc68kcpu)->c_flag = (src << shift) >> 8;
25797 (mc68kcpu)->n_flag = NFLAG_16(res);
25798 (mc68kcpu)->not_z_flag = res;
25799 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25800 return;
25801 }
25802 (mc68kcpu)->c_flag = (src & 1)<<8;
25803 (mc68kcpu)->n_flag = NFLAG_16(src);
25804 (mc68kcpu)->not_z_flag = src;
25805 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25806 return;
25807 }
25808
25809 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25810 (mc68kcpu)->n_flag = NFLAG_16(src);
25811 (mc68kcpu)->not_z_flag = src;
25812 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25813 }
25814
25815
25816 static void m68k_op_rol_32_r(m68000_base_device* mc68kcpu)
25817 {
25818 uint32_t* r_dst = &DY(mc68kcpu);
25819 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
25820 uint32_t shift = orig_shift & 31;
25821 uint64_t src = *r_dst;
25822 uint32_t res = ROL_32(src, shift);
25823
25824 if(orig_shift != 0)
25825 {
25826 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25827
25828 *r_dst = res;
25829
25830 (mc68kcpu)->c_flag = (src >> ((32 - shift) & 0x1f)) << 8;
25831 (mc68kcpu)->n_flag = NFLAG_32(res);
25832 (mc68kcpu)->not_z_flag = res;
25833 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25834 return;
25835 }
25836
25837 (mc68kcpu)->c_flag = CFLAG_CLEAR;
25838 (mc68kcpu)->n_flag = NFLAG_32(src);
25839 (mc68kcpu)->not_z_flag = src;
25840 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25841 }
25842
25843
25844 static void m68k_op_rol_16_ai(m68000_base_device* mc68kcpu)
25845 {
25846 uint32_t ea = EA_AY_AI_16(mc68kcpu);
25847 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25848 uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
25849
25850 m68ki_write_16((mc68kcpu), ea, res);
25851
25852 (mc68kcpu)->n_flag = NFLAG_16(res);
25853 (mc68kcpu)->not_z_flag = res;
25854 (mc68kcpu)->c_flag = src >> 7;
25855 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25856 }
25857
25858
25859 static void m68k_op_rol_16_pi(m68000_base_device* mc68kcpu)
25860 {
25861 uint32_t ea = EA_AY_PI_16(mc68kcpu);
25862 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25863 uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
25864
25865 m68ki_write_16((mc68kcpu), ea, res);
25866
25867 (mc68kcpu)->n_flag = NFLAG_16(res);
25868 (mc68kcpu)->not_z_flag = res;
25869 (mc68kcpu)->c_flag = src >> 7;
25870 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25871 }
25872
25873
25874 static void m68k_op_rol_16_pd(m68000_base_device* mc68kcpu)
25875 {
25876 uint32_t ea = EA_AY_PD_16(mc68kcpu);
25877 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25878 uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
25879
25880 m68ki_write_16((mc68kcpu), ea, res);
25881
25882 (mc68kcpu)->n_flag = NFLAG_16(res);
25883 (mc68kcpu)->not_z_flag = res;
25884 (mc68kcpu)->c_flag = src >> 7;
25885 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25886 }
25887
25888
25889 static void m68k_op_rol_16_di(m68000_base_device* mc68kcpu)
25890 {
25891 uint32_t ea = EA_AY_DI_16(mc68kcpu);
25892 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25893 uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
25894
25895 m68ki_write_16((mc68kcpu), ea, res);
25896
25897 (mc68kcpu)->n_flag = NFLAG_16(res);
25898 (mc68kcpu)->not_z_flag = res;
25899 (mc68kcpu)->c_flag = src >> 7;
25900 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25901 }
25902
25903
25904 static void m68k_op_rol_16_ix(m68000_base_device* mc68kcpu)
25905 {
25906 uint32_t ea = EA_AY_IX_16(mc68kcpu);
25907 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25908 uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
25909
25910 m68ki_write_16((mc68kcpu), ea, res);
25911
25912 (mc68kcpu)->n_flag = NFLAG_16(res);
25913 (mc68kcpu)->not_z_flag = res;
25914 (mc68kcpu)->c_flag = src >> 7;
25915 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25916 }
25917
25918
25919 static void m68k_op_rol_16_aw(m68000_base_device* mc68kcpu)
25920 {
25921 uint32_t ea = EA_AW_16(mc68kcpu);
25922 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25923 uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
25924
25925 m68ki_write_16((mc68kcpu), ea, res);
25926
25927 (mc68kcpu)->n_flag = NFLAG_16(res);
25928 (mc68kcpu)->not_z_flag = res;
25929 (mc68kcpu)->c_flag = src >> 7;
25930 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25931 }
25932
25933
25934 static void m68k_op_rol_16_al(m68000_base_device* mc68kcpu)
25935 {
25936 uint32_t ea = EA_AL_16(mc68kcpu);
25937 uint32_t src = m68ki_read_16((mc68kcpu), ea);
25938 uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
25939
25940 m68ki_write_16((mc68kcpu), ea, res);
25941
25942 (mc68kcpu)->n_flag = NFLAG_16(res);
25943 (mc68kcpu)->not_z_flag = res;
25944 (mc68kcpu)->c_flag = src >> 7;
25945 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25946 }
25947
25948
25949 static void m68k_op_roxr_8_s(m68000_base_device* mc68kcpu)
25950 {
25951 uint32_t* r_dst = &DY(mc68kcpu);
25952 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25953 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
25954 uint32_t res = ROR_9(src | (XFLAG_AS_1(mc68kcpu) << 8), shift);
25955
25956 if(shift != 0)
25957 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25958
25959 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res;
25960 res = MASK_OUT_ABOVE_8(res);
25961
25962 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
25963
25964 (mc68kcpu)->n_flag = NFLAG_8(res);
25965 (mc68kcpu)->not_z_flag = res;
25966 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25967 }
25968
25969
25970 static void m68k_op_roxr_16_s(m68000_base_device* mc68kcpu)
25971 {
25972 uint32_t* r_dst = &DY(mc68kcpu);
25973 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25974 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
25975 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), shift);
25976
25977 if(shift != 0)
25978 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
25979
25980 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
25981 res = MASK_OUT_ABOVE_16(res);
25982
25983 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
25984
25985 (mc68kcpu)->n_flag = NFLAG_16(res);
25986 (mc68kcpu)->not_z_flag = res;
25987 (mc68kcpu)->v_flag = VFLAG_CLEAR;
25988 }
25989
25990
25991 static void m68k_op_roxr_32_s(m68000_base_device* mc68kcpu)
25992 {
25993 uint32_t* r_dst = &DY(mc68kcpu);
25994 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
25995 uint64_t src = *r_dst;
25996 uint64_t res = src | (((uint64_t)XFLAG_AS_1(mc68kcpu)) << 32);
25997
25998 if(shift != 0)
25999 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26000
26001 res = ROR_33_64(res, shift);
26002
26003 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 24;
26004 res = MASK_OUT_ABOVE_32(res);
26005
26006 *r_dst = res;
26007
26008 (mc68kcpu)->n_flag = NFLAG_32(res);
26009 (mc68kcpu)->not_z_flag = res;
26010 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26011 }
26012
26013
26014 static void m68k_op_roxr_8_r(m68000_base_device* mc68kcpu)
26015 {
26016 uint32_t* r_dst = &DY(mc68kcpu);
26017 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
26018
26019 if(orig_shift != 0)
26020 {
26021 uint32_t shift = orig_shift % 9;
26022 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
26023 uint32_t res = ROR_9(src | (XFLAG_AS_1(mc68kcpu) << 8), shift);
26024
26025 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26026
26027 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res;
26028 res = MASK_OUT_ABOVE_8(res);
26029
26030 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
26031 (mc68kcpu)->n_flag = NFLAG_8(res);
26032 (mc68kcpu)->not_z_flag = res;
26033 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26034 return;
26035 }
26036
26037 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag;
26038 (mc68kcpu)->n_flag = NFLAG_8(*r_dst);
26039 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(*r_dst);
26040 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26041 }
26042
26043
26044 static void m68k_op_roxr_16_r(m68000_base_device* mc68kcpu)
26045 {
26046 uint32_t* r_dst = &DY(mc68kcpu);
26047 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
26048
26049 if(orig_shift != 0)
26050 {
26051 uint32_t shift = orig_shift % 17;
26052 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
26053 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), shift);
26054
26055 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26056
26057 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26058 res = MASK_OUT_ABOVE_16(res);
26059
26060 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
26061 (mc68kcpu)->n_flag = NFLAG_16(res);
26062 (mc68kcpu)->not_z_flag = res;
26063 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26064 return;
26065 }
26066
26067 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag;
26068 (mc68kcpu)->n_flag = NFLAG_16(*r_dst);
26069 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(*r_dst);
26070 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26071 }
26072
26073
26074 static void m68k_op_roxr_32_r(m68000_base_device* mc68kcpu)
26075 {
26076 uint32_t* r_dst = &DY(mc68kcpu);
26077 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
26078
26079 if(orig_shift != 0)
26080 {
26081 uint32_t shift = orig_shift % 33;
26082 uint64_t src = *r_dst;
26083 uint64_t res = src | (((uint64_t)XFLAG_AS_1(mc68kcpu)) << 32);
26084
26085 res = ROR_33_64(res, shift);
26086
26087 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26088
26089 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 24;
26090 res = MASK_OUT_ABOVE_32(res);
26091
26092 *r_dst = res;
26093 (mc68kcpu)->n_flag = NFLAG_32(res);
26094 (mc68kcpu)->not_z_flag = res;
26095 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26096 return;
26097 }
26098
26099 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag;
26100 (mc68kcpu)->n_flag = NFLAG_32(*r_dst);
26101 (mc68kcpu)->not_z_flag = *r_dst;
26102 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26103 }
26104
26105
26106 static void m68k_op_roxr_16_ai(m68000_base_device* mc68kcpu)
26107 {
26108 uint32_t ea = EA_AY_AI_16(mc68kcpu);
26109 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26110 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26111
26112 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26113 res = MASK_OUT_ABOVE_16(res);
26114
26115 m68ki_write_16((mc68kcpu), ea, res);
26116
26117 (mc68kcpu)->n_flag = NFLAG_16(res);
26118 (mc68kcpu)->not_z_flag = res;
26119 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26120 }
26121
26122
26123 static void m68k_op_roxr_16_pi(m68000_base_device* mc68kcpu)
26124 {
26125 uint32_t ea = EA_AY_PI_16(mc68kcpu);
26126 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26127 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26128
26129 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26130 res = MASK_OUT_ABOVE_16(res);
26131
26132 m68ki_write_16((mc68kcpu), ea, res);
26133
26134 (mc68kcpu)->n_flag = NFLAG_16(res);
26135 (mc68kcpu)->not_z_flag = res;
26136 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26137 }
26138
26139
26140 static void m68k_op_roxr_16_pd(m68000_base_device* mc68kcpu)
26141 {
26142 uint32_t ea = EA_AY_PD_16(mc68kcpu);
26143 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26144 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26145
26146 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26147 res = MASK_OUT_ABOVE_16(res);
26148
26149 m68ki_write_16((mc68kcpu), ea, res);
26150
26151 (mc68kcpu)->n_flag = NFLAG_16(res);
26152 (mc68kcpu)->not_z_flag = res;
26153 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26154 }
26155
26156
26157 static void m68k_op_roxr_16_di(m68000_base_device* mc68kcpu)
26158 {
26159 uint32_t ea = EA_AY_DI_16(mc68kcpu);
26160 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26161 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26162
26163 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26164 res = MASK_OUT_ABOVE_16(res);
26165
26166 m68ki_write_16((mc68kcpu), ea, res);
26167
26168 (mc68kcpu)->n_flag = NFLAG_16(res);
26169 (mc68kcpu)->not_z_flag = res;
26170 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26171 }
26172
26173
26174 static void m68k_op_roxr_16_ix(m68000_base_device* mc68kcpu)
26175 {
26176 uint32_t ea = EA_AY_IX_16(mc68kcpu);
26177 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26178 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26179
26180 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26181 res = MASK_OUT_ABOVE_16(res);
26182
26183 m68ki_write_16((mc68kcpu), ea, res);
26184
26185 (mc68kcpu)->n_flag = NFLAG_16(res);
26186 (mc68kcpu)->not_z_flag = res;
26187 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26188 }
26189
26190
26191 static void m68k_op_roxr_16_aw(m68000_base_device* mc68kcpu)
26192 {
26193 uint32_t ea = EA_AW_16(mc68kcpu);
26194 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26195 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26196
26197 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26198 res = MASK_OUT_ABOVE_16(res);
26199
26200 m68ki_write_16((mc68kcpu), ea, res);
26201
26202 (mc68kcpu)->n_flag = NFLAG_16(res);
26203 (mc68kcpu)->not_z_flag = res;
26204 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26205 }
26206
26207
26208 static void m68k_op_roxr_16_al(m68000_base_device* mc68kcpu)
26209 {
26210 uint32_t ea = EA_AL_16(mc68kcpu);
26211 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26212 uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26213
26214 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26215 res = MASK_OUT_ABOVE_16(res);
26216
26217 m68ki_write_16((mc68kcpu), ea, res);
26218
26219 (mc68kcpu)->n_flag = NFLAG_16(res);
26220 (mc68kcpu)->not_z_flag = res;
26221 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26222 }
26223
26224
26225 static void m68k_op_roxl_8_s(m68000_base_device* mc68kcpu)
26226 {
26227 uint32_t* r_dst = &DY(mc68kcpu);
26228 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
26229 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
26230 uint32_t res = ROL_9(src | (XFLAG_AS_1(mc68kcpu) << 8), shift);
26231
26232 if(shift != 0)
26233 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26234
26235 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res;
26236 res = MASK_OUT_ABOVE_8(res);
26237
26238 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
26239
26240 (mc68kcpu)->n_flag = NFLAG_8(res);
26241 (mc68kcpu)->not_z_flag = res;
26242 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26243 }
26244
26245
26246 static void m68k_op_roxl_16_s(m68000_base_device* mc68kcpu)
26247 {
26248 uint32_t* r_dst = &DY(mc68kcpu);
26249 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
26250 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
26251 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), shift);
26252
26253 if(shift != 0)
26254 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26255
26256 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26257 res = MASK_OUT_ABOVE_16(res);
26258
26259 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
26260
26261 (mc68kcpu)->n_flag = NFLAG_16(res);
26262 (mc68kcpu)->not_z_flag = res;
26263 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26264 }
26265
26266
26267 static void m68k_op_roxl_32_s(m68000_base_device* mc68kcpu)
26268 {
26269 uint32_t* r_dst = &DY(mc68kcpu);
26270 uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
26271 uint64_t src = *r_dst;
26272 uint64_t res = src | (((uint64_t)XFLAG_AS_1(mc68kcpu)) << 32);
26273
26274 if(shift != 0)
26275 (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26276
26277 res = ROL_33_64(res, shift);
26278
26279 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 24;
26280 res = MASK_OUT_ABOVE_32(res);
26281
26282 *r_dst = res;
26283
26284 (mc68kcpu)->n_flag = NFLAG_32(res);
26285 (mc68kcpu)->not_z_flag = res;
26286 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26287 }
26288
26289
26290 static void m68k_op_roxl_8_r(m68000_base_device* mc68kcpu)
26291 {
26292 uint32_t* r_dst = &DY(mc68kcpu);
26293 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
26294
26295
26296 if(orig_shift != 0)
26297 {
26298 uint32_t shift = orig_shift % 9;
26299 uint32_t src = MASK_OUT_ABOVE_8(*r_dst);
26300 uint32_t res = ROL_9(src | (XFLAG_AS_1(mc68kcpu) << 8), shift);
26301
26302 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26303
26304 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res;
26305 res = MASK_OUT_ABOVE_8(res);
26306
26307 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
26308 (mc68kcpu)->n_flag = NFLAG_8(res);
26309 (mc68kcpu)->not_z_flag = res;
26310 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26311 return;
26312 }
26313
26314 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag;
26315 (mc68kcpu)->n_flag = NFLAG_8(*r_dst);
26316 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(*r_dst);
26317 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26318 }
26319
26320
26321 static void m68k_op_roxl_16_r(m68000_base_device* mc68kcpu)
26322 {
26323 uint32_t* r_dst = &DY(mc68kcpu);
26324 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
26325
26326 if(orig_shift != 0)
26327 {
26328 uint32_t shift = orig_shift % 17;
26329 uint32_t src = MASK_OUT_ABOVE_16(*r_dst);
26330 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), shift);
26331
26332 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26333
26334 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26335 res = MASK_OUT_ABOVE_16(res);
26336
26337 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
26338 (mc68kcpu)->n_flag = NFLAG_16(res);
26339 (mc68kcpu)->not_z_flag = res;
26340 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26341 return;
26342 }
26343
26344 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag;
26345 (mc68kcpu)->n_flag = NFLAG_16(*r_dst);
26346 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(*r_dst);
26347 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26348 }
26349
26350
26351 static void m68k_op_roxl_32_r(m68000_base_device* mc68kcpu)
26352 {
26353 uint32_t* r_dst = &DY(mc68kcpu);
26354 uint32_t orig_shift = DX(mc68kcpu) & 0x3f;
26355
26356 if(orig_shift != 0)
26357 {
26358 uint32_t shift = orig_shift % 33;
26359 uint64_t src = *r_dst;
26360 uint64_t res = src | (((uint64_t)XFLAG_AS_1(mc68kcpu)) << 32);
26361
26362 res = ROL_33_64(res, shift);
26363
26364 (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider;
26365
26366 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 24;
26367 res = MASK_OUT_ABOVE_32(res);
26368
26369 *r_dst = res;
26370 (mc68kcpu)->n_flag = NFLAG_32(res);
26371 (mc68kcpu)->not_z_flag = res;
26372 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26373 return;
26374 }
26375
26376 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag;
26377 (mc68kcpu)->n_flag = NFLAG_32(*r_dst);
26378 (mc68kcpu)->not_z_flag = *r_dst;
26379 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26380 }
26381
26382
26383 static void m68k_op_roxl_16_ai(m68000_base_device* mc68kcpu)
26384 {
26385 uint32_t ea = EA_AY_AI_16(mc68kcpu);
26386 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26387 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26388
26389 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26390 res = MASK_OUT_ABOVE_16(res);
26391
26392 m68ki_write_16((mc68kcpu), ea, res);
26393
26394 (mc68kcpu)->n_flag = NFLAG_16(res);
26395 (mc68kcpu)->not_z_flag = res;
26396 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26397 }
26398
26399
26400 static void m68k_op_roxl_16_pi(m68000_base_device* mc68kcpu)
26401 {
26402 uint32_t ea = EA_AY_PI_16(mc68kcpu);
26403 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26404 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26405
26406 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26407 res = MASK_OUT_ABOVE_16(res);
26408
26409 m68ki_write_16((mc68kcpu), ea, res);
26410
26411 (mc68kcpu)->n_flag = NFLAG_16(res);
26412 (mc68kcpu)->not_z_flag = res;
26413 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26414 }
26415
26416
26417 static void m68k_op_roxl_16_pd(m68000_base_device* mc68kcpu)
26418 {
26419 uint32_t ea = EA_AY_PD_16(mc68kcpu);
26420 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26421 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26422
26423 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26424 res = MASK_OUT_ABOVE_16(res);
26425
26426 m68ki_write_16((mc68kcpu), ea, res);
26427
26428 (mc68kcpu)->n_flag = NFLAG_16(res);
26429 (mc68kcpu)->not_z_flag = res;
26430 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26431 }
26432
26433
26434 static void m68k_op_roxl_16_di(m68000_base_device* mc68kcpu)
26435 {
26436 uint32_t ea = EA_AY_DI_16(mc68kcpu);
26437 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26438 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26439
26440 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26441 res = MASK_OUT_ABOVE_16(res);
26442
26443 m68ki_write_16((mc68kcpu), ea, res);
26444
26445 (mc68kcpu)->n_flag = NFLAG_16(res);
26446 (mc68kcpu)->not_z_flag = res;
26447 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26448 }
26449
26450
26451 static void m68k_op_roxl_16_ix(m68000_base_device* mc68kcpu)
26452 {
26453 uint32_t ea = EA_AY_IX_16(mc68kcpu);
26454 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26455 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26456
26457 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26458 res = MASK_OUT_ABOVE_16(res);
26459
26460 m68ki_write_16((mc68kcpu), ea, res);
26461
26462 (mc68kcpu)->n_flag = NFLAG_16(res);
26463 (mc68kcpu)->not_z_flag = res;
26464 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26465 }
26466
26467
26468 static void m68k_op_roxl_16_aw(m68000_base_device* mc68kcpu)
26469 {
26470 uint32_t ea = EA_AW_16(mc68kcpu);
26471 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26472 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26473
26474 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26475 res = MASK_OUT_ABOVE_16(res);
26476
26477 m68ki_write_16((mc68kcpu), ea, res);
26478
26479 (mc68kcpu)->n_flag = NFLAG_16(res);
26480 (mc68kcpu)->not_z_flag = res;
26481 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26482 }
26483
26484
26485 static void m68k_op_roxl_16_al(m68000_base_device* mc68kcpu)
26486 {
26487 uint32_t ea = EA_AL_16(mc68kcpu);
26488 uint32_t src = m68ki_read_16((mc68kcpu), ea);
26489 uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1);
26490
26491 (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8;
26492 res = MASK_OUT_ABOVE_16(res);
26493
26494 m68ki_write_16((mc68kcpu), ea, res);
26495
26496 (mc68kcpu)->n_flag = NFLAG_16(res);
26497 (mc68kcpu)->not_z_flag = res;
26498 (mc68kcpu)->v_flag = VFLAG_CLEAR;
26499 }
26500
26501
26502 static void m68k_op_rtd_32(m68000_base_device* mc68kcpu)
26503 {
26504 if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type))
26505 {
26506 uint32_t new_pc = m68ki_pull_32(mc68kcpu);
26507
26508 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
26509 REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + MAKE_INT_16(OPER_I_16(mc68kcpu)));
26510 m68ki_jump((mc68kcpu), new_pc);
26511 return;
26512 }
26513 m68ki_exception_illegal(mc68kcpu);
26514 }
26515
26516
26517 static void m68k_op_rte_32(m68000_base_device* mc68kcpu)
26518 {
26519 if((mc68kcpu)->s_flag)
26520 {
26521 uint32_t new_sr;
26522 uint32_t new_pc;
26523 uint32_t format_word;
26524
26525 /* if (!(mc68kcpu)->rte_instr_callback.isnull())
26526 ((mc68kcpu)->rte_instr_callback)(1);*/
26527 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
26528
26529 if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type))
26530 {
26531 new_sr = m68ki_pull_16(mc68kcpu);
26532 new_pc = m68ki_pull_32(mc68kcpu);
26533 m68ki_jump((mc68kcpu), new_pc);
26534 m68ki_set_sr((mc68kcpu), new_sr);
26535
26536 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26537 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26538
26539 return;
26540 }
26541
26542 if(CPU_TYPE_IS_010((mc68kcpu)->cpu_type))
26543 {
26544 format_word = m68ki_read_16((mc68kcpu), REG_A(mc68kcpu)[7]+6) >> 12;
26545 if(format_word == 0)
26546 {
26547 new_sr = m68ki_pull_16(mc68kcpu);
26548 new_pc = m68ki_pull_32(mc68kcpu);
26549 m68ki_fake_pull_16(mc68kcpu); /* format word */
26550 m68ki_jump((mc68kcpu), new_pc);
26551 m68ki_set_sr((mc68kcpu), new_sr);
26552 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26553 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26554 return;
26555 }
26556 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26557 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26558 /* Not handling bus fault (9) */
26559 m68ki_exception_format_error(mc68kcpu);
26560 return;
26561 }
26562
26563 /* Otherwise it's 020 */
26564 rte_loop:
26565 format_word = m68ki_read_16((mc68kcpu), REG_A(mc68kcpu)[7]+6) >> 12;
26566 switch(format_word)
26567 {
26568 case 0: /* Normal */
26569 new_sr = m68ki_pull_16(mc68kcpu);
26570 new_pc = m68ki_pull_32(mc68kcpu);
26571 m68ki_fake_pull_16(mc68kcpu); /* format word */
26572 m68ki_jump((mc68kcpu), new_pc);
26573 m68ki_set_sr((mc68kcpu), new_sr);
26574 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26575 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26576 return;
26577 case 1: /* Throwaway */
26578 new_sr = m68ki_pull_16(mc68kcpu);
26579 m68ki_fake_pull_32(mc68kcpu); /* program counter */
26580 m68ki_fake_pull_16(mc68kcpu); /* format word */
26581 m68ki_set_sr_noint((mc68kcpu), new_sr);
26582 goto rte_loop;
26583 case 2: /* Trap */
26584 new_sr = m68ki_pull_16(mc68kcpu);
26585 new_pc = m68ki_pull_32(mc68kcpu);
26586 m68ki_fake_pull_16(mc68kcpu); /* format word */
26587 m68ki_fake_pull_32(mc68kcpu); /* address */
26588 m68ki_jump((mc68kcpu), new_pc);
26589 m68ki_set_sr((mc68kcpu), new_sr);
26590 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26591 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26592 return;
26593 case 7: /* 68040 access error */
26594 new_sr = m68ki_pull_16(mc68kcpu);
26595 new_pc = m68ki_pull_32(mc68kcpu);
26596 m68ki_fake_pull_16(mc68kcpu); /* $06: format word */
26597 m68ki_fake_pull_32(mc68kcpu); /* $08: effective address */
26598 m68ki_fake_pull_16(mc68kcpu); /* $0c: special status word */
26599 m68ki_fake_pull_16(mc68kcpu); /* $0e: wb3s */
26600 m68ki_fake_pull_16(mc68kcpu); /* $10: wb2s */
26601 m68ki_fake_pull_16(mc68kcpu); /* $12: wb1s */
26602 m68ki_fake_pull_32(mc68kcpu); /* $14: data fault address */
26603 m68ki_fake_pull_32(mc68kcpu); /* $18: wb3a */
26604 m68ki_fake_pull_32(mc68kcpu); /* $1c: wb3d */
26605 m68ki_fake_pull_32(mc68kcpu); /* $20: wb2a */
26606 m68ki_fake_pull_32(mc68kcpu); /* $24: wb2d */
26607 m68ki_fake_pull_32(mc68kcpu); /* $28: wb1a */
26608 m68ki_fake_pull_32(mc68kcpu); /* $2c: wb1d/pd0 */
26609 m68ki_fake_pull_32(mc68kcpu); /* $30: pd1 */
26610 m68ki_fake_pull_32(mc68kcpu); /* $34: pd2 */
26611 m68ki_fake_pull_32(mc68kcpu); /* $38: pd3 */
26612 m68ki_jump((mc68kcpu), new_pc);
26613 m68ki_set_sr((mc68kcpu), new_sr);
26614 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26615 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26616 return;
26617
26618 case 0x0a: /* Bus Error at instruction boundary */
26619 new_sr = m68ki_pull_16(mc68kcpu);
26620 new_pc = m68ki_pull_32(mc68kcpu);
26621 m68ki_fake_pull_16(mc68kcpu); /* $06: format word */
26622 m68ki_fake_pull_16(mc68kcpu); /* $08: internal register */
26623 m68ki_fake_pull_16(mc68kcpu); /* $0a: special status word */
26624 m68ki_fake_pull_16(mc68kcpu); /* $0c: instruction pipe stage c */
26625 m68ki_fake_pull_16(mc68kcpu); /* $0e: instruction pipe stage b */
26626 m68ki_fake_pull_32(mc68kcpu); /* $10: data fault address */
26627 m68ki_fake_pull_32(mc68kcpu); /* $14: internal registers */
26628 m68ki_fake_pull_32(mc68kcpu); /* $18: data output buffer */
26629 m68ki_fake_pull_32(mc68kcpu); /* $1c: internal registers */
26630
26631 m68ki_jump((mc68kcpu), new_pc);
26632 m68ki_set_sr((mc68kcpu), new_sr);
26633 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26634 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26635 return;
26636 case 0x0b: /* Bus Error - Instruction Execution in Progress */
26637 new_sr = m68ki_pull_16(mc68kcpu);
26638 new_pc = m68ki_pull_32(mc68kcpu);
26639 m68ki_fake_pull_16(mc68kcpu); /* $06: format word */
26640 m68ki_fake_pull_16(mc68kcpu); /* $08: internal register */
26641 m68ki_fake_pull_16(mc68kcpu); /* $0a: special status word */
26642 m68ki_fake_pull_16(mc68kcpu); /* $0c: instruction pipe stage c */
26643 m68ki_fake_pull_16(mc68kcpu); /* $0e: instruction pipe stage b */
26644 m68ki_fake_pull_32(mc68kcpu); /* $10: data fault address */
26645 m68ki_fake_pull_32(mc68kcpu); /* $14: internal registers */
26646 m68ki_fake_pull_32(mc68kcpu); /* $18: data output buffer */
26647 m68ki_fake_pull_32(mc68kcpu); /* $1c: internal registers */
26648 m68ki_fake_pull_32(mc68kcpu); /* $20: */
26649 m68ki_fake_pull_32(mc68kcpu); /* $24: stage B address */
26650 m68ki_fake_pull_32(mc68kcpu); /* $28: */
26651 m68ki_fake_pull_32(mc68kcpu); /* $2c: data input buffer */
26652 m68ki_fake_pull_32(mc68kcpu); /* $30: */
26653 m68ki_fake_pull_16(mc68kcpu); /* $34: */
26654 m68ki_fake_pull_16(mc68kcpu); /* $36: version #, internal information */
26655 m68ki_fake_pull_32(mc68kcpu); /* $38: */
26656 m68ki_fake_pull_32(mc68kcpu); /* $3c: */
26657 m68ki_fake_pull_32(mc68kcpu); /* $40: */
26658 m68ki_fake_pull_32(mc68kcpu); /* $44: */
26659 m68ki_fake_pull_32(mc68kcpu); /* $48: */
26660 m68ki_fake_pull_32(mc68kcpu); /* $4c: */
26661 m68ki_fake_pull_32(mc68kcpu); /* $50: */
26662 m68ki_fake_pull_32(mc68kcpu); /* $54: */
26663 m68ki_fake_pull_32(mc68kcpu); /* $58: */
26664
26665 m68ki_jump((mc68kcpu), new_pc);
26666 m68ki_set_sr((mc68kcpu), new_sr);
26667 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26668 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26669 return;
26670 }
26671 /* Not handling long or short bus fault */
26672 (mc68kcpu)->instr_mode = INSTRUCTION_YES;
26673 (mc68kcpu)->run_mode = RUN_MODE_NORMAL;
26674 m68ki_exception_format_error(mc68kcpu);
26675 return;
26676 }
26677 m68ki_exception_privilege_violation(mc68kcpu);
26678 }
26679
26680
26681 static void m68k_op_rtm_32(m68000_base_device* mc68kcpu)
26682 {
26683 /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type))
26684 {
26685 m68ki_trace_t0(mc68kcpu);
26686 mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (rtm)\n",
26687 (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
26688 return;
26689 }*/
26690 m68ki_exception_illegal(mc68kcpu);
26691 }
26692
26693
26694 static void m68k_op_rtr_32(m68000_base_device* mc68kcpu)
26695 {
26696 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
26697 m68ki_set_ccr((mc68kcpu), m68ki_pull_16(mc68kcpu));
26698 m68ki_jump((mc68kcpu), m68ki_pull_32(mc68kcpu));
26699 }
26700
26701
26702 static void m68k_op_rts_32(m68000_base_device* mc68kcpu)
26703 {
26704 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
26705 m68ki_jump((mc68kcpu), m68ki_pull_32(mc68kcpu));
26706 }
26707
26708
26709 static void m68k_op_sbcd_8_rr(m68000_base_device* mc68kcpu)
26710 {
26711 uint32_t* r_dst = &DX(mc68kcpu);
26712 uint32_t src = DY(mc68kcpu);
26713 uint32_t dst = *r_dst;
26714 uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu);
26715
26716 // (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
26717 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to assume cleared. */
26718
26719 if(res > 9)
26720 res -= 6;
26721 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
26722 if(res > 0x99)
26723 {
26724 res += 0xa0;
26725 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET;
26726 (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
26727 }
26728 else
26729 (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0;
26730
26731 res = MASK_OUT_ABOVE_8(res);
26732
26733 // (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
26734 // (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
26735 (mc68kcpu)->not_z_flag |= res;
26736
26737 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
26738 }
26739
26740
26741 static void m68k_op_sbcd_8_mm_ax7(m68000_base_device* mc68kcpu)
26742 {
26743 uint32_t src = OPER_AY_PD_8(mc68kcpu);
26744 uint32_t ea = EA_A7_PD_8(mc68kcpu);
26745 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
26746 uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu);
26747
26748 // (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
26749 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */
26750
26751 if(res > 9)
26752 res -= 6;
26753 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
26754 if(res > 0x99)
26755 {
26756 res += 0xa0;
26757 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET;
26758 (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
26759 }
26760 else
26761 (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0;
26762
26763 res = MASK_OUT_ABOVE_8(res);
26764
26765 // (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
26766 // (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
26767 (mc68kcpu)->not_z_flag |= res;
26768
26769 m68ki_write_8((mc68kcpu), ea, res);
26770 }
26771
26772
26773 static void m68k_op_sbcd_8_mm_ay7(m68000_base_device* mc68kcpu)
26774 {
26775 uint32_t src = OPER_A7_PD_8(mc68kcpu);
26776 uint32_t ea = EA_AX_PD_8(mc68kcpu);
26777 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
26778 uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu);
26779
26780 // (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
26781 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */
26782
26783 if(res > 9)
26784 res -= 6;
26785 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
26786 if(res > 0x99)
26787 {
26788 res += 0xa0;
26789 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET;
26790 (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
26791 }
26792 else
26793 (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0;
26794
26795 res = MASK_OUT_ABOVE_8(res);
26796
26797 // (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
26798 // (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
26799 (mc68kcpu)->not_z_flag |= res;
26800
26801 m68ki_write_8((mc68kcpu), ea, res);
26802 }
26803
26804
26805 static void m68k_op_sbcd_8_mm_axy7(m68000_base_device* mc68kcpu)
26806 {
26807 uint32_t src = OPER_A7_PD_8(mc68kcpu);
26808 uint32_t ea = EA_A7_PD_8(mc68kcpu);
26809 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
26810 uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu);
26811
26812 // (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
26813 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */
26814
26815 if(res > 9)
26816 res -= 6;
26817 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
26818 if(res > 0x99)
26819 {
26820 res += 0xa0;
26821 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET;
26822 (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
26823 }
26824 else
26825 (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0;
26826
26827 res = MASK_OUT_ABOVE_8(res);
26828
26829 // (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
26830 // (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
26831 (mc68kcpu)->not_z_flag |= res;
26832
26833 m68ki_write_8((mc68kcpu), ea, res);
26834 }
26835
26836
26837 static void m68k_op_sbcd_8_mm(m68000_base_device* mc68kcpu)
26838 {
26839 uint32_t src = OPER_AY_PD_8(mc68kcpu);
26840 uint32_t ea = EA_AX_PD_8(mc68kcpu);
26841 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
26842 uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu);
26843
26844 // (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */
26845 (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */
26846
26847 if(res > 9)
26848 res -= 6;
26849 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
26850 if(res > 0x99)
26851 {
26852 res += 0xa0;
26853 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET;
26854 (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
26855 }
26856 else
26857 (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0;
26858
26859 res = MASK_OUT_ABOVE_8(res);
26860
26861 // (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */
26862 // (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */
26863 (mc68kcpu)->not_z_flag |= res;
26864
26865 m68ki_write_8((mc68kcpu), ea, res);
26866 }
26867
26868
26869 static void m68k_op_st_8_d(m68000_base_device* mc68kcpu)
26870 {
26871 DY(mc68kcpu) |= 0xff;
26872 }
26873
26874
26875 static void m68k_op_st_8_ai(m68000_base_device* mc68kcpu)
26876 {
26877 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), 0xff);
26878 }
26879
26880
26881 static void m68k_op_st_8_pi(m68000_base_device* mc68kcpu)
26882 {
26883 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), 0xff);
26884 }
26885
26886
26887 static void m68k_op_st_8_pi7(m68000_base_device* mc68kcpu)
26888 {
26889 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), 0xff);
26890 }
26891
26892
26893 static void m68k_op_st_8_pd(m68000_base_device* mc68kcpu)
26894 {
26895 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), 0xff);
26896 }
26897
26898
26899 static void m68k_op_st_8_pd7(m68000_base_device* mc68kcpu)
26900 {
26901 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), 0xff);
26902 }
26903
26904
26905 static void m68k_op_st_8_di(m68000_base_device* mc68kcpu)
26906 {
26907 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), 0xff);
26908 }
26909
26910
26911 static void m68k_op_st_8_ix(m68000_base_device* mc68kcpu)
26912 {
26913 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), 0xff);
26914 }
26915
26916
26917 static void m68k_op_st_8_aw(m68000_base_device* mc68kcpu)
26918 {
26919 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), 0xff);
26920 }
26921
26922
26923 static void m68k_op_st_8_al(m68000_base_device* mc68kcpu)
26924 {
26925 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), 0xff);
26926 }
26927
26928
26929 static void m68k_op_sf_8_d(m68000_base_device* mc68kcpu)
26930 {
26931 DY(mc68kcpu) &= 0xffffff00;
26932 }
26933
26934
26935 static void m68k_op_sf_8_ai(m68000_base_device* mc68kcpu)
26936 {
26937 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), 0);
26938 }
26939
26940
26941 static void m68k_op_sf_8_pi(m68000_base_device* mc68kcpu)
26942 {
26943 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), 0);
26944 }
26945
26946
26947 static void m68k_op_sf_8_pi7(m68000_base_device* mc68kcpu)
26948 {
26949 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), 0);
26950 }
26951
26952
26953 static void m68k_op_sf_8_pd(m68000_base_device* mc68kcpu)
26954 {
26955 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), 0);
26956 }
26957
26958
26959 static void m68k_op_sf_8_pd7(m68000_base_device* mc68kcpu)
26960 {
26961 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), 0);
26962 }
26963
26964
26965 static void m68k_op_sf_8_di(m68000_base_device* mc68kcpu)
26966 {
26967 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), 0);
26968 }
26969
26970
26971 static void m68k_op_sf_8_ix(m68000_base_device* mc68kcpu)
26972 {
26973 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), 0);
26974 }
26975
26976
26977 static void m68k_op_sf_8_aw(m68000_base_device* mc68kcpu)
26978 {
26979 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), 0);
26980 }
26981
26982
26983 static void m68k_op_sf_8_al(m68000_base_device* mc68kcpu)
26984 {
26985 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), 0);
26986 }
26987
26988
26989 static void m68k_op_shi_8_d(m68000_base_device* mc68kcpu)
26990 {
26991 if(COND_HI(mc68kcpu))
26992 {
26993 DY(mc68kcpu) |= 0xff;
26994 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
26995 return;
26996 }
26997 DY(mc68kcpu) &= 0xffffff00;
26998 }
26999
27000
27001 static void m68k_op_sls_8_d(m68000_base_device* mc68kcpu)
27002 {
27003 if(COND_LS(mc68kcpu))
27004 {
27005 DY(mc68kcpu) |= 0xff;
27006 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27007 return;
27008 }
27009 DY(mc68kcpu) &= 0xffffff00;
27010 }
27011
27012
27013 static void m68k_op_scc_8_d(m68000_base_device* mc68kcpu)
27014 {
27015 if(COND_CC(mc68kcpu))
27016 {
27017 DY(mc68kcpu) |= 0xff;
27018 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27019 return;
27020 }
27021 DY(mc68kcpu) &= 0xffffff00;
27022 }
27023
27024
27025 static void m68k_op_scs_8_d(m68000_base_device* mc68kcpu)
27026 {
27027 if(COND_CS(mc68kcpu))
27028 {
27029 DY(mc68kcpu) |= 0xff;
27030 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27031 return;
27032 }
27033 DY(mc68kcpu) &= 0xffffff00;
27034 }
27035
27036
27037 static void m68k_op_sne_8_d(m68000_base_device* mc68kcpu)
27038 {
27039 if(COND_NE(mc68kcpu))
27040 {
27041 DY(mc68kcpu) |= 0xff;
27042 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27043 return;
27044 }
27045 DY(mc68kcpu) &= 0xffffff00;
27046 }
27047
27048
27049 static void m68k_op_seq_8_d(m68000_base_device* mc68kcpu)
27050 {
27051 if(COND_EQ(mc68kcpu))
27052 {
27053 DY(mc68kcpu) |= 0xff;
27054 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27055 return;
27056 }
27057 DY(mc68kcpu) &= 0xffffff00;
27058 }
27059
27060
27061 static void m68k_op_svc_8_d(m68000_base_device* mc68kcpu)
27062 {
27063 if(COND_VC(mc68kcpu))
27064 {
27065 DY(mc68kcpu) |= 0xff;
27066 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27067 return;
27068 }
27069 DY(mc68kcpu) &= 0xffffff00;
27070 }
27071
27072
27073 static void m68k_op_svs_8_d(m68000_base_device* mc68kcpu)
27074 {
27075 if(COND_VS(mc68kcpu))
27076 {
27077 DY(mc68kcpu) |= 0xff;
27078 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27079 return;
27080 }
27081 DY(mc68kcpu) &= 0xffffff00;
27082 }
27083
27084
27085 static void m68k_op_spl_8_d(m68000_base_device* mc68kcpu)
27086 {
27087 if(COND_PL(mc68kcpu))
27088 {
27089 DY(mc68kcpu) |= 0xff;
27090 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27091 return;
27092 }
27093 DY(mc68kcpu) &= 0xffffff00;
27094 }
27095
27096
27097 static void m68k_op_smi_8_d(m68000_base_device* mc68kcpu)
27098 {
27099 if(COND_MI(mc68kcpu))
27100 {
27101 DY(mc68kcpu) |= 0xff;
27102 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27103 return;
27104 }
27105 DY(mc68kcpu) &= 0xffffff00;
27106 }
27107
27108
27109 static void m68k_op_sge_8_d(m68000_base_device* mc68kcpu)
27110 {
27111 if(COND_GE(mc68kcpu))
27112 {
27113 DY(mc68kcpu) |= 0xff;
27114 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27115 return;
27116 }
27117 DY(mc68kcpu) &= 0xffffff00;
27118 }
27119
27120
27121 static void m68k_op_slt_8_d(m68000_base_device* mc68kcpu)
27122 {
27123 if(COND_LT(mc68kcpu))
27124 {
27125 DY(mc68kcpu) |= 0xff;
27126 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27127 return;
27128 }
27129 DY(mc68kcpu) &= 0xffffff00;
27130 }
27131
27132
27133 static void m68k_op_sgt_8_d(m68000_base_device* mc68kcpu)
27134 {
27135 if(COND_GT(mc68kcpu))
27136 {
27137 DY(mc68kcpu) |= 0xff;
27138 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27139 return;
27140 }
27141 DY(mc68kcpu) &= 0xffffff00;
27142 }
27143
27144
27145 static void m68k_op_sle_8_d(m68000_base_device* mc68kcpu)
27146 {
27147 if(COND_LE(mc68kcpu))
27148 {
27149 DY(mc68kcpu) |= 0xff;
27150 (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true;
27151 return;
27152 }
27153 DY(mc68kcpu) &= 0xffffff00;
27154 }
27155
27156
27157 static void m68k_op_shi_8_ai(m68000_base_device* mc68kcpu)
27158 {
27159 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27160 }
27161
27162
27163 static void m68k_op_shi_8_pi(m68000_base_device* mc68kcpu)
27164 {
27165 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27166 }
27167
27168
27169 static void m68k_op_shi_8_pi7(m68000_base_device* mc68kcpu)
27170 {
27171 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27172 }
27173
27174
27175 static void m68k_op_shi_8_pd(m68000_base_device* mc68kcpu)
27176 {
27177 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27178 }
27179
27180
27181 static void m68k_op_shi_8_pd7(m68000_base_device* mc68kcpu)
27182 {
27183 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27184 }
27185
27186
27187 static void m68k_op_shi_8_di(m68000_base_device* mc68kcpu)
27188 {
27189 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27190 }
27191
27192
27193 static void m68k_op_shi_8_ix(m68000_base_device* mc68kcpu)
27194 {
27195 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27196 }
27197
27198
27199 static void m68k_op_shi_8_aw(m68000_base_device* mc68kcpu)
27200 {
27201 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27202 }
27203
27204
27205 static void m68k_op_shi_8_al(m68000_base_device* mc68kcpu)
27206 {
27207 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0);
27208 }
27209
27210
27211 static void m68k_op_sls_8_ai(m68000_base_device* mc68kcpu)
27212 {
27213 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27214 }
27215
27216
27217 static void m68k_op_sls_8_pi(m68000_base_device* mc68kcpu)
27218 {
27219 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27220 }
27221
27222
27223 static void m68k_op_sls_8_pi7(m68000_base_device* mc68kcpu)
27224 {
27225 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27226 }
27227
27228
27229 static void m68k_op_sls_8_pd(m68000_base_device* mc68kcpu)
27230 {
27231 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27232 }
27233
27234
27235 static void m68k_op_sls_8_pd7(m68000_base_device* mc68kcpu)
27236 {
27237 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27238 }
27239
27240
27241 static void m68k_op_sls_8_di(m68000_base_device* mc68kcpu)
27242 {
27243 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27244 }
27245
27246
27247 static void m68k_op_sls_8_ix(m68000_base_device* mc68kcpu)
27248 {
27249 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27250 }
27251
27252
27253 static void m68k_op_sls_8_aw(m68000_base_device* mc68kcpu)
27254 {
27255 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27256 }
27257
27258
27259 static void m68k_op_sls_8_al(m68000_base_device* mc68kcpu)
27260 {
27261 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0);
27262 }
27263
27264
27265 static void m68k_op_scc_8_ai(m68000_base_device* mc68kcpu)
27266 {
27267 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27268 }
27269
27270
27271 static void m68k_op_scc_8_pi(m68000_base_device* mc68kcpu)
27272 {
27273 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27274 }
27275
27276
27277 static void m68k_op_scc_8_pi7(m68000_base_device* mc68kcpu)
27278 {
27279 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27280 }
27281
27282
27283 static void m68k_op_scc_8_pd(m68000_base_device* mc68kcpu)
27284 {
27285 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27286 }
27287
27288
27289 static void m68k_op_scc_8_pd7(m68000_base_device* mc68kcpu)
27290 {
27291 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27292 }
27293
27294
27295 static void m68k_op_scc_8_di(m68000_base_device* mc68kcpu)
27296 {
27297 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27298 }
27299
27300
27301 static void m68k_op_scc_8_ix(m68000_base_device* mc68kcpu)
27302 {
27303 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27304 }
27305
27306
27307 static void m68k_op_scc_8_aw(m68000_base_device* mc68kcpu)
27308 {
27309 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27310 }
27311
27312
27313 static void m68k_op_scc_8_al(m68000_base_device* mc68kcpu)
27314 {
27315 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0);
27316 }
27317
27318
27319 static void m68k_op_scs_8_ai(m68000_base_device* mc68kcpu)
27320 {
27321 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27322 }
27323
27324
27325 static void m68k_op_scs_8_pi(m68000_base_device* mc68kcpu)
27326 {
27327 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27328 }
27329
27330
27331 static void m68k_op_scs_8_pi7(m68000_base_device* mc68kcpu)
27332 {
27333 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27334 }
27335
27336
27337 static void m68k_op_scs_8_pd(m68000_base_device* mc68kcpu)
27338 {
27339 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27340 }
27341
27342
27343 static void m68k_op_scs_8_pd7(m68000_base_device* mc68kcpu)
27344 {
27345 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27346 }
27347
27348
27349 static void m68k_op_scs_8_di(m68000_base_device* mc68kcpu)
27350 {
27351 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27352 }
27353
27354
27355 static void m68k_op_scs_8_ix(m68000_base_device* mc68kcpu)
27356 {
27357 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27358 }
27359
27360
27361 static void m68k_op_scs_8_aw(m68000_base_device* mc68kcpu)
27362 {
27363 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27364 }
27365
27366
27367 static void m68k_op_scs_8_al(m68000_base_device* mc68kcpu)
27368 {
27369 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0);
27370 }
27371
27372
27373 static void m68k_op_sne_8_ai(m68000_base_device* mc68kcpu)
27374 {
27375 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27376 }
27377
27378
27379 static void m68k_op_sne_8_pi(m68000_base_device* mc68kcpu)
27380 {
27381 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27382 }
27383
27384
27385 static void m68k_op_sne_8_pi7(m68000_base_device* mc68kcpu)
27386 {
27387 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27388 }
27389
27390
27391 static void m68k_op_sne_8_pd(m68000_base_device* mc68kcpu)
27392 {
27393 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27394 }
27395
27396
27397 static void m68k_op_sne_8_pd7(m68000_base_device* mc68kcpu)
27398 {
27399 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27400 }
27401
27402
27403 static void m68k_op_sne_8_di(m68000_base_device* mc68kcpu)
27404 {
27405 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27406 }
27407
27408
27409 static void m68k_op_sne_8_ix(m68000_base_device* mc68kcpu)
27410 {
27411 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27412 }
27413
27414
27415 static void m68k_op_sne_8_aw(m68000_base_device* mc68kcpu)
27416 {
27417 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27418 }
27419
27420
27421 static void m68k_op_sne_8_al(m68000_base_device* mc68kcpu)
27422 {
27423 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0);
27424 }
27425
27426
27427 static void m68k_op_seq_8_ai(m68000_base_device* mc68kcpu)
27428 {
27429 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27430 }
27431
27432
27433 static void m68k_op_seq_8_pi(m68000_base_device* mc68kcpu)
27434 {
27435 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27436 }
27437
27438
27439 static void m68k_op_seq_8_pi7(m68000_base_device* mc68kcpu)
27440 {
27441 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27442 }
27443
27444
27445 static void m68k_op_seq_8_pd(m68000_base_device* mc68kcpu)
27446 {
27447 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27448 }
27449
27450
27451 static void m68k_op_seq_8_pd7(m68000_base_device* mc68kcpu)
27452 {
27453 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27454 }
27455
27456
27457 static void m68k_op_seq_8_di(m68000_base_device* mc68kcpu)
27458 {
27459 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27460 }
27461
27462
27463 static void m68k_op_seq_8_ix(m68000_base_device* mc68kcpu)
27464 {
27465 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27466 }
27467
27468
27469 static void m68k_op_seq_8_aw(m68000_base_device* mc68kcpu)
27470 {
27471 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27472 }
27473
27474
27475 static void m68k_op_seq_8_al(m68000_base_device* mc68kcpu)
27476 {
27477 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0);
27478 }
27479
27480
27481 static void m68k_op_svc_8_ai(m68000_base_device* mc68kcpu)
27482 {
27483 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27484 }
27485
27486
27487 static void m68k_op_svc_8_pi(m68000_base_device* mc68kcpu)
27488 {
27489 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27490 }
27491
27492
27493 static void m68k_op_svc_8_pi7(m68000_base_device* mc68kcpu)
27494 {
27495 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27496 }
27497
27498
27499 static void m68k_op_svc_8_pd(m68000_base_device* mc68kcpu)
27500 {
27501 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27502 }
27503
27504
27505 static void m68k_op_svc_8_pd7(m68000_base_device* mc68kcpu)
27506 {
27507 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27508 }
27509
27510
27511 static void m68k_op_svc_8_di(m68000_base_device* mc68kcpu)
27512 {
27513 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27514 }
27515
27516
27517 static void m68k_op_svc_8_ix(m68000_base_device* mc68kcpu)
27518 {
27519 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27520 }
27521
27522
27523 static void m68k_op_svc_8_aw(m68000_base_device* mc68kcpu)
27524 {
27525 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27526 }
27527
27528
27529 static void m68k_op_svc_8_al(m68000_base_device* mc68kcpu)
27530 {
27531 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0);
27532 }
27533
27534
27535 static void m68k_op_svs_8_ai(m68000_base_device* mc68kcpu)
27536 {
27537 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27538 }
27539
27540
27541 static void m68k_op_svs_8_pi(m68000_base_device* mc68kcpu)
27542 {
27543 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27544 }
27545
27546
27547 static void m68k_op_svs_8_pi7(m68000_base_device* mc68kcpu)
27548 {
27549 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27550 }
27551
27552
27553 static void m68k_op_svs_8_pd(m68000_base_device* mc68kcpu)
27554 {
27555 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27556 }
27557
27558
27559 static void m68k_op_svs_8_pd7(m68000_base_device* mc68kcpu)
27560 {
27561 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27562 }
27563
27564
27565 static void m68k_op_svs_8_di(m68000_base_device* mc68kcpu)
27566 {
27567 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27568 }
27569
27570
27571 static void m68k_op_svs_8_ix(m68000_base_device* mc68kcpu)
27572 {
27573 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27574 }
27575
27576
27577 static void m68k_op_svs_8_aw(m68000_base_device* mc68kcpu)
27578 {
27579 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27580 }
27581
27582
27583 static void m68k_op_svs_8_al(m68000_base_device* mc68kcpu)
27584 {
27585 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0);
27586 }
27587
27588
27589 static void m68k_op_spl_8_ai(m68000_base_device* mc68kcpu)
27590 {
27591 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27592 }
27593
27594
27595 static void m68k_op_spl_8_pi(m68000_base_device* mc68kcpu)
27596 {
27597 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27598 }
27599
27600
27601 static void m68k_op_spl_8_pi7(m68000_base_device* mc68kcpu)
27602 {
27603 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27604 }
27605
27606
27607 static void m68k_op_spl_8_pd(m68000_base_device* mc68kcpu)
27608 {
27609 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27610 }
27611
27612
27613 static void m68k_op_spl_8_pd7(m68000_base_device* mc68kcpu)
27614 {
27615 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27616 }
27617
27618
27619 static void m68k_op_spl_8_di(m68000_base_device* mc68kcpu)
27620 {
27621 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27622 }
27623
27624
27625 static void m68k_op_spl_8_ix(m68000_base_device* mc68kcpu)
27626 {
27627 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27628 }
27629
27630
27631 static void m68k_op_spl_8_aw(m68000_base_device* mc68kcpu)
27632 {
27633 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27634 }
27635
27636
27637 static void m68k_op_spl_8_al(m68000_base_device* mc68kcpu)
27638 {
27639 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0);
27640 }
27641
27642
27643 static void m68k_op_smi_8_ai(m68000_base_device* mc68kcpu)
27644 {
27645 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27646 }
27647
27648
27649 static void m68k_op_smi_8_pi(m68000_base_device* mc68kcpu)
27650 {
27651 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27652 }
27653
27654
27655 static void m68k_op_smi_8_pi7(m68000_base_device* mc68kcpu)
27656 {
27657 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27658 }
27659
27660
27661 static void m68k_op_smi_8_pd(m68000_base_device* mc68kcpu)
27662 {
27663 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27664 }
27665
27666
27667 static void m68k_op_smi_8_pd7(m68000_base_device* mc68kcpu)
27668 {
27669 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27670 }
27671
27672
27673 static void m68k_op_smi_8_di(m68000_base_device* mc68kcpu)
27674 {
27675 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27676 }
27677
27678
27679 static void m68k_op_smi_8_ix(m68000_base_device* mc68kcpu)
27680 {
27681 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27682 }
27683
27684
27685 static void m68k_op_smi_8_aw(m68000_base_device* mc68kcpu)
27686 {
27687 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27688 }
27689
27690
27691 static void m68k_op_smi_8_al(m68000_base_device* mc68kcpu)
27692 {
27693 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0);
27694 }
27695
27696
27697 static void m68k_op_sge_8_ai(m68000_base_device* mc68kcpu)
27698 {
27699 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27700 }
27701
27702
27703 static void m68k_op_sge_8_pi(m68000_base_device* mc68kcpu)
27704 {
27705 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27706 }
27707
27708
27709 static void m68k_op_sge_8_pi7(m68000_base_device* mc68kcpu)
27710 {
27711 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27712 }
27713
27714
27715 static void m68k_op_sge_8_pd(m68000_base_device* mc68kcpu)
27716 {
27717 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27718 }
27719
27720
27721 static void m68k_op_sge_8_pd7(m68000_base_device* mc68kcpu)
27722 {
27723 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27724 }
27725
27726
27727 static void m68k_op_sge_8_di(m68000_base_device* mc68kcpu)
27728 {
27729 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27730 }
27731
27732
27733 static void m68k_op_sge_8_ix(m68000_base_device* mc68kcpu)
27734 {
27735 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27736 }
27737
27738
27739 static void m68k_op_sge_8_aw(m68000_base_device* mc68kcpu)
27740 {
27741 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27742 }
27743
27744
27745 static void m68k_op_sge_8_al(m68000_base_device* mc68kcpu)
27746 {
27747 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0);
27748 }
27749
27750
27751 static void m68k_op_slt_8_ai(m68000_base_device* mc68kcpu)
27752 {
27753 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27754 }
27755
27756
27757 static void m68k_op_slt_8_pi(m68000_base_device* mc68kcpu)
27758 {
27759 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27760 }
27761
27762
27763 static void m68k_op_slt_8_pi7(m68000_base_device* mc68kcpu)
27764 {
27765 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27766 }
27767
27768
27769 static void m68k_op_slt_8_pd(m68000_base_device* mc68kcpu)
27770 {
27771 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27772 }
27773
27774
27775 static void m68k_op_slt_8_pd7(m68000_base_device* mc68kcpu)
27776 {
27777 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27778 }
27779
27780
27781 static void m68k_op_slt_8_di(m68000_base_device* mc68kcpu)
27782 {
27783 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27784 }
27785
27786
27787 static void m68k_op_slt_8_ix(m68000_base_device* mc68kcpu)
27788 {
27789 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27790 }
27791
27792
27793 static void m68k_op_slt_8_aw(m68000_base_device* mc68kcpu)
27794 {
27795 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27796 }
27797
27798
27799 static void m68k_op_slt_8_al(m68000_base_device* mc68kcpu)
27800 {
27801 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0);
27802 }
27803
27804
27805 static void m68k_op_sgt_8_ai(m68000_base_device* mc68kcpu)
27806 {
27807 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27808 }
27809
27810
27811 static void m68k_op_sgt_8_pi(m68000_base_device* mc68kcpu)
27812 {
27813 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27814 }
27815
27816
27817 static void m68k_op_sgt_8_pi7(m68000_base_device* mc68kcpu)
27818 {
27819 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27820 }
27821
27822
27823 static void m68k_op_sgt_8_pd(m68000_base_device* mc68kcpu)
27824 {
27825 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27826 }
27827
27828
27829 static void m68k_op_sgt_8_pd7(m68000_base_device* mc68kcpu)
27830 {
27831 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27832 }
27833
27834
27835 static void m68k_op_sgt_8_di(m68000_base_device* mc68kcpu)
27836 {
27837 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27838 }
27839
27840
27841 static void m68k_op_sgt_8_ix(m68000_base_device* mc68kcpu)
27842 {
27843 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27844 }
27845
27846
27847 static void m68k_op_sgt_8_aw(m68000_base_device* mc68kcpu)
27848 {
27849 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27850 }
27851
27852
27853 static void m68k_op_sgt_8_al(m68000_base_device* mc68kcpu)
27854 {
27855 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0);
27856 }
27857
27858
27859 static void m68k_op_sle_8_ai(m68000_base_device* mc68kcpu)
27860 {
27861 m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27862 }
27863
27864
27865 static void m68k_op_sle_8_pi(m68000_base_device* mc68kcpu)
27866 {
27867 m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27868 }
27869
27870
27871 static void m68k_op_sle_8_pi7(m68000_base_device* mc68kcpu)
27872 {
27873 m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27874 }
27875
27876
27877 static void m68k_op_sle_8_pd(m68000_base_device* mc68kcpu)
27878 {
27879 m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27880 }
27881
27882
27883 static void m68k_op_sle_8_pd7(m68000_base_device* mc68kcpu)
27884 {
27885 m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27886 }
27887
27888
27889 static void m68k_op_sle_8_di(m68000_base_device* mc68kcpu)
27890 {
27891 m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27892 }
27893
27894
27895 static void m68k_op_sle_8_ix(m68000_base_device* mc68kcpu)
27896 {
27897 m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27898 }
27899
27900
27901 static void m68k_op_sle_8_aw(m68000_base_device* mc68kcpu)
27902 {
27903 m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27904 }
27905
27906
27907 static void m68k_op_sle_8_al(m68000_base_device* mc68kcpu)
27908 {
27909 m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0);
27910 }
27911
27912
27913 static void m68k_op_stop(m68000_base_device* mc68kcpu)
27914 {
27915 if((mc68kcpu)->s_flag)
27916 {
27917 uint32_t new_sr = OPER_I_16(mc68kcpu);
27918 m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */
27919 (mc68kcpu)->stopped |= STOP_LEVEL_STOP;
27920 m68ki_set_sr((mc68kcpu), new_sr);
27921 (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle;
27922 return;
27923 }
27924 m68ki_exception_privilege_violation(mc68kcpu);
27925 }
27926
27927
27928 static void m68k_op_sub_8_er_d(m68000_base_device* mc68kcpu)
27929 {
27930 uint32_t* r_dst = &DX(mc68kcpu);
27931 uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu));
27932 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
27933 uint32_t res = dst - src;
27934
27935 (mc68kcpu)->n_flag = NFLAG_8(res);
27936 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
27937 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
27938 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
27939
27940 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
27941 }
27942
27943
27944 static void m68k_op_sub_8_er_ai(m68000_base_device* mc68kcpu)
27945 {
27946 uint32_t* r_dst = &DX(mc68kcpu);
27947 uint32_t src = OPER_AY_AI_8(mc68kcpu);
27948 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
27949 uint32_t res = dst - src;
27950
27951 (mc68kcpu)->n_flag = NFLAG_8(res);
27952 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
27953 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
27954 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
27955
27956 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
27957 }
27958
27959
27960 static void m68k_op_sub_8_er_pi(m68000_base_device* mc68kcpu)
27961 {
27962 uint32_t* r_dst = &DX(mc68kcpu);
27963 uint32_t src = OPER_AY_PI_8(mc68kcpu);
27964 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
27965 uint32_t res = dst - src;
27966
27967 (mc68kcpu)->n_flag = NFLAG_8(res);
27968 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
27969 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
27970 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
27971
27972 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
27973 }
27974
27975
27976 static void m68k_op_sub_8_er_pi7(m68000_base_device* mc68kcpu)
27977 {
27978 uint32_t* r_dst = &DX(mc68kcpu);
27979 uint32_t src = OPER_A7_PI_8(mc68kcpu);
27980 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
27981 uint32_t res = dst - src;
27982
27983 (mc68kcpu)->n_flag = NFLAG_8(res);
27984 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
27985 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
27986 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
27987
27988 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
27989 }
27990
27991
27992 static void m68k_op_sub_8_er_pd(m68000_base_device* mc68kcpu)
27993 {
27994 uint32_t* r_dst = &DX(mc68kcpu);
27995 uint32_t src = OPER_AY_PD_8(mc68kcpu);
27996 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
27997 uint32_t res = dst - src;
27998
27999 (mc68kcpu)->n_flag = NFLAG_8(res);
28000 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28001 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28002 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28003
28004 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28005 }
28006
28007
28008 static void m68k_op_sub_8_er_pd7(m68000_base_device* mc68kcpu)
28009 {
28010 uint32_t* r_dst = &DX(mc68kcpu);
28011 uint32_t src = OPER_A7_PD_8(mc68kcpu);
28012 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
28013 uint32_t res = dst - src;
28014
28015 (mc68kcpu)->n_flag = NFLAG_8(res);
28016 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28017 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28018 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28019
28020 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28021 }
28022
28023
28024 static void m68k_op_sub_8_er_di(m68000_base_device* mc68kcpu)
28025 {
28026 uint32_t* r_dst = &DX(mc68kcpu);
28027 uint32_t src = OPER_AY_DI_8(mc68kcpu);
28028 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
28029 uint32_t res = dst - src;
28030
28031 (mc68kcpu)->n_flag = NFLAG_8(res);
28032 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28033 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28034 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28035
28036 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28037 }
28038
28039
28040 static void m68k_op_sub_8_er_ix(m68000_base_device* mc68kcpu)
28041 {
28042 uint32_t* r_dst = &DX(mc68kcpu);
28043 uint32_t src = OPER_AY_IX_8(mc68kcpu);
28044 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
28045 uint32_t res = dst - src;
28046
28047 (mc68kcpu)->n_flag = NFLAG_8(res);
28048 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28049 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28050 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28051
28052 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28053 }
28054
28055
28056 static void m68k_op_sub_8_er_aw(m68000_base_device* mc68kcpu)
28057 {
28058 uint32_t* r_dst = &DX(mc68kcpu);
28059 uint32_t src = OPER_AW_8(mc68kcpu);
28060 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
28061 uint32_t res = dst - src;
28062
28063 (mc68kcpu)->n_flag = NFLAG_8(res);
28064 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28065 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28066 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28067
28068 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28069 }
28070
28071
28072 static void m68k_op_sub_8_er_al(m68000_base_device* mc68kcpu)
28073 {
28074 uint32_t* r_dst = &DX(mc68kcpu);
28075 uint32_t src = OPER_AL_8(mc68kcpu);
28076 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
28077 uint32_t res = dst - src;
28078
28079 (mc68kcpu)->n_flag = NFLAG_8(res);
28080 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28081 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28082 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28083
28084 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28085 }
28086
28087
28088 static void m68k_op_sub_8_er_pcdi(m68000_base_device* mc68kcpu)
28089 {
28090 uint32_t* r_dst = &DX(mc68kcpu);
28091 uint32_t src = OPER_PCDI_8(mc68kcpu);
28092 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
28093 uint32_t res = dst - src;
28094
28095 (mc68kcpu)->n_flag = NFLAG_8(res);
28096 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28097 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28098 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28099
28100 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28101 }
28102
28103
28104 static void m68k_op_sub_8_er_pcix(m68000_base_device* mc68kcpu)
28105 {
28106 uint32_t* r_dst = &DX(mc68kcpu);
28107 uint32_t src = OPER_PCIX_8(mc68kcpu);
28108 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
28109 uint32_t res = dst - src;
28110
28111 (mc68kcpu)->n_flag = NFLAG_8(res);
28112 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28113 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28114 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28115
28116 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28117 }
28118
28119
28120 static void m68k_op_sub_8_er_i(m68000_base_device* mc68kcpu)
28121 {
28122 uint32_t* r_dst = &DX(mc68kcpu);
28123 uint32_t src = OPER_I_8(mc68kcpu);
28124 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
28125 uint32_t res = dst - src;
28126
28127 (mc68kcpu)->n_flag = NFLAG_8(res);
28128 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28129 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28130 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28131
28132 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
28133 }
28134
28135
28136 static void m68k_op_sub_16_er_d(m68000_base_device* mc68kcpu)
28137 {
28138 uint32_t* r_dst = &DX(mc68kcpu);
28139 uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu));
28140 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28141 uint32_t res = dst - src;
28142
28143 (mc68kcpu)->n_flag = NFLAG_16(res);
28144 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28145 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28146 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28147
28148 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28149 }
28150
28151
28152 static void m68k_op_sub_16_er_a(m68000_base_device* mc68kcpu)
28153 {
28154 uint32_t* r_dst = &DX(mc68kcpu);
28155 uint32_t src = MASK_OUT_ABOVE_16(AY(mc68kcpu));
28156 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28157 uint32_t res = dst - src;
28158
28159 (mc68kcpu)->n_flag = NFLAG_16(res);
28160 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28161 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28162 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28163
28164 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28165 }
28166
28167
28168 static void m68k_op_sub_16_er_ai(m68000_base_device* mc68kcpu)
28169 {
28170 uint32_t* r_dst = &DX(mc68kcpu);
28171 uint32_t src = OPER_AY_AI_16(mc68kcpu);
28172 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28173 uint32_t res = dst - src;
28174
28175 (mc68kcpu)->n_flag = NFLAG_16(res);
28176 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28177 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28178 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28179
28180 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28181 }
28182
28183
28184 static void m68k_op_sub_16_er_pi(m68000_base_device* mc68kcpu)
28185 {
28186 uint32_t* r_dst = &DX(mc68kcpu);
28187 uint32_t src = OPER_AY_PI_16(mc68kcpu);
28188 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28189 uint32_t res = dst - src;
28190
28191 (mc68kcpu)->n_flag = NFLAG_16(res);
28192 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28193 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28194 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28195
28196 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28197 }
28198
28199
28200 static void m68k_op_sub_16_er_pd(m68000_base_device* mc68kcpu)
28201 {
28202 uint32_t* r_dst = &DX(mc68kcpu);
28203 uint32_t src = OPER_AY_PD_16(mc68kcpu);
28204 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28205 uint32_t res = dst - src;
28206
28207 (mc68kcpu)->n_flag = NFLAG_16(res);
28208 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28209 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28210 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28211
28212 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28213 }
28214
28215
28216 static void m68k_op_sub_16_er_di(m68000_base_device* mc68kcpu)
28217 {
28218 uint32_t* r_dst = &DX(mc68kcpu);
28219 uint32_t src = OPER_AY_DI_16(mc68kcpu);
28220 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28221 uint32_t res = dst - src;
28222
28223 (mc68kcpu)->n_flag = NFLAG_16(res);
28224 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28225 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28226 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28227
28228 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28229 }
28230
28231
28232 static void m68k_op_sub_16_er_ix(m68000_base_device* mc68kcpu)
28233 {
28234 uint32_t* r_dst = &DX(mc68kcpu);
28235 uint32_t src = OPER_AY_IX_16(mc68kcpu);
28236 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28237 uint32_t res = dst - src;
28238
28239 (mc68kcpu)->n_flag = NFLAG_16(res);
28240 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28241 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28242 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28243
28244 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28245 }
28246
28247
28248 static void m68k_op_sub_16_er_aw(m68000_base_device* mc68kcpu)
28249 {
28250 uint32_t* r_dst = &DX(mc68kcpu);
28251 uint32_t src = OPER_AW_16(mc68kcpu);
28252 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28253 uint32_t res = dst - src;
28254
28255 (mc68kcpu)->n_flag = NFLAG_16(res);
28256 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28257 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28258 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28259
28260 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28261 }
28262
28263
28264 static void m68k_op_sub_16_er_al(m68000_base_device* mc68kcpu)
28265 {
28266 uint32_t* r_dst = &DX(mc68kcpu);
28267 uint32_t src = OPER_AL_16(mc68kcpu);
28268 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28269 uint32_t res = dst - src;
28270
28271 (mc68kcpu)->n_flag = NFLAG_16(res);
28272 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28273 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28274 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28275
28276 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28277 }
28278
28279
28280 static void m68k_op_sub_16_er_pcdi(m68000_base_device* mc68kcpu)
28281 {
28282 uint32_t* r_dst = &DX(mc68kcpu);
28283 uint32_t src = OPER_PCDI_16(mc68kcpu);
28284 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28285 uint32_t res = dst - src;
28286
28287 (mc68kcpu)->n_flag = NFLAG_16(res);
28288 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28289 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28290 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28291
28292 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28293 }
28294
28295
28296 static void m68k_op_sub_16_er_pcix(m68000_base_device* mc68kcpu)
28297 {
28298 uint32_t* r_dst = &DX(mc68kcpu);
28299 uint32_t src = OPER_PCIX_16(mc68kcpu);
28300 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28301 uint32_t res = dst - src;
28302
28303 (mc68kcpu)->n_flag = NFLAG_16(res);
28304 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28305 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28306 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28307
28308 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28309 }
28310
28311
28312 static void m68k_op_sub_16_er_i(m68000_base_device* mc68kcpu)
28313 {
28314 uint32_t* r_dst = &DX(mc68kcpu);
28315 uint32_t src = OPER_I_16(mc68kcpu);
28316 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
28317 uint32_t res = dst - src;
28318
28319 (mc68kcpu)->n_flag = NFLAG_16(res);
28320 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28321 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28322 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28323
28324 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
28325 }
28326
28327
28328 static void m68k_op_sub_32_er_d(m68000_base_device* mc68kcpu)
28329 {
28330 uint32_t* r_dst = &DX(mc68kcpu);
28331 uint32_t src = DY(mc68kcpu);
28332 uint32_t dst = *r_dst;
28333 uint32_t res = dst - src;
28334
28335 (mc68kcpu)->n_flag = NFLAG_32(res);
28336 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28337 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28338 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28339
28340 *r_dst = (mc68kcpu)->not_z_flag;
28341 }
28342
28343
28344 static void m68k_op_sub_32_er_a(m68000_base_device* mc68kcpu)
28345 {
28346 uint32_t* r_dst = &DX(mc68kcpu);
28347 uint32_t src = AY(mc68kcpu);
28348 uint32_t dst = *r_dst;
28349 uint32_t res = dst - src;
28350
28351 (mc68kcpu)->n_flag = NFLAG_32(res);
28352 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28353 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28354 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28355
28356 *r_dst = (mc68kcpu)->not_z_flag;
28357 }
28358
28359
28360 static void m68k_op_sub_32_er_ai(m68000_base_device* mc68kcpu)
28361 {
28362 uint32_t* r_dst = &DX(mc68kcpu);
28363 uint32_t src = OPER_AY_AI_32(mc68kcpu);
28364 uint32_t dst = *r_dst;
28365 uint32_t res = dst - src;
28366
28367 (mc68kcpu)->n_flag = NFLAG_32(res);
28368 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28369 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28370 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28371
28372 *r_dst = (mc68kcpu)->not_z_flag;
28373 }
28374
28375
28376 static void m68k_op_sub_32_er_pi(m68000_base_device* mc68kcpu)
28377 {
28378 uint32_t* r_dst = &DX(mc68kcpu);
28379 uint32_t src = OPER_AY_PI_32(mc68kcpu);
28380 uint32_t dst = *r_dst;
28381 uint32_t res = dst - src;
28382
28383 (mc68kcpu)->n_flag = NFLAG_32(res);
28384 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28385 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28386 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28387
28388 *r_dst = (mc68kcpu)->not_z_flag;
28389 }
28390
28391
28392 static void m68k_op_sub_32_er_pd(m68000_base_device* mc68kcpu)
28393 {
28394 uint32_t* r_dst = &DX(mc68kcpu);
28395 uint32_t src = OPER_AY_PD_32(mc68kcpu);
28396 uint32_t dst = *r_dst;
28397 uint32_t res = dst - src;
28398
28399 (mc68kcpu)->n_flag = NFLAG_32(res);
28400 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28401 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28402 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28403
28404 *r_dst = (mc68kcpu)->not_z_flag;
28405 }
28406
28407
28408 static void m68k_op_sub_32_er_di(m68000_base_device* mc68kcpu)
28409 {
28410 uint32_t* r_dst = &DX(mc68kcpu);
28411 uint32_t src = OPER_AY_DI_32(mc68kcpu);
28412 uint32_t dst = *r_dst;
28413 uint32_t res = dst - src;
28414
28415 (mc68kcpu)->n_flag = NFLAG_32(res);
28416 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28417 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28418 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28419
28420 *r_dst = (mc68kcpu)->not_z_flag;
28421 }
28422
28423
28424 static void m68k_op_sub_32_er_ix(m68000_base_device* mc68kcpu)
28425 {
28426 uint32_t* r_dst = &DX(mc68kcpu);
28427 uint32_t src = OPER_AY_IX_32(mc68kcpu);
28428 uint32_t dst = *r_dst;
28429 uint32_t res = dst - src;
28430
28431 (mc68kcpu)->n_flag = NFLAG_32(res);
28432 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28433 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28434 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28435
28436 *r_dst = (mc68kcpu)->not_z_flag;
28437 }
28438
28439
28440 static void m68k_op_sub_32_er_aw(m68000_base_device* mc68kcpu)
28441 {
28442 uint32_t* r_dst = &DX(mc68kcpu);
28443 uint32_t src = OPER_AW_32(mc68kcpu);
28444 uint32_t dst = *r_dst;
28445 uint32_t res = dst - src;
28446
28447 (mc68kcpu)->n_flag = NFLAG_32(res);
28448 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28449 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28450 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28451
28452 *r_dst = (mc68kcpu)->not_z_flag;
28453 }
28454
28455
28456 static void m68k_op_sub_32_er_al(m68000_base_device* mc68kcpu)
28457 {
28458 uint32_t* r_dst = &DX(mc68kcpu);
28459 uint32_t src = OPER_AL_32(mc68kcpu);
28460 uint32_t dst = *r_dst;
28461 uint32_t res = dst - src;
28462
28463 (mc68kcpu)->n_flag = NFLAG_32(res);
28464 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28465 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28466 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28467
28468 *r_dst = (mc68kcpu)->not_z_flag;
28469 }
28470
28471
28472 static void m68k_op_sub_32_er_pcdi(m68000_base_device* mc68kcpu)
28473 {
28474 uint32_t* r_dst = &DX(mc68kcpu);
28475 uint32_t src = OPER_PCDI_32(mc68kcpu);
28476 uint32_t dst = *r_dst;
28477 uint32_t res = dst - src;
28478
28479 (mc68kcpu)->n_flag = NFLAG_32(res);
28480 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28481 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28482 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28483
28484 *r_dst = (mc68kcpu)->not_z_flag;
28485 }
28486
28487
28488 static void m68k_op_sub_32_er_pcix(m68000_base_device* mc68kcpu)
28489 {
28490 uint32_t* r_dst = &DX(mc68kcpu);
28491 uint32_t src = OPER_PCIX_32(mc68kcpu);
28492 uint32_t dst = *r_dst;
28493 uint32_t res = dst - src;
28494
28495 (mc68kcpu)->n_flag = NFLAG_32(res);
28496 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28497 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28498 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28499
28500 *r_dst = (mc68kcpu)->not_z_flag;
28501 }
28502
28503
28504 static void m68k_op_sub_32_er_i(m68000_base_device* mc68kcpu)
28505 {
28506 uint32_t* r_dst = &DX(mc68kcpu);
28507 uint32_t src = OPER_I_32(mc68kcpu);
28508 uint32_t dst = *r_dst;
28509 uint32_t res = dst - src;
28510
28511 (mc68kcpu)->n_flag = NFLAG_32(res);
28512 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28513 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28514 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28515
28516 *r_dst = (mc68kcpu)->not_z_flag;
28517 }
28518
28519
28520 static void m68k_op_sub_8_re_ai(m68000_base_device* mc68kcpu)
28521 {
28522 uint32_t ea = EA_AY_AI_8(mc68kcpu);
28523 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28524 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28525 uint32_t res = dst - src;
28526
28527 (mc68kcpu)->n_flag = NFLAG_8(res);
28528 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28529 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28530 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28531
28532 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28533 }
28534
28535
28536 static void m68k_op_sub_8_re_pi(m68000_base_device* mc68kcpu)
28537 {
28538 uint32_t ea = EA_AY_PI_8(mc68kcpu);
28539 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28540 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28541 uint32_t res = dst - src;
28542
28543 (mc68kcpu)->n_flag = NFLAG_8(res);
28544 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28545 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28546 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28547
28548 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28549 }
28550
28551
28552 static void m68k_op_sub_8_re_pi7(m68000_base_device* mc68kcpu)
28553 {
28554 uint32_t ea = EA_A7_PI_8(mc68kcpu);
28555 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28556 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28557 uint32_t res = dst - src;
28558
28559 (mc68kcpu)->n_flag = NFLAG_8(res);
28560 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28561 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28562 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28563
28564 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28565 }
28566
28567
28568 static void m68k_op_sub_8_re_pd(m68000_base_device* mc68kcpu)
28569 {
28570 uint32_t ea = EA_AY_PD_8(mc68kcpu);
28571 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28572 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28573 uint32_t res = dst - src;
28574
28575 (mc68kcpu)->n_flag = NFLAG_8(res);
28576 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28577 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28578 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28579
28580 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28581 }
28582
28583
28584 static void m68k_op_sub_8_re_pd7(m68000_base_device* mc68kcpu)
28585 {
28586 uint32_t ea = EA_A7_PD_8(mc68kcpu);
28587 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28588 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28589 uint32_t res = dst - src;
28590
28591 (mc68kcpu)->n_flag = NFLAG_8(res);
28592 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28593 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28594 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28595
28596 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28597 }
28598
28599
28600 static void m68k_op_sub_8_re_di(m68000_base_device* mc68kcpu)
28601 {
28602 uint32_t ea = EA_AY_DI_8(mc68kcpu);
28603 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28604 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28605 uint32_t res = dst - src;
28606
28607 (mc68kcpu)->n_flag = NFLAG_8(res);
28608 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28609 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28610 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28611
28612 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28613 }
28614
28615
28616 static void m68k_op_sub_8_re_ix(m68000_base_device* mc68kcpu)
28617 {
28618 uint32_t ea = EA_AY_IX_8(mc68kcpu);
28619 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28620 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28621 uint32_t res = dst - src;
28622
28623 (mc68kcpu)->n_flag = NFLAG_8(res);
28624 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28625 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28626 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28627
28628 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28629 }
28630
28631
28632 static void m68k_op_sub_8_re_aw(m68000_base_device* mc68kcpu)
28633 {
28634 uint32_t ea = EA_AW_8(mc68kcpu);
28635 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28636 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28637 uint32_t res = dst - src;
28638
28639 (mc68kcpu)->n_flag = NFLAG_8(res);
28640 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28641 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28642 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28643
28644 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28645 }
28646
28647
28648 static void m68k_op_sub_8_re_al(m68000_base_device* mc68kcpu)
28649 {
28650 uint32_t ea = EA_AL_8(mc68kcpu);
28651 uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu));
28652 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
28653 uint32_t res = dst - src;
28654
28655 (mc68kcpu)->n_flag = NFLAG_8(res);
28656 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
28657 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
28658 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
28659
28660 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28661 }
28662
28663
28664 static void m68k_op_sub_16_re_ai(m68000_base_device* mc68kcpu)
28665 {
28666 uint32_t ea = EA_AY_AI_16(mc68kcpu);
28667 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
28668 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
28669 uint32_t res = dst - src;
28670
28671 (mc68kcpu)->n_flag = NFLAG_16(res);
28672 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28673 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28674 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28675
28676 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28677 }
28678
28679
28680 static void m68k_op_sub_16_re_pi(m68000_base_device* mc68kcpu)
28681 {
28682 uint32_t ea = EA_AY_PI_16(mc68kcpu);
28683 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
28684 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
28685 uint32_t res = dst - src;
28686
28687 (mc68kcpu)->n_flag = NFLAG_16(res);
28688 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28689 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28690 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28691
28692 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28693 }
28694
28695
28696 static void m68k_op_sub_16_re_pd(m68000_base_device* mc68kcpu)
28697 {
28698 uint32_t ea = EA_AY_PD_16(mc68kcpu);
28699 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
28700 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
28701 uint32_t res = dst - src;
28702
28703 (mc68kcpu)->n_flag = NFLAG_16(res);
28704 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28705 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28706 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28707
28708 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28709 }
28710
28711
28712 static void m68k_op_sub_16_re_di(m68000_base_device* mc68kcpu)
28713 {
28714 uint32_t ea = EA_AY_DI_16(mc68kcpu);
28715 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
28716 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
28717 uint32_t res = dst - src;
28718
28719 (mc68kcpu)->n_flag = NFLAG_16(res);
28720 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28721 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28722 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28723
28724 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28725 }
28726
28727
28728 static void m68k_op_sub_16_re_ix(m68000_base_device* mc68kcpu)
28729 {
28730 uint32_t ea = EA_AY_IX_16(mc68kcpu);
28731 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
28732 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
28733 uint32_t res = dst - src;
28734
28735 (mc68kcpu)->n_flag = NFLAG_16(res);
28736 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28737 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28738 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28739
28740 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28741 }
28742
28743
28744 static void m68k_op_sub_16_re_aw(m68000_base_device* mc68kcpu)
28745 {
28746 uint32_t ea = EA_AW_16(mc68kcpu);
28747 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
28748 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
28749 uint32_t res = dst - src;
28750
28751 (mc68kcpu)->n_flag = NFLAG_16(res);
28752 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28753 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28754 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28755
28756 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28757 }
28758
28759
28760 static void m68k_op_sub_16_re_al(m68000_base_device* mc68kcpu)
28761 {
28762 uint32_t ea = EA_AL_16(mc68kcpu);
28763 uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu));
28764 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
28765 uint32_t res = dst - src;
28766
28767 (mc68kcpu)->n_flag = NFLAG_16(res);
28768 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
28769 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
28770 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
28771
28772 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28773 }
28774
28775
28776 static void m68k_op_sub_32_re_ai(m68000_base_device* mc68kcpu)
28777 {
28778 uint32_t ea = EA_AY_AI_32(mc68kcpu);
28779 uint32_t src = DX(mc68kcpu);
28780 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
28781 uint32_t res = dst - src;
28782
28783 (mc68kcpu)->n_flag = NFLAG_32(res);
28784 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28785 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28786 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28787
28788 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28789 }
28790
28791
28792 static void m68k_op_sub_32_re_pi(m68000_base_device* mc68kcpu)
28793 {
28794 uint32_t ea = EA_AY_PI_32(mc68kcpu);
28795 uint32_t src = DX(mc68kcpu);
28796 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
28797 uint32_t res = dst - src;
28798
28799 (mc68kcpu)->n_flag = NFLAG_32(res);
28800 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28801 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28802 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28803
28804 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28805 }
28806
28807
28808 static void m68k_op_sub_32_re_pd(m68000_base_device* mc68kcpu)
28809 {
28810 uint32_t ea = EA_AY_PD_32(mc68kcpu);
28811 uint32_t src = DX(mc68kcpu);
28812 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
28813 uint32_t res = dst - src;
28814
28815 (mc68kcpu)->n_flag = NFLAG_32(res);
28816 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28817 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28818 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28819
28820 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28821 }
28822
28823
28824 static void m68k_op_sub_32_re_di(m68000_base_device* mc68kcpu)
28825 {
28826 uint32_t ea = EA_AY_DI_32(mc68kcpu);
28827 uint32_t src = DX(mc68kcpu);
28828 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
28829 uint32_t res = dst - src;
28830
28831 (mc68kcpu)->n_flag = NFLAG_32(res);
28832 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28833 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28834 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28835
28836 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28837 }
28838
28839
28840 static void m68k_op_sub_32_re_ix(m68000_base_device* mc68kcpu)
28841 {
28842 uint32_t ea = EA_AY_IX_32(mc68kcpu);
28843 uint32_t src = DX(mc68kcpu);
28844 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
28845 uint32_t res = dst - src;
28846
28847 (mc68kcpu)->n_flag = NFLAG_32(res);
28848 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28849 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28850 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28851
28852 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28853 }
28854
28855
28856 static void m68k_op_sub_32_re_aw(m68000_base_device* mc68kcpu)
28857 {
28858 uint32_t ea = EA_AW_32(mc68kcpu);
28859 uint32_t src = DX(mc68kcpu);
28860 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
28861 uint32_t res = dst - src;
28862
28863 (mc68kcpu)->n_flag = NFLAG_32(res);
28864 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28865 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28866 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28867
28868 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28869 }
28870
28871
28872 static void m68k_op_sub_32_re_al(m68000_base_device* mc68kcpu)
28873 {
28874 uint32_t ea = EA_AL_32(mc68kcpu);
28875 uint32_t src = DX(mc68kcpu);
28876 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
28877 uint32_t res = dst - src;
28878
28879 (mc68kcpu)->n_flag = NFLAG_32(res);
28880 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
28881 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
28882 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
28883
28884 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
28885 }
28886
28887
28888 static void m68k_op_suba_16_d(m68000_base_device* mc68kcpu)
28889 {
28890 uint32_t* r_dst = &AX(mc68kcpu);
28891
28892 *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY(mc68kcpu)));
28893 }
28894
28895
28896 static void m68k_op_suba_16_a(m68000_base_device* mc68kcpu)
28897 {
28898 uint32_t* r_dst = &AX(mc68kcpu);
28899
28900 *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY(mc68kcpu)));
28901 }
28902
28903
28904 static void m68k_op_suba_16_ai(m68000_base_device* mc68kcpu)
28905 {
28906 uint32_t* r_dst = &AX(mc68kcpu);
28907 uint32_t src = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu));
28908
28909 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28910 }
28911
28912
28913 static void m68k_op_suba_16_pi(m68000_base_device* mc68kcpu)
28914 {
28915 uint32_t* r_dst = &AX(mc68kcpu);
28916 uint32_t src = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu));
28917
28918 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28919 }
28920
28921
28922 static void m68k_op_suba_16_pd(m68000_base_device* mc68kcpu)
28923 {
28924 uint32_t* r_dst = &AX(mc68kcpu);
28925 uint32_t src = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu));
28926
28927 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28928 }
28929
28930
28931 static void m68k_op_suba_16_di(m68000_base_device* mc68kcpu)
28932 {
28933 uint32_t* r_dst = &AX(mc68kcpu);
28934 uint32_t src = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu));
28935
28936 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28937 }
28938
28939
28940 static void m68k_op_suba_16_ix(m68000_base_device* mc68kcpu)
28941 {
28942 uint32_t* r_dst = &AX(mc68kcpu);
28943 uint32_t src = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu));
28944
28945 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28946 }
28947
28948
28949 static void m68k_op_suba_16_aw(m68000_base_device* mc68kcpu)
28950 {
28951 uint32_t* r_dst = &AX(mc68kcpu);
28952 uint32_t src = MAKE_INT_16(OPER_AW_16(mc68kcpu));
28953
28954 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28955 }
28956
28957
28958 static void m68k_op_suba_16_al(m68000_base_device* mc68kcpu)
28959 {
28960 uint32_t* r_dst = &AX(mc68kcpu);
28961 uint32_t src = MAKE_INT_16(OPER_AL_16(mc68kcpu));
28962
28963 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28964 }
28965
28966
28967 static void m68k_op_suba_16_pcdi(m68000_base_device* mc68kcpu)
28968 {
28969 uint32_t* r_dst = &AX(mc68kcpu);
28970 uint32_t src = MAKE_INT_16(OPER_PCDI_16(mc68kcpu));
28971
28972 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28973 }
28974
28975
28976 static void m68k_op_suba_16_pcix(m68000_base_device* mc68kcpu)
28977 {
28978 uint32_t* r_dst = &AX(mc68kcpu);
28979 uint32_t src = MAKE_INT_16(OPER_PCIX_16(mc68kcpu));
28980
28981 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28982 }
28983
28984
28985 static void m68k_op_suba_16_i(m68000_base_device* mc68kcpu)
28986 {
28987 uint32_t* r_dst = &AX(mc68kcpu);
28988 uint32_t src = MAKE_INT_16(OPER_I_16(mc68kcpu));
28989
28990 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
28991 }
28992
28993
28994 static void m68k_op_suba_32_d(m68000_base_device* mc68kcpu)
28995 {
28996 uint32_t* r_dst = &AX(mc68kcpu);
28997
28998 *r_dst = MASK_OUT_ABOVE_32(*r_dst - DY(mc68kcpu));
28999 }
29000
29001
29002 static void m68k_op_suba_32_a(m68000_base_device* mc68kcpu)
29003 {
29004 uint32_t* r_dst = &AX(mc68kcpu);
29005
29006 *r_dst = MASK_OUT_ABOVE_32(*r_dst - AY(mc68kcpu));
29007 }
29008
29009
29010 static void m68k_op_suba_32_ai(m68000_base_device* mc68kcpu)
29011 {
29012 uint32_t* r_dst = &AX(mc68kcpu);
29013 uint32_t src = OPER_AY_AI_32(mc68kcpu);
29014
29015 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29016 }
29017
29018
29019 static void m68k_op_suba_32_pi(m68000_base_device* mc68kcpu)
29020 {
29021 uint32_t* r_dst = &AX(mc68kcpu);
29022 uint32_t src = OPER_AY_PI_32(mc68kcpu);
29023
29024 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29025 }
29026
29027
29028 static void m68k_op_suba_32_pd(m68000_base_device* mc68kcpu)
29029 {
29030 uint32_t* r_dst = &AX(mc68kcpu);
29031 uint32_t src = OPER_AY_PD_32(mc68kcpu);
29032
29033 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29034 }
29035
29036
29037 static void m68k_op_suba_32_di(m68000_base_device* mc68kcpu)
29038 {
29039 uint32_t* r_dst = &AX(mc68kcpu);
29040 uint32_t src = OPER_AY_DI_32(mc68kcpu);
29041
29042 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29043 }
29044
29045
29046 static void m68k_op_suba_32_ix(m68000_base_device* mc68kcpu)
29047 {
29048 uint32_t* r_dst = &AX(mc68kcpu);
29049 uint32_t src = OPER_AY_IX_32(mc68kcpu);
29050
29051 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29052 }
29053
29054
29055 static void m68k_op_suba_32_aw(m68000_base_device* mc68kcpu)
29056 {
29057 uint32_t* r_dst = &AX(mc68kcpu);
29058 uint32_t src = OPER_AW_32(mc68kcpu);
29059
29060 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29061 }
29062
29063
29064 static void m68k_op_suba_32_al(m68000_base_device* mc68kcpu)
29065 {
29066 uint32_t* r_dst = &AX(mc68kcpu);
29067 uint32_t src = OPER_AL_32(mc68kcpu);
29068
29069 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29070 }
29071
29072
29073 static void m68k_op_suba_32_pcdi(m68000_base_device* mc68kcpu)
29074 {
29075 uint32_t* r_dst = &AX(mc68kcpu);
29076 uint32_t src = OPER_PCDI_32(mc68kcpu);
29077
29078 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29079 }
29080
29081
29082 static void m68k_op_suba_32_pcix(m68000_base_device* mc68kcpu)
29083 {
29084 uint32_t* r_dst = &AX(mc68kcpu);
29085 uint32_t src = OPER_PCIX_32(mc68kcpu);
29086
29087 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29088 }
29089
29090
29091 static void m68k_op_suba_32_i(m68000_base_device* mc68kcpu)
29092 {
29093 uint32_t* r_dst = &AX(mc68kcpu);
29094 uint32_t src = OPER_I_32(mc68kcpu);
29095
29096 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
29097 }
29098
29099
29100 static void m68k_op_subi_8_d(m68000_base_device* mc68kcpu)
29101 {
29102 uint32_t* r_dst = &DY(mc68kcpu);
29103 uint32_t src = OPER_I_8(mc68kcpu);
29104 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
29105 uint32_t res = dst - src;
29106
29107 (mc68kcpu)->n_flag = NFLAG_8(res);
29108 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29109 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29110 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29111
29112 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
29113 }
29114
29115
29116 static void m68k_op_subi_8_ai(m68000_base_device* mc68kcpu)
29117 {
29118 uint32_t src = OPER_I_8(mc68kcpu);
29119 uint32_t ea = EA_AY_AI_8(mc68kcpu);
29120 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29121 uint32_t res = dst - src;
29122
29123 (mc68kcpu)->n_flag = NFLAG_8(res);
29124 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29125 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29126 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29127
29128 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29129 }
29130
29131
29132 static void m68k_op_subi_8_pi(m68000_base_device* mc68kcpu)
29133 {
29134 uint32_t src = OPER_I_8(mc68kcpu);
29135 uint32_t ea = EA_AY_PI_8(mc68kcpu);
29136 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29137 uint32_t res = dst - src;
29138
29139 (mc68kcpu)->n_flag = NFLAG_8(res);
29140 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29141 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29142 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29143
29144 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29145 }
29146
29147
29148 static void m68k_op_subi_8_pi7(m68000_base_device* mc68kcpu)
29149 {
29150 uint32_t src = OPER_I_8(mc68kcpu);
29151 uint32_t ea = EA_A7_PI_8(mc68kcpu);
29152 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29153 uint32_t res = dst - src;
29154
29155 (mc68kcpu)->n_flag = NFLAG_8(res);
29156 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29157 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29158 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29159
29160 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29161 }
29162
29163
29164 static void m68k_op_subi_8_pd(m68000_base_device* mc68kcpu)
29165 {
29166 uint32_t src = OPER_I_8(mc68kcpu);
29167 uint32_t ea = EA_AY_PD_8(mc68kcpu);
29168 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29169 uint32_t res = dst - src;
29170
29171 (mc68kcpu)->n_flag = NFLAG_8(res);
29172 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29173 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29174 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29175
29176 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29177 }
29178
29179
29180 static void m68k_op_subi_8_pd7(m68000_base_device* mc68kcpu)
29181 {
29182 uint32_t src = OPER_I_8(mc68kcpu);
29183 uint32_t ea = EA_A7_PD_8(mc68kcpu);
29184 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29185 uint32_t res = dst - src;
29186
29187 (mc68kcpu)->n_flag = NFLAG_8(res);
29188 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29189 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29190 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29191
29192 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29193 }
29194
29195
29196 static void m68k_op_subi_8_di(m68000_base_device* mc68kcpu)
29197 {
29198 uint32_t src = OPER_I_8(mc68kcpu);
29199 uint32_t ea = EA_AY_DI_8(mc68kcpu);
29200 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29201 uint32_t res = dst - src;
29202
29203 (mc68kcpu)->n_flag = NFLAG_8(res);
29204 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29205 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29206 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29207
29208 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29209 }
29210
29211
29212 static void m68k_op_subi_8_ix(m68000_base_device* mc68kcpu)
29213 {
29214 uint32_t src = OPER_I_8(mc68kcpu);
29215 uint32_t ea = EA_AY_IX_8(mc68kcpu);
29216 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29217 uint32_t res = dst - src;
29218
29219 (mc68kcpu)->n_flag = NFLAG_8(res);
29220 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29221 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29222 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29223
29224 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29225 }
29226
29227
29228 static void m68k_op_subi_8_aw(m68000_base_device* mc68kcpu)
29229 {
29230 uint32_t src = OPER_I_8(mc68kcpu);
29231 uint32_t ea = EA_AW_8(mc68kcpu);
29232 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29233 uint32_t res = dst - src;
29234
29235 (mc68kcpu)->n_flag = NFLAG_8(res);
29236 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29237 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29238 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29239
29240 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29241 }
29242
29243
29244 static void m68k_op_subi_8_al(m68000_base_device* mc68kcpu)
29245 {
29246 uint32_t src = OPER_I_8(mc68kcpu);
29247 uint32_t ea = EA_AL_8(mc68kcpu);
29248 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29249 uint32_t res = dst - src;
29250
29251 (mc68kcpu)->n_flag = NFLAG_8(res);
29252 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29253 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29254 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29255
29256 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29257 }
29258
29259
29260 static void m68k_op_subi_16_d(m68000_base_device* mc68kcpu)
29261 {
29262 uint32_t* r_dst = &DY(mc68kcpu);
29263 uint32_t src = OPER_I_16(mc68kcpu);
29264 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
29265 uint32_t res = dst - src;
29266
29267 (mc68kcpu)->n_flag = NFLAG_16(res);
29268 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29269 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29270 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29271
29272 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
29273 }
29274
29275
29276 static void m68k_op_subi_16_ai(m68000_base_device* mc68kcpu)
29277 {
29278 uint32_t src = OPER_I_16(mc68kcpu);
29279 uint32_t ea = EA_AY_AI_16(mc68kcpu);
29280 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29281 uint32_t res = dst - src;
29282
29283 (mc68kcpu)->n_flag = NFLAG_16(res);
29284 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29285 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29286 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29287
29288 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29289 }
29290
29291
29292 static void m68k_op_subi_16_pi(m68000_base_device* mc68kcpu)
29293 {
29294 uint32_t src = OPER_I_16(mc68kcpu);
29295 uint32_t ea = EA_AY_PI_16(mc68kcpu);
29296 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29297 uint32_t res = dst - src;
29298
29299 (mc68kcpu)->n_flag = NFLAG_16(res);
29300 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29301 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29302 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29303
29304 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29305 }
29306
29307
29308 static void m68k_op_subi_16_pd(m68000_base_device* mc68kcpu)
29309 {
29310 uint32_t src = OPER_I_16(mc68kcpu);
29311 uint32_t ea = EA_AY_PD_16(mc68kcpu);
29312 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29313 uint32_t res = dst - src;
29314
29315 (mc68kcpu)->n_flag = NFLAG_16(res);
29316 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29317 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29318 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29319
29320 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29321 }
29322
29323
29324 static void m68k_op_subi_16_di(m68000_base_device* mc68kcpu)
29325 {
29326 uint32_t src = OPER_I_16(mc68kcpu);
29327 uint32_t ea = EA_AY_DI_16(mc68kcpu);
29328 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29329 uint32_t res = dst - src;
29330
29331 (mc68kcpu)->n_flag = NFLAG_16(res);
29332 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29333 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29334 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29335
29336 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29337 }
29338
29339
29340 static void m68k_op_subi_16_ix(m68000_base_device* mc68kcpu)
29341 {
29342 uint32_t src = OPER_I_16(mc68kcpu);
29343 uint32_t ea = EA_AY_IX_16(mc68kcpu);
29344 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29345 uint32_t res = dst - src;
29346
29347 (mc68kcpu)->n_flag = NFLAG_16(res);
29348 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29349 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29350 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29351
29352 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29353 }
29354
29355
29356 static void m68k_op_subi_16_aw(m68000_base_device* mc68kcpu)
29357 {
29358 uint32_t src = OPER_I_16(mc68kcpu);
29359 uint32_t ea = EA_AW_16(mc68kcpu);
29360 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29361 uint32_t res = dst - src;
29362
29363 (mc68kcpu)->n_flag = NFLAG_16(res);
29364 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29365 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29366 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29367
29368 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29369 }
29370
29371
29372 static void m68k_op_subi_16_al(m68000_base_device* mc68kcpu)
29373 {
29374 uint32_t src = OPER_I_16(mc68kcpu);
29375 uint32_t ea = EA_AL_16(mc68kcpu);
29376 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29377 uint32_t res = dst - src;
29378
29379 (mc68kcpu)->n_flag = NFLAG_16(res);
29380 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29381 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29382 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29383
29384 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29385 }
29386
29387
29388 static void m68k_op_subi_32_d(m68000_base_device* mc68kcpu)
29389 {
29390 uint32_t* r_dst = &DY(mc68kcpu);
29391 uint32_t src = OPER_I_32(mc68kcpu);
29392 uint32_t dst = *r_dst;
29393 uint32_t res = dst - src;
29394
29395 (mc68kcpu)->n_flag = NFLAG_32(res);
29396 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29397 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29398 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29399
29400 *r_dst = (mc68kcpu)->not_z_flag;
29401 }
29402
29403
29404 static void m68k_op_subi_32_ai(m68000_base_device* mc68kcpu)
29405 {
29406 uint32_t src = OPER_I_32(mc68kcpu);
29407 uint32_t ea = EA_AY_AI_32(mc68kcpu);
29408 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29409 uint32_t res = dst - src;
29410
29411 (mc68kcpu)->n_flag = NFLAG_32(res);
29412 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29413 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29414 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29415
29416 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29417 }
29418
29419
29420 static void m68k_op_subi_32_pi(m68000_base_device* mc68kcpu)
29421 {
29422 uint32_t src = OPER_I_32(mc68kcpu);
29423 uint32_t ea = EA_AY_PI_32(mc68kcpu);
29424 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29425 uint32_t res = dst - src;
29426
29427 (mc68kcpu)->n_flag = NFLAG_32(res);
29428 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29429 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29430 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29431
29432 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29433 }
29434
29435
29436 static void m68k_op_subi_32_pd(m68000_base_device* mc68kcpu)
29437 {
29438 uint32_t src = OPER_I_32(mc68kcpu);
29439 uint32_t ea = EA_AY_PD_32(mc68kcpu);
29440 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29441 uint32_t res = dst - src;
29442
29443 (mc68kcpu)->n_flag = NFLAG_32(res);
29444 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29445 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29446 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29447
29448 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29449 }
29450
29451
29452 static void m68k_op_subi_32_di(m68000_base_device* mc68kcpu)
29453 {
29454 uint32_t src = OPER_I_32(mc68kcpu);
29455 uint32_t ea = EA_AY_DI_32(mc68kcpu);
29456 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29457 uint32_t res = dst - src;
29458
29459 (mc68kcpu)->n_flag = NFLAG_32(res);
29460 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29461 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29462 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29463
29464 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29465 }
29466
29467
29468 static void m68k_op_subi_32_ix(m68000_base_device* mc68kcpu)
29469 {
29470 uint32_t src = OPER_I_32(mc68kcpu);
29471 uint32_t ea = EA_AY_IX_32(mc68kcpu);
29472 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29473 uint32_t res = dst - src;
29474
29475 (mc68kcpu)->n_flag = NFLAG_32(res);
29476 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29477 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29478 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29479
29480 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29481 }
29482
29483
29484 static void m68k_op_subi_32_aw(m68000_base_device* mc68kcpu)
29485 {
29486 uint32_t src = OPER_I_32(mc68kcpu);
29487 uint32_t ea = EA_AW_32(mc68kcpu);
29488 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29489 uint32_t res = dst - src;
29490
29491 (mc68kcpu)->n_flag = NFLAG_32(res);
29492 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29493 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29494 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29495
29496 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29497 }
29498
29499
29500 static void m68k_op_subi_32_al(m68000_base_device* mc68kcpu)
29501 {
29502 uint32_t src = OPER_I_32(mc68kcpu);
29503 uint32_t ea = EA_AL_32(mc68kcpu);
29504 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29505 uint32_t res = dst - src;
29506
29507 (mc68kcpu)->n_flag = NFLAG_32(res);
29508 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29509 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29510 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29511
29512 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29513 }
29514
29515
29516 static void m68k_op_subq_8_d(m68000_base_device* mc68kcpu)
29517 {
29518 uint32_t* r_dst = &DY(mc68kcpu);
29519 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29520 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
29521 uint32_t res = dst - src;
29522
29523 (mc68kcpu)->n_flag = NFLAG_8(res);
29524 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29525 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29526 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29527
29528 *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag;
29529 }
29530
29531
29532 static void m68k_op_subq_8_ai(m68000_base_device* mc68kcpu)
29533 {
29534 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29535 uint32_t ea = EA_AY_AI_8(mc68kcpu);
29536 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29537 uint32_t res = dst - src;
29538
29539 (mc68kcpu)->n_flag = NFLAG_8(res);
29540 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29541 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29542 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29543
29544 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29545 }
29546
29547
29548 static void m68k_op_subq_8_pi(m68000_base_device* mc68kcpu)
29549 {
29550 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29551 uint32_t ea = EA_AY_PI_8(mc68kcpu);
29552 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29553 uint32_t res = dst - src;
29554
29555 (mc68kcpu)->n_flag = NFLAG_8(res);
29556 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29557 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29558 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29559
29560 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29561 }
29562
29563
29564 static void m68k_op_subq_8_pi7(m68000_base_device* mc68kcpu)
29565 {
29566 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29567 uint32_t ea = EA_A7_PI_8(mc68kcpu);
29568 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29569 uint32_t res = dst - src;
29570
29571 (mc68kcpu)->n_flag = NFLAG_8(res);
29572 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29573 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29574 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29575
29576 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29577 }
29578
29579
29580 static void m68k_op_subq_8_pd(m68000_base_device* mc68kcpu)
29581 {
29582 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29583 uint32_t ea = EA_AY_PD_8(mc68kcpu);
29584 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29585 uint32_t res = dst - src;
29586
29587 (mc68kcpu)->n_flag = NFLAG_8(res);
29588 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29589 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29590 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29591
29592 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29593 }
29594
29595
29596 static void m68k_op_subq_8_pd7(m68000_base_device* mc68kcpu)
29597 {
29598 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29599 uint32_t ea = EA_A7_PD_8(mc68kcpu);
29600 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29601 uint32_t res = dst - src;
29602
29603 (mc68kcpu)->n_flag = NFLAG_8(res);
29604 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29605 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29606 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29607
29608 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29609 }
29610
29611
29612 static void m68k_op_subq_8_di(m68000_base_device* mc68kcpu)
29613 {
29614 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29615 uint32_t ea = EA_AY_DI_8(mc68kcpu);
29616 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29617 uint32_t res = dst - src;
29618
29619 (mc68kcpu)->n_flag = NFLAG_8(res);
29620 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29621 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29622 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29623
29624 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29625 }
29626
29627
29628 static void m68k_op_subq_8_ix(m68000_base_device* mc68kcpu)
29629 {
29630 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29631 uint32_t ea = EA_AY_IX_8(mc68kcpu);
29632 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29633 uint32_t res = dst - src;
29634
29635 (mc68kcpu)->n_flag = NFLAG_8(res);
29636 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29637 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29638 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29639
29640 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29641 }
29642
29643
29644 static void m68k_op_subq_8_aw(m68000_base_device* mc68kcpu)
29645 {
29646 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29647 uint32_t ea = EA_AW_8(mc68kcpu);
29648 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29649 uint32_t res = dst - src;
29650
29651 (mc68kcpu)->n_flag = NFLAG_8(res);
29652 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29653 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29654 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29655
29656 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29657 }
29658
29659
29660 static void m68k_op_subq_8_al(m68000_base_device* mc68kcpu)
29661 {
29662 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29663 uint32_t ea = EA_AL_8(mc68kcpu);
29664 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
29665 uint32_t res = dst - src;
29666
29667 (mc68kcpu)->n_flag = NFLAG_8(res);
29668 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res);
29669 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29670 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29671
29672 m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29673 }
29674
29675
29676 static void m68k_op_subq_16_d(m68000_base_device* mc68kcpu)
29677 {
29678 uint32_t* r_dst = &DY(mc68kcpu);
29679 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29680 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
29681 uint32_t res = dst - src;
29682
29683 (mc68kcpu)->n_flag = NFLAG_16(res);
29684 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29685 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29686 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29687
29688 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag;
29689 }
29690
29691
29692 static void m68k_op_subq_16_a(m68000_base_device* mc68kcpu)
29693 {
29694 uint32_t* r_dst = &AY(mc68kcpu);
29695
29696 *r_dst = MASK_OUT_ABOVE_32(*r_dst - (((((mc68kcpu)->ir >> 9) - 1) & 7) + 1));
29697 }
29698
29699
29700 static void m68k_op_subq_16_ai(m68000_base_device* mc68kcpu)
29701 {
29702 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29703 uint32_t ea = EA_AY_AI_16(mc68kcpu);
29704 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29705 uint32_t res = dst - src;
29706
29707 (mc68kcpu)->n_flag = NFLAG_16(res);
29708 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29709 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29710 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29711
29712 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29713 }
29714
29715
29716 static void m68k_op_subq_16_pi(m68000_base_device* mc68kcpu)
29717 {
29718 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29719 uint32_t ea = EA_AY_PI_16(mc68kcpu);
29720 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29721 uint32_t res = dst - src;
29722
29723 (mc68kcpu)->n_flag = NFLAG_16(res);
29724 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29725 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29726 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29727
29728 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29729 }
29730
29731
29732 static void m68k_op_subq_16_pd(m68000_base_device* mc68kcpu)
29733 {
29734 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29735 uint32_t ea = EA_AY_PD_16(mc68kcpu);
29736 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29737 uint32_t res = dst - src;
29738
29739 (mc68kcpu)->n_flag = NFLAG_16(res);
29740 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29741 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29742 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29743
29744 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29745 }
29746
29747
29748 static void m68k_op_subq_16_di(m68000_base_device* mc68kcpu)
29749 {
29750 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29751 uint32_t ea = EA_AY_DI_16(mc68kcpu);
29752 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29753 uint32_t res = dst - src;
29754
29755 (mc68kcpu)->n_flag = NFLAG_16(res);
29756 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29757 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29758 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29759
29760 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29761 }
29762
29763
29764 static void m68k_op_subq_16_ix(m68000_base_device* mc68kcpu)
29765 {
29766 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29767 uint32_t ea = EA_AY_IX_16(mc68kcpu);
29768 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29769 uint32_t res = dst - src;
29770
29771 (mc68kcpu)->n_flag = NFLAG_16(res);
29772 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29773 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29774 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29775
29776 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29777 }
29778
29779
29780 static void m68k_op_subq_16_aw(m68000_base_device* mc68kcpu)
29781 {
29782 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29783 uint32_t ea = EA_AW_16(mc68kcpu);
29784 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29785 uint32_t res = dst - src;
29786
29787 (mc68kcpu)->n_flag = NFLAG_16(res);
29788 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29789 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29790 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29791
29792 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29793 }
29794
29795
29796 static void m68k_op_subq_16_al(m68000_base_device* mc68kcpu)
29797 {
29798 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29799 uint32_t ea = EA_AL_16(mc68kcpu);
29800 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
29801 uint32_t res = dst - src;
29802
29803 (mc68kcpu)->n_flag = NFLAG_16(res);
29804 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res);
29805 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29806 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29807
29808 m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29809 }
29810
29811
29812 static void m68k_op_subq_32_d(m68000_base_device* mc68kcpu)
29813 {
29814 uint32_t* r_dst = &DY(mc68kcpu);
29815 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29816 uint32_t dst = *r_dst;
29817 uint32_t res = dst - src;
29818
29819 (mc68kcpu)->n_flag = NFLAG_32(res);
29820 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29821 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29822 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29823
29824 *r_dst = (mc68kcpu)->not_z_flag;
29825 }
29826
29827
29828 static void m68k_op_subq_32_a(m68000_base_device* mc68kcpu)
29829 {
29830 uint32_t* r_dst = &AY(mc68kcpu);
29831
29832 *r_dst = MASK_OUT_ABOVE_32(*r_dst - (((((mc68kcpu)->ir >> 9) - 1) & 7) + 1));
29833 }
29834
29835
29836 static void m68k_op_subq_32_ai(m68000_base_device* mc68kcpu)
29837 {
29838 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29839 uint32_t ea = EA_AY_AI_32(mc68kcpu);
29840 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29841 uint32_t res = dst - src;
29842
29843 (mc68kcpu)->n_flag = NFLAG_32(res);
29844 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29845 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29846 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29847
29848 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29849 }
29850
29851
29852 static void m68k_op_subq_32_pi(m68000_base_device* mc68kcpu)
29853 {
29854 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29855 uint32_t ea = EA_AY_PI_32(mc68kcpu);
29856 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29857 uint32_t res = dst - src;
29858
29859 (mc68kcpu)->n_flag = NFLAG_32(res);
29860 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29861 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29862 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29863
29864 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29865 }
29866
29867
29868 static void m68k_op_subq_32_pd(m68000_base_device* mc68kcpu)
29869 {
29870 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29871 uint32_t ea = EA_AY_PD_32(mc68kcpu);
29872 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29873 uint32_t res = dst - src;
29874
29875 (mc68kcpu)->n_flag = NFLAG_32(res);
29876 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29877 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29878 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29879
29880 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29881 }
29882
29883
29884 static void m68k_op_subq_32_di(m68000_base_device* mc68kcpu)
29885 {
29886 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29887 uint32_t ea = EA_AY_DI_32(mc68kcpu);
29888 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29889 uint32_t res = dst - src;
29890
29891 (mc68kcpu)->n_flag = NFLAG_32(res);
29892 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29893 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29894 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29895
29896 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29897 }
29898
29899
29900 static void m68k_op_subq_32_ix(m68000_base_device* mc68kcpu)
29901 {
29902 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29903 uint32_t ea = EA_AY_IX_32(mc68kcpu);
29904 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29905 uint32_t res = dst - src;
29906
29907 (mc68kcpu)->n_flag = NFLAG_32(res);
29908 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29909 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29910 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29911
29912 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29913 }
29914
29915
29916 static void m68k_op_subq_32_aw(m68000_base_device* mc68kcpu)
29917 {
29918 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29919 uint32_t ea = EA_AW_32(mc68kcpu);
29920 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29921 uint32_t res = dst - src;
29922
29923 (mc68kcpu)->n_flag = NFLAG_32(res);
29924 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29925 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29926 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29927
29928 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29929 }
29930
29931
29932 static void m68k_op_subq_32_al(m68000_base_device* mc68kcpu)
29933 {
29934 uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1;
29935 uint32_t ea = EA_AL_32(mc68kcpu);
29936 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
29937 uint32_t res = dst - src;
29938
29939 (mc68kcpu)->n_flag = NFLAG_32(res);
29940 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res);
29941 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29942 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29943
29944 m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag);
29945 }
29946
29947
29948 static void m68k_op_subx_8_rr(m68000_base_device* mc68kcpu)
29949 {
29950 uint32_t* r_dst = &DX(mc68kcpu);
29951 uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu));
29952 uint32_t dst = MASK_OUT_ABOVE_8(*r_dst);
29953 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
29954
29955 (mc68kcpu)->n_flag = NFLAG_8(res);
29956 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
29957 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
29958
29959 res = MASK_OUT_ABOVE_8(res);
29960 (mc68kcpu)->not_z_flag |= res;
29961
29962 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
29963 }
29964
29965
29966 static void m68k_op_subx_16_rr(m68000_base_device* mc68kcpu)
29967 {
29968 uint32_t* r_dst = &DX(mc68kcpu);
29969 uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu));
29970 uint32_t dst = MASK_OUT_ABOVE_16(*r_dst);
29971 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
29972
29973 (mc68kcpu)->n_flag = NFLAG_16(res);
29974 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
29975 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
29976
29977 res = MASK_OUT_ABOVE_16(res);
29978 (mc68kcpu)->not_z_flag |= res;
29979
29980 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
29981 }
29982
29983
29984 static void m68k_op_subx_32_rr(m68000_base_device* mc68kcpu)
29985 {
29986 uint32_t* r_dst = &DX(mc68kcpu);
29987 uint32_t src = DY(mc68kcpu);
29988 uint32_t dst = *r_dst;
29989 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
29990
29991 (mc68kcpu)->n_flag = NFLAG_32(res);
29992 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
29993 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
29994
29995 res = MASK_OUT_ABOVE_32(res);
29996 (mc68kcpu)->not_z_flag |= res;
29997
29998 *r_dst = res;
29999 }
30000
30001
30002 static void m68k_op_subx_8_mm_ax7(m68000_base_device* mc68kcpu)
30003 {
30004 uint32_t src = OPER_AY_PD_8(mc68kcpu);
30005 uint32_t ea = EA_A7_PD_8(mc68kcpu);
30006 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30007 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
30008
30009 (mc68kcpu)->n_flag = NFLAG_8(res);
30010 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
30011 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
30012
30013 res = MASK_OUT_ABOVE_8(res);
30014 (mc68kcpu)->not_z_flag |= res;
30015
30016 m68ki_write_8((mc68kcpu), ea, res);
30017 }
30018
30019
30020 static void m68k_op_subx_8_mm_ay7(m68000_base_device* mc68kcpu)
30021 {
30022 uint32_t src = OPER_A7_PD_8(mc68kcpu);
30023 uint32_t ea = EA_AX_PD_8(mc68kcpu);
30024 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30025 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
30026
30027 (mc68kcpu)->n_flag = NFLAG_8(res);
30028 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
30029 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
30030
30031 res = MASK_OUT_ABOVE_8(res);
30032 (mc68kcpu)->not_z_flag |= res;
30033
30034 m68ki_write_8((mc68kcpu), ea, res);
30035 }
30036
30037
30038 static void m68k_op_subx_8_mm_axy7(m68000_base_device* mc68kcpu)
30039 {
30040 uint32_t src = OPER_A7_PD_8(mc68kcpu);
30041 uint32_t ea = EA_A7_PD_8(mc68kcpu);
30042 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30043 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
30044
30045 (mc68kcpu)->n_flag = NFLAG_8(res);
30046 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
30047 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
30048
30049 res = MASK_OUT_ABOVE_8(res);
30050 (mc68kcpu)->not_z_flag |= res;
30051
30052 m68ki_write_8((mc68kcpu), ea, res);
30053 }
30054
30055
30056 static void m68k_op_subx_8_mm(m68000_base_device* mc68kcpu)
30057 {
30058 uint32_t src = OPER_AY_PD_8(mc68kcpu);
30059 uint32_t ea = EA_AX_PD_8(mc68kcpu);
30060 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30061 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
30062
30063 (mc68kcpu)->n_flag = NFLAG_8(res);
30064 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res);
30065 (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res);
30066
30067 res = MASK_OUT_ABOVE_8(res);
30068 (mc68kcpu)->not_z_flag |= res;
30069
30070 m68ki_write_8((mc68kcpu), ea, res);
30071 }
30072
30073
30074 static void m68k_op_subx_16_mm(m68000_base_device* mc68kcpu)
30075 {
30076 uint32_t src = OPER_AY_PD_16(mc68kcpu);
30077 uint32_t ea = EA_AX_PD_16(mc68kcpu);
30078 uint32_t dst = m68ki_read_16((mc68kcpu), ea);
30079 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
30080
30081 (mc68kcpu)->n_flag = NFLAG_16(res);
30082 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res);
30083 (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res);
30084
30085 res = MASK_OUT_ABOVE_16(res);
30086 (mc68kcpu)->not_z_flag |= res;
30087
30088 m68ki_write_16((mc68kcpu), ea, res);
30089 }
30090
30091
30092 static void m68k_op_subx_32_mm(m68000_base_device* mc68kcpu)
30093 {
30094 uint32_t src = OPER_AY_PD_32(mc68kcpu);
30095 uint32_t ea = EA_AX_PD_32(mc68kcpu);
30096 uint32_t dst = m68ki_read_32((mc68kcpu), ea);
30097 uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu);
30098
30099 (mc68kcpu)->n_flag = NFLAG_32(res);
30100 (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res);
30101 (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res);
30102
30103 res = MASK_OUT_ABOVE_32(res);
30104 (mc68kcpu)->not_z_flag |= res;
30105
30106 m68ki_write_32((mc68kcpu), ea, res);
30107 }
30108
30109
30110 static void m68k_op_swap_32(m68000_base_device* mc68kcpu)
30111 {
30112 uint32_t* r_dst = &DY(mc68kcpu);
30113
30114 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(*r_dst<<16);
30115 *r_dst = (*r_dst>>16) | (mc68kcpu)->not_z_flag;
30116
30117 (mc68kcpu)->not_z_flag = *r_dst;
30118 (mc68kcpu)->n_flag = NFLAG_32(*r_dst);
30119 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30120 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30121 }
30122
30123
30124 static void m68k_op_tas_8_d(m68000_base_device* mc68kcpu)
30125 {
30126 uint32_t* r_dst = &DY(mc68kcpu);
30127
30128 (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(*r_dst);
30129 (mc68kcpu)->n_flag = NFLAG_8(*r_dst);
30130 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30131 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30132 *r_dst |= 0x80;
30133 }
30134
30135
30136 static void m68k_op_tas_8_ai(m68000_base_device* mc68kcpu)
30137 {
30138 uint32_t ea = EA_AY_AI_8(mc68kcpu);
30139 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30140
30141 (mc68kcpu)->not_z_flag = dst;
30142 (mc68kcpu)->n_flag = NFLAG_8(dst);
30143 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30144 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30145
30146 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30147 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30148 bus implementation.
30149 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30150 to fail to write back in order to function properly. */
30151 /* if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30152 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30153 else
30154 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30155 }
30156
30157
30158 static void m68k_op_tas_8_pi(m68000_base_device* mc68kcpu)
30159 {
30160 uint32_t ea = EA_AY_PI_8(mc68kcpu);
30161 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30162
30163 (mc68kcpu)->not_z_flag = dst;
30164 (mc68kcpu)->n_flag = NFLAG_8(dst);
30165 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30166 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30167
30168 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30169 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30170 bus implementation.
30171 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30172 to fail to write back in order to function properly. */
30173 /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30174 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30175 else
30176 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30177 }
30178
30179
30180 static void m68k_op_tas_8_pi7(m68000_base_device* mc68kcpu)
30181 {
30182 uint32_t ea = EA_A7_PI_8(mc68kcpu);
30183 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30184
30185 (mc68kcpu)->not_z_flag = dst;
30186 (mc68kcpu)->n_flag = NFLAG_8(dst);
30187 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30188 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30189
30190 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30191 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30192 bus implementation.
30193 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30194 to fail to write back in order to function properly. */
30195 /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30196 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30197 else
30198 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30199 }
30200
30201
30202 static void m68k_op_tas_8_pd(m68000_base_device* mc68kcpu)
30203 {
30204 uint32_t ea = EA_AY_PD_8(mc68kcpu);
30205 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30206
30207 (mc68kcpu)->not_z_flag = dst;
30208 (mc68kcpu)->n_flag = NFLAG_8(dst);
30209 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30210 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30211
30212 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30213 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30214 bus implementation.
30215 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30216 to fail to write back in order to function properly. */
30217 /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30218 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30219 else
30220 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30221 }
30222
30223
30224 static void m68k_op_tas_8_pd7(m68000_base_device* mc68kcpu)
30225 {
30226 uint32_t ea = EA_A7_PD_8(mc68kcpu);
30227 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30228
30229 (mc68kcpu)->not_z_flag = dst;
30230 (mc68kcpu)->n_flag = NFLAG_8(dst);
30231 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30232 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30233
30234 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30235 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30236 bus implementation.
30237 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30238 to fail to write back in order to function properly. */
30239 /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30240 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30241 else
30242 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30243 }
30244
30245
30246 static void m68k_op_tas_8_di(m68000_base_device* mc68kcpu)
30247 {
30248 uint32_t ea = EA_AY_DI_8(mc68kcpu);
30249 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30250
30251 (mc68kcpu)->not_z_flag = dst;
30252 (mc68kcpu)->n_flag = NFLAG_8(dst);
30253 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30254 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30255
30256 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30257 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30258 bus implementation.
30259 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30260 to fail to write back in order to function properly. */
30261 /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30262 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30263 else
30264 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30265 }
30266
30267
30268 static void m68k_op_tas_8_ix(m68000_base_device* mc68kcpu)
30269 {
30270 uint32_t ea = EA_AY_IX_8(mc68kcpu);
30271 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30272
30273 (mc68kcpu)->not_z_flag = dst;
30274 (mc68kcpu)->n_flag = NFLAG_8(dst);
30275 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30276 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30277
30278 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30279 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30280 bus implementation.
30281 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30282 to fail to write back in order to function properly. */
30283 /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30284 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30285 else
30286 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30287 }
30288
30289
30290 static void m68k_op_tas_8_aw(m68000_base_device* mc68kcpu)
30291 {
30292 uint32_t ea = EA_AW_8(mc68kcpu);
30293 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30294
30295 (mc68kcpu)->not_z_flag = dst;
30296 (mc68kcpu)->n_flag = NFLAG_8(dst);
30297 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30298 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30299
30300 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30301 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30302 bus implementation.
30303 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30304 to fail to write back in order to function properly. */
30305 /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30306 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30307 else
30308 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30309 }
30310
30311
30312 static void m68k_op_tas_8_al(m68000_base_device* mc68kcpu)
30313 {
30314 uint32_t ea = EA_AL_8(mc68kcpu);
30315 uint32_t dst = m68ki_read_8((mc68kcpu), ea);
30316
30317 (mc68kcpu)->not_z_flag = dst;
30318 (mc68kcpu)->n_flag = NFLAG_8(dst);
30319 (mc68kcpu)->v_flag = VFLAG_CLEAR;
30320 (mc68kcpu)->c_flag = CFLAG_CLEAR;
30321
30322 /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
30323 side effects (e.g. delaying DMA) or may fail to write back at all depending on the
30324 bus implementation.
30325 In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
30326 to fail to write back in order to function properly. */
30327 /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull())
30328 ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff);
30329 else
30330 m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/
30331 }
30332
30333
30334 static void m68k_op_trap(m68000_base_device* mc68kcpu)
30335 {
30336 /* Trap#n stacks exception frame type 0 */
30337 m68ki_exception_trapN((mc68kcpu), EXCEPTION_TRAP_BASE + ((mc68kcpu)->ir & 0xf)); /* HJB 990403 */
30338 }
30339
30340
30341 static void m68k_op_trapt(m68000_base_device* mc68kcpu)
30342 {
30343 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30344 {
30345 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30346 return;
30347 }
30348 m68ki_exception_illegal(mc68kcpu);
30349 }
30350
30351
30352 static void m68k_op_trapt_16(m68000_base_device* mc68kcpu)
30353 {
30354 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30355 {
30356 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30357 return;
30358 }
30359 m68ki_exception_illegal(mc68kcpu);
30360 }
30361
30362
30363 static void m68k_op_trapt_32(m68000_base_device* mc68kcpu)
30364 {
30365 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30366 {
30367 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30368 return;
30369 }
30370 m68ki_exception_illegal(mc68kcpu);
30371 }
30372
30373
30374 static void m68k_op_trapf(m68000_base_device* mc68kcpu)
30375 {
30376 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30377 {
30378 return;
30379 }
30380 m68ki_exception_illegal(mc68kcpu);
30381 }
30382
30383
30384 static void m68k_op_trapf_16(m68000_base_device* mc68kcpu)
30385 {
30386 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30387 {
30388 REG_PC(mc68kcpu) += 2;
30389 return;
30390 }
30391 m68ki_exception_illegal(mc68kcpu);
30392 }
30393
30394
30395 static void m68k_op_trapf_32(m68000_base_device* mc68kcpu)
30396 {
30397 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30398 {
30399 REG_PC(mc68kcpu) += 4;
30400 return;
30401 }
30402 m68ki_exception_illegal(mc68kcpu);
30403 }
30404
30405
30406 static void m68k_op_traphi(m68000_base_device* mc68kcpu)
30407 {
30408 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30409 {
30410 if(COND_HI(mc68kcpu))
30411 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30412 return;
30413 }
30414 m68ki_exception_illegal(mc68kcpu);
30415 }
30416
30417
30418 static void m68k_op_trapls(m68000_base_device* mc68kcpu)
30419 {
30420 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30421 {
30422 if(COND_LS(mc68kcpu))
30423 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30424 return;
30425 }
30426 m68ki_exception_illegal(mc68kcpu);
30427 }
30428
30429
30430 static void m68k_op_trapcc(m68000_base_device* mc68kcpu)
30431 {
30432 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30433 {
30434 if(COND_CC(mc68kcpu))
30435 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30436 return;
30437 }
30438 m68ki_exception_illegal(mc68kcpu);
30439 }
30440
30441
30442 static void m68k_op_trapcs(m68000_base_device* mc68kcpu)
30443 {
30444 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30445 {
30446 if(COND_CS(mc68kcpu))
30447 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30448 return;
30449 }
30450 m68ki_exception_illegal(mc68kcpu);
30451 }
30452
30453
30454 static void m68k_op_trapne(m68000_base_device* mc68kcpu)
30455 {
30456 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30457 {
30458 if(COND_NE(mc68kcpu))
30459 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30460 return;
30461 }
30462 m68ki_exception_illegal(mc68kcpu);
30463 }
30464
30465
30466 static void m68k_op_trapeq(m68000_base_device* mc68kcpu)
30467 {
30468 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30469 {
30470 if(COND_EQ(mc68kcpu))
30471 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30472 return;
30473 }
30474 m68ki_exception_illegal(mc68kcpu);
30475 }
30476
30477
30478 static void m68k_op_trapvc(m68000_base_device* mc68kcpu)
30479 {
30480 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30481 {
30482 if(COND_VC(mc68kcpu))
30483 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30484 return;
30485 }
30486 m68ki_exception_illegal(mc68kcpu);
30487 }
30488
30489
30490 static void m68k_op_trapvs(m68000_base_device* mc68kcpu)
30491 {
30492 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30493 {
30494 if(COND_VS(mc68kcpu))
30495 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30496 return;
30497 }
30498 m68ki_exception_illegal(mc68kcpu);
30499 }
30500
30501
30502 static void m68k_op_trappl(m68000_base_device* mc68kcpu)
30503 {
30504 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30505 {
30506 if(COND_PL(mc68kcpu))
30507 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30508 return;
30509 }
30510 m68ki_exception_illegal(mc68kcpu);
30511 }
30512
30513
30514 static void m68k_op_trapmi(m68000_base_device* mc68kcpu)
30515 {
30516 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30517 {
30518 if(COND_MI(mc68kcpu))
30519 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30520 return;
30521 }
30522 m68ki_exception_illegal(mc68kcpu);
30523 }
30524
30525
30526 static void m68k_op_trapge(m68000_base_device* mc68kcpu)
30527 {
30528 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30529 {
30530 if(COND_GE(mc68kcpu))
30531 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30532 return;
30533 }
30534 m68ki_exception_illegal(mc68kcpu);
30535 }
30536
30537
30538 static void m68k_op_traplt(m68000_base_device* mc68kcpu)
30539 {
30540 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30541 {
30542 if(COND_LT(mc68kcpu))
30543 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30544 return;
30545 }
30546 m68ki_exception_illegal(mc68kcpu);
30547 }
30548
30549
30550 static void m68k_op_trapgt(m68000_base_device* mc68kcpu)
30551 {
30552 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30553 {
30554 if(COND_GT(mc68kcpu))
30555 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30556 return;
30557 }
30558 m68ki_exception_illegal(mc68kcpu);
30559 }
30560
30561
30562 static void m68k_op_traple(m68000_base_device* mc68kcpu)
30563 {
30564 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30565 {
30566 if(COND_LE(mc68kcpu))
30567 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30568 return;
30569 }
30570 m68ki_exception_illegal(mc68kcpu);
30571 }
30572
30573
30574 static void m68k_op_traphi_16(m68000_base_device* mc68kcpu)
30575 {
30576 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30577 {
30578 if(COND_HI(mc68kcpu))
30579 {
30580 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30581 return;
30582 }
30583 REG_PC(mc68kcpu) += 2;
30584 return;
30585 }
30586 m68ki_exception_illegal(mc68kcpu);
30587 }
30588
30589
30590 static void m68k_op_trapls_16(m68000_base_device* mc68kcpu)
30591 {
30592 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30593 {
30594 if(COND_LS(mc68kcpu))
30595 {
30596 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30597 return;
30598 }
30599 REG_PC(mc68kcpu) += 2;
30600 return;
30601 }
30602 m68ki_exception_illegal(mc68kcpu);
30603 }
30604
30605
30606 static void m68k_op_trapcc_16(m68000_base_device* mc68kcpu)
30607 {
30608 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30609 {
30610 if(COND_CC(mc68kcpu))
30611 {
30612 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30613 return;
30614 }
30615 REG_PC(mc68kcpu) += 2;
30616 return;
30617 }
30618 m68ki_exception_illegal(mc68kcpu);
30619 }
30620
30621
30622 static void m68k_op_trapcs_16(m68000_base_device* mc68kcpu)
30623 {
30624 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30625 {
30626 if(COND_CS(mc68kcpu))
30627 {
30628 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30629 return;
30630 }
30631 REG_PC(mc68kcpu) += 2;
30632 return;
30633 }
30634 m68ki_exception_illegal(mc68kcpu);
30635 }
30636
30637
30638 static void m68k_op_trapne_16(m68000_base_device* mc68kcpu)
30639 {
30640 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30641 {
30642 if(COND_NE(mc68kcpu))
30643 {
30644 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30645 return;
30646 }
30647 REG_PC(mc68kcpu) += 2;
30648 return;
30649 }
30650 m68ki_exception_illegal(mc68kcpu);
30651 }
30652
30653
30654 static void m68k_op_trapeq_16(m68000_base_device* mc68kcpu)
30655 {
30656 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30657 {
30658 if(COND_EQ(mc68kcpu))
30659 {
30660 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30661 return;
30662 }
30663 REG_PC(mc68kcpu) += 2;
30664 return;
30665 }
30666 m68ki_exception_illegal(mc68kcpu);
30667 }
30668
30669
30670 static void m68k_op_trapvc_16(m68000_base_device* mc68kcpu)
30671 {
30672 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30673 {
30674 if(COND_VC(mc68kcpu))
30675 {
30676 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30677 return;
30678 }
30679 REG_PC(mc68kcpu) += 2;
30680 return;
30681 }
30682 m68ki_exception_illegal(mc68kcpu);
30683 }
30684
30685
30686 static void m68k_op_trapvs_16(m68000_base_device* mc68kcpu)
30687 {
30688 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30689 {
30690 if(COND_VS(mc68kcpu))
30691 {
30692 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30693 return;
30694 }
30695 REG_PC(mc68kcpu) += 2;
30696 return;
30697 }
30698 m68ki_exception_illegal(mc68kcpu);
30699 }
30700
30701
30702 static void m68k_op_trappl_16(m68000_base_device* mc68kcpu)
30703 {
30704 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30705 {
30706 if(COND_PL(mc68kcpu))
30707 {
30708 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30709 return;
30710 }
30711 REG_PC(mc68kcpu) += 2;
30712 return;
30713 }
30714 m68ki_exception_illegal(mc68kcpu);
30715 }
30716
30717
30718 static void m68k_op_trapmi_16(m68000_base_device* mc68kcpu)
30719 {
30720 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30721 {
30722 if(COND_MI(mc68kcpu))
30723 {
30724 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30725 return;
30726 }
30727 REG_PC(mc68kcpu) += 2;
30728 return;
30729 }
30730 m68ki_exception_illegal(mc68kcpu);
30731 }
30732
30733
30734 static void m68k_op_trapge_16(m68000_base_device* mc68kcpu)
30735 {
30736 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30737 {
30738 if(COND_GE(mc68kcpu))
30739 {
30740 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30741 return;
30742 }
30743 REG_PC(mc68kcpu) += 2;
30744 return;
30745 }
30746 m68ki_exception_illegal(mc68kcpu);
30747 }
30748
30749
30750 static void m68k_op_traplt_16(m68000_base_device* mc68kcpu)
30751 {
30752 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30753 {
30754 if(COND_LT(mc68kcpu))
30755 {
30756 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30757 return;
30758 }
30759 REG_PC(mc68kcpu) += 2;
30760 return;
30761 }
30762 m68ki_exception_illegal(mc68kcpu);
30763 }
30764
30765
30766 static void m68k_op_trapgt_16(m68000_base_device* mc68kcpu)
30767 {
30768 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30769 {
30770 if(COND_GT(mc68kcpu))
30771 {
30772 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30773 return;
30774 }
30775 REG_PC(mc68kcpu) += 2;
30776 return;
30777 }
30778 m68ki_exception_illegal(mc68kcpu);
30779 }
30780
30781
30782 static void m68k_op_traple_16(m68000_base_device* mc68kcpu)
30783 {
30784 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30785 {
30786 if(COND_LE(mc68kcpu))
30787 {
30788 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30789 return;
30790 }
30791 REG_PC(mc68kcpu) += 2;
30792 return;
30793 }
30794 m68ki_exception_illegal(mc68kcpu);
30795 }
30796
30797
30798 static void m68k_op_traphi_32(m68000_base_device* mc68kcpu)
30799 {
30800 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30801 {
30802 if(COND_HI(mc68kcpu))
30803 {
30804 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30805 return;
30806 }
30807 REG_PC(mc68kcpu) += 4;
30808 return;
30809 }
30810 m68ki_exception_illegal(mc68kcpu);
30811 }
30812
30813
30814 static void m68k_op_trapls_32(m68000_base_device* mc68kcpu)
30815 {
30816 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30817 {
30818 if(COND_LS(mc68kcpu))
30819 {
30820 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30821 return;
30822 }
30823 REG_PC(mc68kcpu) += 4;
30824 return;
30825 }
30826 m68ki_exception_illegal(mc68kcpu);
30827 }
30828
30829
30830 static void m68k_op_trapcc_32(m68000_base_device* mc68kcpu)
30831 {
30832 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30833 {
30834 if(COND_CC(mc68kcpu))
30835 {
30836 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30837 return;
30838 }
30839 REG_PC(mc68kcpu) += 4;
30840 return;
30841 }
30842 m68ki_exception_illegal(mc68kcpu);
30843 }
30844
30845
30846 static void m68k_op_trapcs_32(m68000_base_device* mc68kcpu)
30847 {
30848 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30849 {
30850 if(COND_CS(mc68kcpu))
30851 {
30852 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30853 return;
30854 }
30855 REG_PC(mc68kcpu) += 4;
30856 return;
30857 }
30858 m68ki_exception_illegal(mc68kcpu);
30859 }
30860
30861
30862 static void m68k_op_trapne_32(m68000_base_device* mc68kcpu)
30863 {
30864 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30865 {
30866 if(COND_NE(mc68kcpu))
30867 {
30868 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30869 return;
30870 }
30871 REG_PC(mc68kcpu) += 4;
30872 return;
30873 }
30874 m68ki_exception_illegal(mc68kcpu);
30875 }
30876
30877
30878 static void m68k_op_trapeq_32(m68000_base_device* mc68kcpu)
30879 {
30880 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30881 {
30882 if(COND_EQ(mc68kcpu))
30883 {
30884 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30885 return;
30886 }
30887 REG_PC(mc68kcpu) += 4;
30888 return;
30889 }
30890 m68ki_exception_illegal(mc68kcpu);
30891 }
30892
30893
30894 static void m68k_op_trapvc_32(m68000_base_device* mc68kcpu)
30895 {
30896 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30897 {
30898 if(COND_VC(mc68kcpu))
30899 {
30900 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30901 return;
30902 }
30903 REG_PC(mc68kcpu) += 4;
30904 return;
30905 }
30906 m68ki_exception_illegal(mc68kcpu);
30907 }
30908
30909
30910 static void m68k_op_trapvs_32(m68000_base_device* mc68kcpu)
30911 {
30912 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30913 {
30914 if(COND_VS(mc68kcpu))
30915 {
30916 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30917 return;
30918 }
30919 REG_PC(mc68kcpu) += 4;
30920 return;
30921 }
30922 m68ki_exception_illegal(mc68kcpu);
30923 }
30924
30925
30926 static void m68k_op_trappl_32(m68000_base_device* mc68kcpu)
30927 {
30928 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30929 {
30930 if(COND_PL(mc68kcpu))
30931 {
30932 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30933 return;
30934 }
30935 REG_PC(mc68kcpu) += 4;
30936 return;
30937 }
30938 m68ki_exception_illegal(mc68kcpu);
30939 }
30940
30941
30942 static void m68k_op_trapmi_32(m68000_base_device* mc68kcpu)
30943 {
30944 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30945 {
30946 if(COND_MI(mc68kcpu))
30947 {
30948 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30949 return;
30950 }
30951 REG_PC(mc68kcpu) += 4;
30952 return;
30953 }
30954 m68ki_exception_illegal(mc68kcpu);
30955 }
30956
30957
30958 static void m68k_op_trapge_32(m68000_base_device* mc68kcpu)
30959 {
30960 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30961 {
30962 if(COND_GE(mc68kcpu))
30963 {
30964 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30965 return;
30966 }
30967 REG_PC(mc68kcpu) += 4;
30968 return;
30969 }
30970 m68ki_exception_illegal(mc68kcpu);
30971 }
30972
30973
30974 static void m68k_op_traplt_32(m68000_base_device* mc68kcpu)
30975 {
30976 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30977 {
30978 if(COND_LT(mc68kcpu))
30979 {
30980 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30981 return;
30982 }
30983 REG_PC(mc68kcpu) += 4;
30984 return;
30985 }
30986 m68ki_exception_illegal(mc68kcpu);
30987 }
30988
30989
30990 static void m68k_op_trapgt_32(m68000_base_device* mc68kcpu)
30991 {
30992 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
30993 {
30994 if(COND_GT(mc68kcpu))
30995 {
30996 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
30997 return;
30998 }
30999 REG_PC(mc68kcpu) += 4;
31000 return;
31001 }
31002 m68ki_exception_illegal(mc68kcpu);
31003 }
31004
31005
31006 static void m68k_op_traple_32(m68000_base_device* mc68kcpu)
31007 {
31008 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31009 {
31010 if(COND_LE(mc68kcpu))
31011 {
31012 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
31013 return;
31014 }
31015 REG_PC(mc68kcpu) += 4;
31016 return;
31017 }
31018 m68ki_exception_illegal(mc68kcpu);
31019 }
31020
31021
31022 static void m68k_op_trapv(m68000_base_device* mc68kcpu)
31023 {
31024 if(COND_VC(mc68kcpu))
31025 {
31026 return;
31027 }
31028 m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */
31029 }
31030
31031
31032 static void m68k_op_tst_8_d(m68000_base_device* mc68kcpu)
31033 {
31034 uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu));
31035
31036 (mc68kcpu)->n_flag = NFLAG_8(res);
31037 (mc68kcpu)->not_z_flag = res;
31038 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31039 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31040 }
31041
31042
31043 static void m68k_op_tst_8_ai(m68000_base_device* mc68kcpu)
31044 {
31045 uint32_t res = OPER_AY_AI_8(mc68kcpu);
31046
31047 (mc68kcpu)->n_flag = NFLAG_8(res);
31048 (mc68kcpu)->not_z_flag = res;
31049 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31050 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31051 }
31052
31053
31054 static void m68k_op_tst_8_pi(m68000_base_device* mc68kcpu)
31055 {
31056 uint32_t res = OPER_AY_PI_8(mc68kcpu);
31057
31058 (mc68kcpu)->n_flag = NFLAG_8(res);
31059 (mc68kcpu)->not_z_flag = res;
31060 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31061 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31062 }
31063
31064
31065 static void m68k_op_tst_8_pi7(m68000_base_device* mc68kcpu)
31066 {
31067 uint32_t res = OPER_A7_PI_8(mc68kcpu);
31068
31069 (mc68kcpu)->n_flag = NFLAG_8(res);
31070 (mc68kcpu)->not_z_flag = res;
31071 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31072 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31073 }
31074
31075
31076 static void m68k_op_tst_8_pd(m68000_base_device* mc68kcpu)
31077 {
31078 uint32_t res = OPER_AY_PD_8(mc68kcpu);
31079
31080 (mc68kcpu)->n_flag = NFLAG_8(res);
31081 (mc68kcpu)->not_z_flag = res;
31082 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31083 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31084 }
31085
31086
31087 static void m68k_op_tst_8_pd7(m68000_base_device* mc68kcpu)
31088 {
31089 uint32_t res = OPER_A7_PD_8(mc68kcpu);
31090
31091 (mc68kcpu)->n_flag = NFLAG_8(res);
31092 (mc68kcpu)->not_z_flag = res;
31093 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31094 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31095 }
31096
31097
31098 static void m68k_op_tst_8_di(m68000_base_device* mc68kcpu)
31099 {
31100 uint32_t res = OPER_AY_DI_8(mc68kcpu);
31101
31102 (mc68kcpu)->n_flag = NFLAG_8(res);
31103 (mc68kcpu)->not_z_flag = res;
31104 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31105 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31106 }
31107
31108
31109 static void m68k_op_tst_8_ix(m68000_base_device* mc68kcpu)
31110 {
31111 uint32_t res = OPER_AY_IX_8(mc68kcpu);
31112
31113 (mc68kcpu)->n_flag = NFLAG_8(res);
31114 (mc68kcpu)->not_z_flag = res;
31115 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31116 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31117 }
31118
31119
31120 static void m68k_op_tst_8_aw(m68000_base_device* mc68kcpu)
31121 {
31122 uint32_t res = OPER_AW_8(mc68kcpu);
31123
31124 (mc68kcpu)->n_flag = NFLAG_8(res);
31125 (mc68kcpu)->not_z_flag = res;
31126 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31127 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31128 }
31129
31130
31131 static void m68k_op_tst_8_al(m68000_base_device* mc68kcpu)
31132 {
31133 uint32_t res = OPER_AL_8(mc68kcpu);
31134
31135 (mc68kcpu)->n_flag = NFLAG_8(res);
31136 (mc68kcpu)->not_z_flag = res;
31137 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31138 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31139 }
31140
31141
31142 static void m68k_op_tst_8_pcdi(m68000_base_device* mc68kcpu)
31143 {
31144 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31145 {
31146 uint32_t res = OPER_PCDI_8(mc68kcpu);
31147
31148 (mc68kcpu)->n_flag = NFLAG_8(res);
31149 (mc68kcpu)->not_z_flag = res;
31150 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31151 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31152 return;
31153 }
31154 m68ki_exception_illegal(mc68kcpu);
31155 }
31156
31157
31158 static void m68k_op_tst_8_pcix(m68000_base_device* mc68kcpu)
31159 {
31160 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31161 {
31162 uint32_t res = OPER_PCIX_8(mc68kcpu);
31163
31164 (mc68kcpu)->n_flag = NFLAG_8(res);
31165 (mc68kcpu)->not_z_flag = res;
31166 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31167 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31168 return;
31169 }
31170 m68ki_exception_illegal(mc68kcpu);
31171 }
31172
31173
31174 static void m68k_op_tst_8_i(m68000_base_device* mc68kcpu)
31175 {
31176 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31177 {
31178 uint32_t res = OPER_I_8(mc68kcpu);
31179
31180 (mc68kcpu)->n_flag = NFLAG_8(res);
31181 (mc68kcpu)->not_z_flag = res;
31182 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31183 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31184 return;
31185 }
31186 m68ki_exception_illegal(mc68kcpu);
31187 }
31188
31189
31190 static void m68k_op_tst_16_d(m68000_base_device* mc68kcpu)
31191 {
31192 uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu));
31193
31194 (mc68kcpu)->n_flag = NFLAG_16(res);
31195 (mc68kcpu)->not_z_flag = res;
31196 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31197 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31198 }
31199
31200
31201 static void m68k_op_tst_16_a(m68000_base_device* mc68kcpu)
31202 {
31203 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31204 {
31205 uint32_t res = MAKE_INT_16(AY(mc68kcpu));
31206
31207 (mc68kcpu)->n_flag = NFLAG_16(res);
31208 (mc68kcpu)->not_z_flag = res;
31209 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31210 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31211 return;
31212 }
31213 m68ki_exception_illegal(mc68kcpu);
31214 }
31215
31216
31217 static void m68k_op_tst_16_ai(m68000_base_device* mc68kcpu)
31218 {
31219 uint32_t res = OPER_AY_AI_16(mc68kcpu);
31220
31221 (mc68kcpu)->n_flag = NFLAG_16(res);
31222 (mc68kcpu)->not_z_flag = res;
31223 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31224 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31225 }
31226
31227
31228 static void m68k_op_tst_16_pi(m68000_base_device* mc68kcpu)
31229 {
31230 uint32_t res = OPER_AY_PI_16(mc68kcpu);
31231
31232 (mc68kcpu)->n_flag = NFLAG_16(res);
31233 (mc68kcpu)->not_z_flag = res;
31234 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31235 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31236 }
31237
31238
31239 static void m68k_op_tst_16_pd(m68000_base_device* mc68kcpu)
31240 {
31241 uint32_t res = OPER_AY_PD_16(mc68kcpu);
31242
31243 (mc68kcpu)->n_flag = NFLAG_16(res);
31244 (mc68kcpu)->not_z_flag = res;
31245 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31246 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31247 }
31248
31249
31250 static void m68k_op_tst_16_di(m68000_base_device* mc68kcpu)
31251 {
31252 uint32_t res = OPER_AY_DI_16(mc68kcpu);
31253
31254 (mc68kcpu)->n_flag = NFLAG_16(res);
31255 (mc68kcpu)->not_z_flag = res;
31256 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31257 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31258 }
31259
31260
31261 static void m68k_op_tst_16_ix(m68000_base_device* mc68kcpu)
31262 {
31263 uint32_t res = OPER_AY_IX_16(mc68kcpu);
31264
31265 (mc68kcpu)->n_flag = NFLAG_16(res);
31266 (mc68kcpu)->not_z_flag = res;
31267 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31268 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31269 }
31270
31271
31272 static void m68k_op_tst_16_aw(m68000_base_device* mc68kcpu)
31273 {
31274 uint32_t res = OPER_AW_16(mc68kcpu);
31275
31276 (mc68kcpu)->n_flag = NFLAG_16(res);
31277 (mc68kcpu)->not_z_flag = res;
31278 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31279 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31280 }
31281
31282
31283 static void m68k_op_tst_16_al(m68000_base_device* mc68kcpu)
31284 {
31285 uint32_t res = OPER_AL_16(mc68kcpu);
31286
31287 (mc68kcpu)->n_flag = NFLAG_16(res);
31288 (mc68kcpu)->not_z_flag = res;
31289 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31290 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31291 }
31292
31293
31294 static void m68k_op_tst_16_pcdi(m68000_base_device* mc68kcpu)
31295 {
31296 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31297 {
31298 uint32_t res = OPER_PCDI_16(mc68kcpu);
31299
31300 (mc68kcpu)->n_flag = NFLAG_16(res);
31301 (mc68kcpu)->not_z_flag = res;
31302 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31303 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31304 return;
31305 }
31306 m68ki_exception_illegal(mc68kcpu);
31307 }
31308
31309
31310 static void m68k_op_tst_16_pcix(m68000_base_device* mc68kcpu)
31311 {
31312 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31313 {
31314 uint32_t res = OPER_PCIX_16(mc68kcpu);
31315
31316 (mc68kcpu)->n_flag = NFLAG_16(res);
31317 (mc68kcpu)->not_z_flag = res;
31318 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31319 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31320 return;
31321 }
31322 m68ki_exception_illegal(mc68kcpu);
31323 }
31324
31325
31326 static void m68k_op_tst_16_i(m68000_base_device* mc68kcpu)
31327 {
31328 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31329 {
31330 uint32_t res = OPER_I_16(mc68kcpu);
31331
31332 (mc68kcpu)->n_flag = NFLAG_16(res);
31333 (mc68kcpu)->not_z_flag = res;
31334 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31335 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31336 return;
31337 }
31338 m68ki_exception_illegal(mc68kcpu);
31339 }
31340
31341
31342 static void m68k_op_tst_32_d(m68000_base_device* mc68kcpu)
31343 {
31344 uint32_t res = DY(mc68kcpu);
31345
31346 (mc68kcpu)->n_flag = NFLAG_32(res);
31347 (mc68kcpu)->not_z_flag = res;
31348 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31349 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31350 }
31351
31352
31353 static void m68k_op_tst_32_a(m68000_base_device* mc68kcpu)
31354 {
31355 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31356 {
31357 uint32_t res = AY(mc68kcpu);
31358
31359 (mc68kcpu)->n_flag = NFLAG_32(res);
31360 (mc68kcpu)->not_z_flag = res;
31361 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31362 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31363 return;
31364 }
31365 m68ki_exception_illegal(mc68kcpu);
31366 }
31367
31368
31369 static void m68k_op_tst_32_ai(m68000_base_device* mc68kcpu)
31370 {
31371 uint32_t res = OPER_AY_AI_32(mc68kcpu);
31372
31373 (mc68kcpu)->n_flag = NFLAG_32(res);
31374 (mc68kcpu)->not_z_flag = res;
31375 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31376 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31377 }
31378
31379
31380 static void m68k_op_tst_32_pi(m68000_base_device* mc68kcpu)
31381 {
31382 uint32_t res = OPER_AY_PI_32(mc68kcpu);
31383
31384 (mc68kcpu)->n_flag = NFLAG_32(res);
31385 (mc68kcpu)->not_z_flag = res;
31386 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31387 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31388 }
31389
31390
31391 static void m68k_op_tst_32_pd(m68000_base_device* mc68kcpu)
31392 {
31393 uint32_t res = OPER_AY_PD_32(mc68kcpu);
31394
31395 (mc68kcpu)->n_flag = NFLAG_32(res);
31396 (mc68kcpu)->not_z_flag = res;
31397 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31398 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31399 }
31400
31401
31402 static void m68k_op_tst_32_di(m68000_base_device* mc68kcpu)
31403 {
31404 uint32_t res = OPER_AY_DI_32(mc68kcpu);
31405
31406 (mc68kcpu)->n_flag = NFLAG_32(res);
31407 (mc68kcpu)->not_z_flag = res;
31408 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31409 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31410 }
31411
31412
31413 static void m68k_op_tst_32_ix(m68000_base_device* mc68kcpu)
31414 {
31415 uint32_t res = OPER_AY_IX_32(mc68kcpu);
31416
31417 (mc68kcpu)->n_flag = NFLAG_32(res);
31418 (mc68kcpu)->not_z_flag = res;
31419 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31420 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31421 }
31422
31423
31424 static void m68k_op_tst_32_aw(m68000_base_device* mc68kcpu)
31425 {
31426 uint32_t res = OPER_AW_32(mc68kcpu);
31427
31428 (mc68kcpu)->n_flag = NFLAG_32(res);
31429 (mc68kcpu)->not_z_flag = res;
31430 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31431 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31432 }
31433
31434
31435 static void m68k_op_tst_32_al(m68000_base_device* mc68kcpu)
31436 {
31437 uint32_t res = OPER_AL_32(mc68kcpu);
31438
31439 (mc68kcpu)->n_flag = NFLAG_32(res);
31440 (mc68kcpu)->not_z_flag = res;
31441 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31442 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31443 }
31444
31445
31446 static void m68k_op_tst_32_pcdi(m68000_base_device* mc68kcpu)
31447 {
31448 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31449 {
31450 uint32_t res = OPER_PCDI_32(mc68kcpu);
31451
31452 (mc68kcpu)->n_flag = NFLAG_32(res);
31453 (mc68kcpu)->not_z_flag = res;
31454 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31455 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31456 return;
31457 }
31458 m68ki_exception_illegal(mc68kcpu);
31459 }
31460
31461
31462 static void m68k_op_tst_32_pcix(m68000_base_device* mc68kcpu)
31463 {
31464 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31465 {
31466 uint32_t res = OPER_PCIX_32(mc68kcpu);
31467
31468 (mc68kcpu)->n_flag = NFLAG_32(res);
31469 (mc68kcpu)->not_z_flag = res;
31470 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31471 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31472 return;
31473 }
31474 m68ki_exception_illegal(mc68kcpu);
31475 }
31476
31477
31478 static void m68k_op_tst_32_i(m68000_base_device* mc68kcpu)
31479 {
31480 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31481 {
31482 uint32_t res = OPER_I_32(mc68kcpu);
31483
31484 (mc68kcpu)->n_flag = NFLAG_32(res);
31485 (mc68kcpu)->not_z_flag = res;
31486 (mc68kcpu)->v_flag = VFLAG_CLEAR;
31487 (mc68kcpu)->c_flag = CFLAG_CLEAR;
31488 return;
31489 }
31490 m68ki_exception_illegal(mc68kcpu);
31491 }
31492
31493
31494 static void m68k_op_unlk_32_a7(m68000_base_device* mc68kcpu)
31495 {
31496 REG_A(mc68kcpu)[7] = m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[7]);
31497 }
31498
31499
31500 static void m68k_op_unlk_32(m68000_base_device* mc68kcpu)
31501 {
31502 uint32_t* r_dst = &AY(mc68kcpu);
31503
31504 REG_A(mc68kcpu)[7] = *r_dst;
31505 *r_dst = m68ki_pull_32(mc68kcpu);
31506 }
31507
31508
31509 static void m68k_op_unpk_16_rr(m68000_base_device* mc68kcpu)
31510 {
31511 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31512 {
31513 /* Note: DX(mc68kcpu) and DY(mc68kcpu) are reversed in Motorola's docs */
31514 uint32_t src = DY(mc68kcpu);
31515 uint32_t* r_dst = &DX(mc68kcpu);
31516
31517 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu)) & 0xffff);
31518 return;
31519 }
31520 m68ki_exception_illegal(mc68kcpu);
31521 }
31522
31523
31524 static void m68k_op_unpk_16_mm_ax7(m68000_base_device* mc68kcpu)
31525 {
31526 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31527 {
31528 /* Note: AX and AY are reversed in Motorola's docs */
31529 uint32_t src = OPER_AY_PD_8(mc68kcpu);
31530 uint32_t ea_dst;
31531
31532 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu);
31533 ea_dst = EA_A7_PD_8(mc68kcpu);
31534 m68ki_write_8((mc68kcpu), ea_dst, src & 0xff);
31535 ea_dst = EA_A7_PD_8(mc68kcpu);
31536 m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff);
31537 return;
31538 }
31539 m68ki_exception_illegal(mc68kcpu);
31540 }
31541
31542
31543 static void m68k_op_unpk_16_mm_ay7(m68000_base_device* mc68kcpu)
31544 {
31545 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31546 {
31547 /* Note: AX and AY are reversed in Motorola's docs */
31548 uint32_t src = OPER_A7_PD_8(mc68kcpu);
31549 uint32_t ea_dst;
31550
31551 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu);
31552 ea_dst = EA_AX_PD_8(mc68kcpu);
31553 m68ki_write_8((mc68kcpu), ea_dst, src & 0xff);
31554 ea_dst = EA_AX_PD_8(mc68kcpu);
31555 m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff);
31556 return;
31557 }
31558 m68ki_exception_illegal(mc68kcpu);
31559 }
31560
31561
31562 static void m68k_op_unpk_16_mm_axy7(m68000_base_device* mc68kcpu)
31563 {
31564 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31565 {
31566 uint32_t src = OPER_A7_PD_8(mc68kcpu);
31567 uint32_t ea_dst;
31568
31569 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu);
31570 ea_dst = EA_A7_PD_8(mc68kcpu);
31571 m68ki_write_8((mc68kcpu), ea_dst, src & 0xff);
31572 ea_dst = EA_A7_PD_8(mc68kcpu);
31573 m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff);
31574 return;
31575 }
31576 m68ki_exception_illegal(mc68kcpu);
31577 }
31578
31579
31580 static void m68k_op_unpk_16_mm(m68000_base_device* mc68kcpu)
31581 {
31582 if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type))
31583 {
31584 /* Note: AX and AY are reversed in Motorola's docs */
31585 uint32_t src = OPER_AY_PD_8(mc68kcpu);
31586 uint32_t ea_dst;
31587
31588 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu);
31589 ea_dst = EA_AX_PD_8(mc68kcpu);
31590 m68ki_write_8((mc68kcpu), ea_dst, src & 0xff);
31591 ea_dst = EA_AX_PD_8(mc68kcpu);
31592 m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff);
31593 return;
31594 }
31595 m68ki_exception_illegal(mc68kcpu);
31596 }
31597
31598
31599 static void m68k_op_cinv_32(m68000_base_device* mc68kcpu)
31600 {
31601 m68ki_exception_1111(mc68kcpu);
31602 }
31603
31604
31605 static void m68k_op_cpush_32(m68000_base_device* mc68kcpu)
31606 {
31607
31608 m68ki_exception_1111(mc68kcpu);
31609 }
31610
31611
31612 /* ======================================================================== */
31613 /* ============================== END OF FILE ============================= */
31614 /* ======================================================================== */
31615
31616
31617 /* ======================================================================== */
31618 /* ========================= OPCODE TABLE BUILDER ========================= */
31619 /* ======================================================================== */
31620
31621 #include "m68kops.h"
31622
31623 #define NUM_CPU_TYPES 7
31624
31625 void (*m68ki_instruction_jump_table[NUM_CPU_TYPES][0x10000])(m68000_base_device *m68k); /* opcode handler jump table */
31626 unsigned char m68ki_cycles[NUM_CPU_TYPES][0x10000]; /* Cycles used by CPU type */
31627
31628 /* This is used to generate the opcode handler jump table */
31629 typedef struct
31630 {
31631 void (*opcode_handler)(m68000_base_device *m68k); /* handler function */
31632 unsigned int mask; /* mask on opcode */
31633 unsigned int match; /* what to match after masking */
31634 unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */
31635 } opcode_handler_struct;
31636
31637
31638 /* Opcode handler table */
31639 static const opcode_handler_struct m68k_opcode_handler_table[] =
31640 {
31641 /* function mask match 000 010 020 040 */
31642
31643
31644 {m68k_op_1010, 0xf000, 0xa000, { 4, 4, 4, 4, 4, 4, 4}},
31645 {m68k_op_1111, 0xf000, 0xf000, { 4, 4, 4, 4, 4, 4, 4}},
31646 {m68k_op_moveq_32, 0xf100, 0x7000, { 4, 4, 2, 2, 2, 2, 2}},
31647 {m68k_op_cpbcc_32, 0xf180, 0xf080, {255, 255, 4, 4, 255, 255, 255}},
31648 {m68k_op_cpgen_32, 0xf1c0, 0xf000, {255, 255, 4, 4, 255, 255, 255}},
31649 {m68k_op_cpscc_32, 0xf1c0, 0xf040, {255, 255, 4, 4, 255, 255, 255}},
31650 {m68k_op_pmmu_32, 0xfe00, 0xf000, {255, 255, 8, 8, 8, 8, 8}},
31651 {m68k_op_bra_8, 0xff00, 0x6000, { 10, 10, 10, 10, 10, 10, 10}},
31652 {m68k_op_bsr_8, 0xff00, 0x6100, { 18, 18, 7, 7, 7, 7, 7}},
31653 {m68k_op_bhi_8, 0xff00, 0x6200, { 10, 10, 6, 6, 6, 6, 6}},
31654 {m68k_op_bls_8, 0xff00, 0x6300, { 10, 10, 6, 6, 6, 6, 6}},
31655 {m68k_op_bcc_8, 0xff00, 0x6400, { 10, 10, 6, 6, 6, 6, 6}},
31656 {m68k_op_bcs_8, 0xff00, 0x6500, { 10, 10, 6, 6, 6, 6, 6}},
31657 {m68k_op_bne_8, 0xff00, 0x6600, { 10, 10, 6, 6, 6, 6, 6}},
31658 {m68k_op_beq_8, 0xff00, 0x6700, { 10, 10, 6, 6, 6, 6, 6}},
31659 {m68k_op_bvc_8, 0xff00, 0x6800, { 10, 10, 6, 6, 6, 6, 6}},
31660 {m68k_op_bvs_8, 0xff00, 0x6900, { 10, 10, 6, 6, 6, 6, 6}},
31661 {m68k_op_bpl_8, 0xff00, 0x6a00, { 10, 10, 6, 6, 6, 6, 6}},
31662 {m68k_op_bmi_8, 0xff00, 0x6b00, { 10, 10, 6, 6, 6, 6, 6}},
31663 {m68k_op_bge_8, 0xff00, 0x6c00, { 10, 10, 6, 6, 6, 6, 6}},
31664 {m68k_op_blt_8, 0xff00, 0x6d00, { 10, 10, 6, 6, 6, 6, 6}},
31665 {m68k_op_bgt_8, 0xff00, 0x6e00, { 10, 10, 6, 6, 6, 6, 6}},
31666 {m68k_op_ble_8, 0xff00, 0x6f00, { 10, 10, 6, 6, 6, 6, 6}},
31667 {m68k_op_040fpu0_32, 0xff00, 0xf200, {255, 255, 0, 0, 0, 0, 255}},
31668 {m68k_op_040fpu1_32, 0xff00, 0xf300, {255, 255, 0, 0, 0, 0, 255}},
31669 {m68k_op_cinv_32, 0xff20, 0xf400, {255, 255, 255, 255, 16, 255, 255}},
31670 {m68k_op_cpush_32, 0xff20, 0xf420, {255, 255, 255, 255, 16, 255, 255}},
31671 {m68k_op_btst_32_r_d, 0xf1f8, 0x0100, { 6, 6, 4, 4, 4, 4, 4}},
31672 {m68k_op_movep_16_er, 0xf1f8, 0x0108, { 16, 16, 12, 12, 12, 12, 12}},
31673 {m68k_op_btst_8_r_ai, 0xf1f8, 0x0110, { 8, 8, 8, 8, 8, 8, 4}},
31674 {m68k_op_btst_8_r_pi, 0xf1f8, 0x0118, { 8, 8, 8, 8, 8, 8, 4}},
31675 {m68k_op_btst_8_r_pd, 0xf1f8, 0x0120, { 10, 10, 9, 9, 9, 9, 4}},
31676 {m68k_op_btst_8_r_di, 0xf1f8, 0x0128, { 12, 12, 9, 9, 9, 9, 4}},
31677 {m68k_op_btst_8_r_ix, 0xf1f8, 0x0130, { 14, 14, 11, 11, 11, 11, 4}},
31678 {m68k_op_bchg_32_r_d, 0xf1f8, 0x0140, { 8, 8, 4, 4, 4, 4, 4}},
31679 {m68k_op_movep_32_er, 0xf1f8, 0x0148, { 24, 24, 18, 18, 18, 18, 18}},
31680 {m68k_op_bchg_8_r_ai, 0xf1f8, 0x0150, { 12, 12, 8, 8, 8, 8, 4}},
31681 {m68k_op_bchg_8_r_pi, 0xf1f8, 0x0158, { 12, 12, 8, 8, 8, 8, 4}},
31682 {m68k_op_bchg_8_r_pd, 0xf1f8, 0x0160, { 14, 14, 9, 9, 9, 9, 4}},
31683 {m68k_op_bchg_8_r_di, 0xf1f8, 0x0168, { 16, 16, 9, 9, 9, 9, 4}},
31684 {m68k_op_bchg_8_r_ix, 0xf1f8, 0x0170, { 18, 18, 11, 11, 11, 11, 4}},
31685 {m68k_op_bclr_32_r_d, 0xf1f8, 0x0180, { 10, 10, 4, 4, 4, 4, 4}},
31686 {m68k_op_movep_16_re, 0xf1f8, 0x0188, { 16, 16, 11, 11, 11, 11, 11}},
31687 {m68k_op_bclr_8_r_ai, 0xf1f8, 0x0190, { 12, 14, 8, 8, 8, 8, 4}},
31688 {m68k_op_bclr_8_r_pi, 0xf1f8, 0x0198, { 12, 14, 8, 8, 8, 8, 4}},
31689 {m68k_op_bclr_8_r_pd, 0xf1f8, 0x01a0, { 14, 16, 9, 9, 9, 9, 4}},
31690 {m68k_op_bclr_8_r_di, 0xf1f8, 0x01a8, { 16, 18, 9, 9, 9, 9, 4}},
31691 {m68k_op_bclr_8_r_ix, 0xf1f8, 0x01b0, { 18, 20, 11, 11, 11, 11, 4}},
31692 {m68k_op_bset_32_r_d, 0xf1f8, 0x01c0, { 8, 8, 4, 4, 4, 4, 4}},
31693 {m68k_op_movep_32_re, 0xf1f8, 0x01c8, { 24, 24, 17, 17, 17, 17, 17}},
31694 {m68k_op_bset_8_r_ai, 0xf1f8, 0x01d0, { 12, 12, 8, 8, 8, 8, 4}},
31695 {m68k_op_bset_8_r_pi, 0xf1f8, 0x01d8, { 12, 12, 8, 8, 8, 8, 4}},
31696 {m68k_op_bset_8_r_pd, 0xf1f8, 0x01e0, { 14, 14, 9, 9, 9, 9, 4}},
31697 {m68k_op_bset_8_r_di, 0xf1f8, 0x01e8, { 16, 16, 9, 9, 9, 9, 4}},
31698 {m68k_op_bset_8_r_ix, 0xf1f8, 0x01f0, { 18, 18, 11, 11, 11, 11, 4}},
31699 {m68k_op_move_8_d_d, 0xf1f8, 0x1000, { 4, 4, 2, 2, 2, 2, 2}},
31700 {m68k_op_move_8_d_ai, 0xf1f8, 0x1010, { 8, 8, 6, 6, 6, 6, 2}},
31701 {m68k_op_move_8_d_pi, 0xf1f8, 0x1018, { 8, 8, 6, 6, 6, 6, 2}},
31702 {m68k_op_move_8_d_pd, 0xf1f8, 0x1020, { 10, 10, 7, 7, 7, 7, 2}},
31703 {m68k_op_move_8_d_di, 0xf1f8, 0x1028, { 12, 12, 7, 7, 7, 7, 2}},
31704 {m68k_op_move_8_d_ix, 0xf1f8, 0x1030, { 14, 14, 9, 9, 9, 9, 2}},
31705 {m68k_op_move_8_ai_d, 0xf1f8, 0x1080, { 8, 8, 4, 4, 4, 4, 4}},
31706 {m68k_op_move_8_ai_ai, 0xf1f8, 0x1090, { 12, 12, 8, 8, 8, 8, 4}},
31707 {m68k_op_move_8_ai_pi, 0xf1f8, 0x1098, { 12, 12, 8, 8, 8, 8, 4}},
31708 {m68k_op_move_8_ai_pd, 0xf1f8, 0x10a0, { 14, 14, 9, 9, 9, 9, 4}},
31709 {m68k_op_move_8_ai_di, 0xf1f8, 0x10a8, { 16, 16, 9, 9, 9, 9, 4}},
31710 {m68k_op_move_8_ai_ix, 0xf1f8, 0x10b0, { 18, 18, 11, 11, 11, 11, 4}},
31711 {m68k_op_move_8_pi_d, 0xf1f8, 0x10c0, { 8, 8, 4, 4, 4, 4, 4}},
31712 {m68k_op_move_8_pi_ai, 0xf1f8, 0x10d0, { 12, 12, 8, 8, 8, 8, 4}},
31713 {m68k_op_move_8_pi_pi, 0xf1f8, 0x10d8, { 12, 12, 8, 8, 8, 8, 4}},
31714 {m68k_op_move_8_pi_pd, 0xf1f8, 0x10e0, { 14, 14, 9, 9, 9, 9, 4}},
31715 {m68k_op_move_8_pi_di, 0xf1f8, 0x10e8, { 16, 16, 9, 9, 9, 9, 4}},
31716 {m68k_op_move_8_pi_ix, 0xf1f8, 0x10f0, { 18, 18, 11, 11, 11, 11, 4}},
31717 {m68k_op_move_8_pd_d, 0xf1f8, 0x1100, { 8, 8, 5, 5, 5, 5, 5}},
31718 {m68k_op_move_8_pd_ai, 0xf1f8, 0x1110, { 12, 12, 9, 9, 9, 9, 5}},
31719 {m68k_op_move_8_pd_pi, 0xf1f8, 0x1118, { 12, 12, 9, 9, 9, 9, 5}},
31720 {m68k_op_move_8_pd_pd, 0xf1f8, 0x1120, { 14, 14, 10, 10, 10, 10, 5}},
31721 {m68k_op_move_8_pd_di, 0xf1f8, 0x1128, { 16, 16, 10, 10, 10, 10, 5}},
31722 {m68k_op_move_8_pd_ix, 0xf1f8, 0x1130, { 18, 18, 12, 12, 12, 12, 5}},
31723 {m68k_op_move_8_di_d, 0xf1f8, 0x1140, { 12, 12, 5, 5, 5, 5, 5}},
31724 {m68k_op_move_8_di_ai, 0xf1f8, 0x1150, { 16, 16, 9, 9, 9, 9, 5}},
31725 {m68k_op_move_8_di_pi, 0xf1f8, 0x1158, { 16, 16, 9, 9, 9, 9, 5}},
31726 {m68k_op_move_8_di_pd, 0xf1f8, 0x1160, { 18, 18, 10, 10, 10, 10, 5}},
31727 {m68k_op_move_8_di_di, 0xf1f8, 0x1168, { 20, 20, 10, 10, 10, 10, 5}},
31728 {m68k_op_move_8_di_ix, 0xf1f8, 0x1170, { 22, 22, 12, 12, 12, 12, 5}},
31729 {m68k_op_move_8_ix_d, 0xf1f8, 0x1180, { 14, 14, 7, 7, 7, 7, 7}},
31730 {m68k_op_move_8_ix_ai, 0xf1f8, 0x1190, { 18, 18, 11, 11, 11, 11, 7}},
31731 {m68k_op_move_8_ix_pi, 0xf1f8, 0x1198, { 18, 18, 11, 11, 11, 11, 7}},
31732 {m68k_op_move_8_ix_pd, 0xf1f8, 0x11a0, { 20, 20, 12, 12, 12, 12, 7}},
31733 {m68k_op_move_8_ix_di, 0xf1f8, 0x11a8, { 22, 22, 12, 12, 12, 12, 7}},
31734 {m68k_op_move_8_ix_ix, 0xf1f8, 0x11b0, { 24, 24, 14, 14, 14, 14, 7}},
31735 {m68k_op_move_32_d_d, 0xf1f8, 0x2000, { 4, 4, 2, 2, 2, 2, 2}},
31736 {m68k_op_move_32_d_a, 0xf1f8, 0x2008, { 4, 4, 2, 2, 2, 2, 2}},
31737 {m68k_op_move_32_d_ai, 0xf1f8, 0x2010, { 12, 12, 6, 6, 6, 6, 2}},
31738 {m68k_op_move_32_d_pi, 0xf1f8, 0x2018, { 12, 12, 6, 6, 6, 6, 2}},
31739 {m68k_op_move_32_d_pd, 0xf1f8, 0x2020, { 14, 14, 7, 7, 7, 7, 2}},
31740 {m68k_op_move_32_d_di, 0xf1f8, 0x2028, { 16, 16, 7, 7, 7, 7, 2}},
31741 {m68k_op_move_32_d_ix, 0xf1f8, 0x2030, { 18, 18, 9, 9, 9, 9, 2}},
31742 {m68k_op_movea_32_d, 0xf1f8, 0x2040, { 4, 4, 2, 2, 2, 2, 2}},
31743 {m68k_op_movea_32_a, 0xf1f8, 0x2048, { 4, 4, 2, 2, 2, 2, 2}},
31744 {m68k_op_movea_32_ai, 0xf1f8, 0x2050, { 12, 12, 6, 6, 6, 6, 2}},
31745 {m68k_op_movea_32_pi, 0xf1f8, 0x2058, { 12, 12, 6, 6, 6, 6, 2}},
31746 {m68k_op_movea_32_pd, 0xf1f8, 0x2060, { 14, 14, 7, 7, 7, 7, 2}},
31747 {m68k_op_movea_32_di, 0xf1f8, 0x2068, { 16, 16, 7, 7, 7, 7, 2}},
31748 {m68k_op_movea_32_ix, 0xf1f8, 0x2070, { 18, 18, 9, 9, 9, 9, 2}},
31749 {m68k_op_move_32_ai_d, 0xf1f8, 0x2080, { 12, 12, 4, 4, 4, 4, 4}},
31750 {m68k_op_move_32_ai_a, 0xf1f8, 0x2088, { 12, 12, 4, 4, 4, 4, 4}},
31751 {m68k_op_move_32_ai_ai, 0xf1f8, 0x2090, { 20, 20, 8, 8, 8, 8, 4}},
31752 {m68k_op_move_32_ai_pi, 0xf1f8, 0x2098, { 20, 20, 8, 8, 8, 8, 4}},
31753 {m68k_op_move_32_ai_pd, 0xf1f8, 0x20a0, { 22, 22, 9, 9, 9, 9, 4}},
31754 {m68k_op_move_32_ai_di, 0xf1f8, 0x20a8, { 24, 24, 9, 9, 9, 9, 4}},
31755 {m68k_op_move_32_ai_ix, 0xf1f8, 0x20b0, { 26, 26, 11, 11, 11, 11, 4}},
31756 {m68k_op_move_32_pi_d, 0xf1f8, 0x20c0, { 12, 12, 4, 4, 4, 4, 4}},
31757 {m68k_op_move_32_pi_a, 0xf1f8, 0x20c8, { 12, 12, 4, 4, 4, 4, 4}},
31758 {m68k_op_move_32_pi_ai, 0xf1f8, 0x20d0, { 20, 20, 8, 8, 8, 8, 4}},
31759 {m68k_op_move_32_pi_pi, 0xf1f8, 0x20d8, { 20, 20, 8, 8, 8, 8, 4}},
31760 {m68k_op_move_32_pi_pd, 0xf1f8, 0x20e0, { 22, 22, 9, 9, 9, 9, 4}},
31761 {m68k_op_move_32_pi_di, 0xf1f8, 0x20e8, { 24, 24, 9, 9, 9, 9, 4}},
31762 {m68k_op_move_32_pi_ix, 0xf1f8, 0x20f0, { 26, 26, 11, 11, 11, 11, 4}},
31763 {m68k_op_move_32_pd_d, 0xf1f8, 0x2100, { 12, 14, 5, 5, 5, 5, 5}},
31764 {m68k_op_move_32_pd_a, 0xf1f8, 0x2108, { 12, 14, 5, 5, 5, 5, 5}},
31765 {m68k_op_move_32_pd_ai, 0xf1f8, 0x2110, { 20, 22, 9, 9, 9, 9, 5}},
31766 {m68k_op_move_32_pd_pi, 0xf1f8, 0x2118, { 20, 22, 9, 9, 9, 9, 5}},
31767 {m68k_op_move_32_pd_pd, 0xf1f8, 0x2120, { 22, 24, 10, 10, 10, 10, 5}},
31768 {m68k_op_move_32_pd_di, 0xf1f8, 0x2128, { 24, 26, 10, 10, 10, 10, 5}},
31769 {m68k_op_move_32_pd_ix, 0xf1f8, 0x2130, { 26, 28, 12, 12, 12, 12, 5}},
31770 {m68k_op_move_32_di_d, 0xf1f8, 0x2140, { 16, 16, 5, 5, 5, 5, 5}},
31771 {m68k_op_move_32_di_a, 0xf1f8, 0x2148, { 16, 16, 5, 5, 5, 5, 5}},
31772 {m68k_op_move_32_di_ai, 0xf1f8, 0x2150, { 24, 24, 9, 9, 9, 9, 5}},
31773 {m68k_op_move_32_di_pi, 0xf1f8, 0x2158, { 24, 24, 9, 9, 9, 9, 5}},
31774 {m68k_op_move_32_di_pd, 0xf1f8, 0x2160, { 26, 26, 10, 10, 10, 10, 5}},
31775 {m68k_op_move_32_di_di, 0xf1f8, 0x2168, { 28, 28, 10, 10, 10, 10, 5}},
31776 {m68k_op_move_32_di_ix, 0xf1f8, 0x2170, { 30, 30, 12, 12, 12, 12, 5}},
31777 {m68k_op_move_32_ix_d, 0xf1f8, 0x2180, { 18, 18, 7, 7, 7, 7, 7}},
31778 {m68k_op_move_32_ix_a, 0xf1f8, 0x2188, { 18, 18, 7, 7, 7, 7, 7}},
31779 {m68k_op_move_32_ix_ai, 0xf1f8, 0x2190, { 26, 26, 11, 11, 11, 11, 7}},
31780 {m68k_op_move_32_ix_pi, 0xf1f8, 0x2198, { 26, 26, 11, 11, 11, 11, 7}},
31781 {m68k_op_move_32_ix_pd, 0xf1f8, 0x21a0, { 28, 28, 12, 12, 12, 12, 7}},
31782 {m68k_op_move_32_ix_di, 0xf1f8, 0x21a8, { 30, 30, 12, 12, 12, 12, 7}},
31783 {m68k_op_move_32_ix_ix, 0xf1f8, 0x21b0, { 32, 32, 14, 14, 14, 14, 7}},
31784 {m68k_op_move_16_d_d, 0xf1f8, 0x3000, { 4, 4, 2, 2, 2, 2, 2}},
31785 {m68k_op_move_16_d_a, 0xf1f8, 0x3008, { 4, 4, 2, 2, 2, 2, 2}},
31786 {m68k_op_move_16_d_ai, 0xf1f8, 0x3010, { 8, 8, 6, 6, 6, 6, 2}},
31787 {m68k_op_move_16_d_pi, 0xf1f8, 0x3018, { 8, 8, 6, 6, 6, 6, 2}},
31788 {m68k_op_move_16_d_pd, 0xf1f8, 0x3020, { 10, 10, 7, 7, 7, 7, 2}},
31789 {m68k_op_move_16_d_di, 0xf1f8, 0x3028, { 12, 12, 7, 7, 7, 7, 2}},
31790 {m68k_op_move_16_d_ix, 0xf1f8, 0x3030, { 14, 14, 9, 9, 9, 9, 2}},
31791 {m68k_op_movea_16_d, 0xf1f8, 0x3040, { 4, 4, 2, 2, 2, 2, 2}},
31792 {m68k_op_movea_16_a, 0xf1f8, 0x3048, { 4, 4, 2, 2, 2, 2, 2}},
31793 {m68k_op_movea_16_ai, 0xf1f8, 0x3050, { 8, 8, 6, 6, 6, 6, 2}},
31794 {m68k_op_movea_16_pi, 0xf1f8, 0x3058, { 8, 8, 6, 6, 6, 6, 2}},
31795 {m68k_op_movea_16_pd, 0xf1f8, 0x3060, { 10, 10, 7, 7, 7, 7, 2}},
31796 {m68k_op_movea_16_di, 0xf1f8, 0x3068, { 12, 12, 7, 7, 7, 7, 2}},
31797 {m68k_op_movea_16_ix, 0xf1f8, 0x3070, { 14, 14, 9, 9, 9, 9, 2}},
31798 {m68k_op_move_16_ai_d, 0xf1f8, 0x3080, { 8, 8, 4, 4, 4, 4, 4}},
31799 {m68k_op_move_16_ai_a, 0xf1f8, 0x3088, { 8, 8, 4, 4, 4, 4, 4}},
31800 {m68k_op_move_16_ai_ai, 0xf1f8, 0x3090, { 12, 12, 8, 8, 8, 8, 4}},
31801 {m68k_op_move_16_ai_pi, 0xf1f8, 0x3098, { 12, 12, 8, 8, 8, 8, 4}},
31802 {m68k_op_move_16_ai_pd, 0xf1f8, 0x30a0, { 14, 14, 9, 9, 9, 9, 4}},
31803 {m68k_op_move_16_ai_di, 0xf1f8, 0x30a8, { 16, 16, 9, 9, 9, 9, 4}},
31804 {m68k_op_move_16_ai_ix, 0xf1f8, 0x30b0, { 18, 18, 11, 11, 11, 11, 4}},
31805 {m68k_op_move_16_pi_d, 0xf1f8, 0x30c0, { 8, 8, 4, 4, 4, 4, 4}},
31806 {m68k_op_move_16_pi_a, 0xf1f8, 0x30c8, { 8, 8, 4, 4, 4, 4, 4}},
31807 {m68k_op_move_16_pi_ai, 0xf1f8, 0x30d0, { 12, 12, 8, 8, 8, 8, 4}},
31808 {m68k_op_move_16_pi_pi, 0xf1f8, 0x30d8, { 12, 12, 8, 8, 8, 8, 4}},
31809 {m68k_op_move_16_pi_pd, 0xf1f8, 0x30e0, { 14, 14, 9, 9, 9, 9, 4}},
31810 {m68k_op_move_16_pi_di, 0xf1f8, 0x30e8, { 16, 16, 9, 9, 9, 9, 4}},
31811 {m68k_op_move_16_pi_ix, 0xf1f8, 0x30f0, { 18, 18, 11, 11, 11, 11, 4}},
31812 {m68k_op_move_16_pd_d, 0xf1f8, 0x3100, { 8, 8, 5, 5, 5, 5, 5}},
31813 {m68k_op_move_16_pd_a, 0xf1f8, 0x3108, { 8, 8, 5, 5, 5, 5, 5}},
31814 {m68k_op_move_16_pd_ai, 0xf1f8, 0x3110, { 12, 12, 9, 9, 9, 9, 5}},
31815 {m68k_op_move_16_pd_pi, 0xf1f8, 0x3118, { 12, 12, 9, 9, 9, 9, 5}},
31816 {m68k_op_move_16_pd_pd, 0xf1f8, 0x3120, { 14, 14, 10, 10, 10, 10, 5}},
31817 {m68k_op_move_16_pd_di, 0xf1f8, 0x3128, { 16, 16, 10, 10, 10, 10, 5}},
31818 {m68k_op_move_16_pd_ix, 0xf1f8, 0x3130, { 18, 18, 12, 12, 12, 12, 5}},
31819 {m68k_op_move_16_di_d, 0xf1f8, 0x3140, { 12, 12, 5, 5, 5, 5, 5}},
31820 {m68k_op_move_16_di_a, 0xf1f8, 0x3148, { 12, 12, 5, 5, 5, 5, 5}},
31821 {m68k_op_move_16_di_ai, 0xf1f8, 0x3150, { 16, 16, 9, 9, 9, 9, 5}},
31822 {m68k_op_move_16_di_pi, 0xf1f8, 0x3158, { 16, 16, 9, 9, 9, 9, 5}},
31823 {m68k_op_move_16_di_pd, 0xf1f8, 0x3160, { 18, 18, 10, 10, 10, 10, 5}},
31824 {m68k_op_move_16_di_di, 0xf1f8, 0x3168, { 20, 20, 10, 10, 10, 10, 5}},
31825 {m68k_op_move_16_di_ix, 0xf1f8, 0x3170, { 22, 22, 12, 12, 12, 12, 5}},
31826 {m68k_op_move_16_ix_d, 0xf1f8, 0x3180, { 14, 14, 7, 7, 7, 7, 7}},
31827 {m68k_op_move_16_ix_a, 0xf1f8, 0x3188, { 14, 14, 7, 7, 7, 7, 7}},
31828 {m68k_op_move_16_ix_ai, 0xf1f8, 0x3190, { 18, 18, 11, 11, 11, 11, 7}},
31829 {m68k_op_move_16_ix_pi, 0xf1f8, 0x3198, { 18, 18, 11, 11, 11, 11, 7}},
31830 {m68k_op_move_16_ix_pd, 0xf1f8, 0x31a0, { 20, 20, 12, 12, 12, 12, 7}},
31831 {m68k_op_move_16_ix_di, 0xf1f8, 0x31a8, { 22, 22, 12, 12, 12, 12, 7}},
31832 {m68k_op_move_16_ix_ix, 0xf1f8, 0x31b0, { 24, 24, 14, 14, 14, 14, 7}},
31833 {m68k_op_chk_32_d, 0xf1f8, 0x4100, {255, 255, 8, 8, 8, 8, 8}},
31834 {m68k_op_chk_32_ai, 0xf1f8, 0x4110, {255, 255, 12, 12, 12, 12, 8}},
31835 {m68k_op_chk_32_pi, 0xf1f8, 0x4118, {255, 255, 12, 12, 12, 12, 8}},
31836 {m68k_op_chk_32_pd, 0xf1f8, 0x4120, {255, 255, 13, 13, 13, 13, 8}},
31837 {m68k_op_chk_32_di, 0xf1f8, 0x4128, {255, 255, 13, 13, 13, 13, 8}},
31838 {m68k_op_chk_32_ix, 0xf1f8, 0x4130, {255, 255, 15, 15, 15, 15, 8}},
31839 {m68k_op_chk_16_d, 0xf1f8, 0x4180, { 10, 8, 8, 8, 8, 8, 8}},
31840 {m68k_op_chk_16_ai, 0xf1f8, 0x4190, { 14, 12, 12, 12, 12, 12, 8}},
31841 {m68k_op_chk_16_pi, 0xf1f8, 0x4198, { 14, 12, 12, 12, 12, 12, 8}},
31842 {m68k_op_chk_16_pd, 0xf1f8, 0x41a0, { 16, 14, 13, 13, 13, 13, 8}},
31843 {m68k_op_chk_16_di, 0xf1f8, 0x41a8, { 18, 16, 13, 13, 13, 13, 8}},
31844 {m68k_op_chk_16_ix, 0xf1f8, 0x41b0, { 20, 18, 15, 15, 15, 15, 8}},
31845 {m68k_op_lea_32_ai, 0xf1f8, 0x41d0, { 4, 4, 6, 6, 6, 6, 2}},
31846 {m68k_op_lea_32_di, 0xf1f8, 0x41e8, { 8, 8, 7, 7, 7, 7, 2}},
31847 {m68k_op_lea_32_ix, 0xf1f8, 0x41f0, { 12, 12, 9, 9, 9, 9, 2}},
31848 {m68k_op_addq_8_d, 0xf1f8, 0x5000, { 4, 4, 2, 2, 2, 2, 2}},
31849 {m68k_op_addq_8_ai, 0xf1f8, 0x5010, { 12, 12, 8, 8, 8, 8, 4}},
31850 {m68k_op_addq_8_pi, 0xf1f8, 0x5018, { 12, 12, 8, 8, 8, 8, 4}},
31851 {m68k_op_addq_8_pd, 0xf1f8, 0x5020, { 14, 14, 9, 9, 9, 9, 4}},
31852 {m68k_op_addq_8_di, 0xf1f8, 0x5028, { 16, 16, 9, 9, 9, 9, 4}},
31853 {m68k_op_addq_8_ix, 0xf1f8, 0x5030, { 18, 18, 11, 11, 11, 11, 4}},
31854 {m68k_op_addq_16_d, 0xf1f8, 0x5040, { 4, 4, 2, 2, 2, 2, 2}},
31855 {m68k_op_addq_16_a, 0xf1f8, 0x5048, { 4, 4, 2, 2, 2, 2, 2}},
31856 {m68k_op_addq_16_ai, 0xf1f8, 0x5050, { 12, 12, 8, 8, 8, 8, 4}},
31857 {m68k_op_addq_16_pi, 0xf1f8, 0x5058, { 12, 12, 8, 8, 8, 8, 4}},
31858 {m68k_op_addq_16_pd, 0xf1f8, 0x5060, { 14, 14, 9, 9, 9, 9, 4}},
31859 {m68k_op_addq_16_di, 0xf1f8, 0x5068, { 16, 16, 9, 9, 9, 9, 4}},
31860 {m68k_op_addq_16_ix, 0xf1f8, 0x5070, { 18, 18, 11, 11, 11, 11, 4}},
31861 {m68k_op_addq_32_d, 0xf1f8, 0x5080, { 8, 8, 2, 2, 2, 2, 2}},
31862 {m68k_op_addq_32_a, 0xf1f8, 0x5088, { 8, 8, 2, 2, 2, 2, 2}},
31863 {m68k_op_addq_32_ai, 0xf1f8, 0x5090, { 20, 20, 8, 8, 8, 8, 4}},
31864 {m68k_op_addq_32_pi, 0xf1f8, 0x5098, { 20, 20, 8, 8, 8, 8, 4}},
31865 {m68k_op_addq_32_pd, 0xf1f8, 0x50a0, { 22, 22, 9, 9, 9, 9, 4}},
31866 {m68k_op_addq_32_di, 0xf1f8, 0x50a8, { 24, 24, 9, 9, 9, 9, 4}},
31867 {m68k_op_addq_32_ix, 0xf1f8, 0x50b0, { 26, 26, 11, 11, 11, 11, 4}},
31868 {m68k_op_subq_8_d, 0xf1f8, 0x5100, { 4, 4, 2, 2, 2, 2, 2}},
31869 {m68k_op_subq_8_ai, 0xf1f8, 0x5110, { 12, 12, 8, 8, 8, 8, 4}},
31870 {m68k_op_subq_8_pi, 0xf1f8, 0x5118, { 12, 12, 8, 8, 8, 8, 4}},
31871 {m68k_op_subq_8_pd, 0xf1f8, 0x5120, { 14, 14, 9, 9, 9, 9, 4}},
31872 {m68k_op_subq_8_di, 0xf1f8, 0x5128, { 16, 16, 9, 9, 9, 9, 4}},
31873 {m68k_op_subq_8_ix, 0xf1f8, 0x5130, { 18, 18, 11, 11, 11, 11, 4}},
31874 {m68k_op_subq_16_d, 0xf1f8, 0x5140, { 4, 4, 2, 2, 2, 2, 2}},
31875 {m68k_op_subq_16_a, 0xf1f8, 0x5148, { 8, 4, 2, 2, 2, 2, 2}},
31876 {m68k_op_subq_16_ai, 0xf1f8, 0x5150, { 12, 12, 8, 8, 8, 8, 4}},
31877 {m68k_op_subq_16_pi, 0xf1f8, 0x5158, { 12, 12, 8, 8, 8, 8, 4}},
31878 {m68k_op_subq_16_pd, 0xf1f8, 0x5160, { 14, 14, 9, 9, 9, 9, 4}},
31879 {m68k_op_subq_16_di, 0xf1f8, 0x5168, { 16, 16, 9, 9, 9, 9, 4}},
31880 {m68k_op_subq_16_ix, 0xf1f8, 0x5170, { 18, 18, 11, 11, 11, 11, 4}},
31881 {m68k_op_subq_32_d, 0xf1f8, 0x5180, { 8, 8, 2, 2, 2, 2, 2}},
31882 {m68k_op_subq_32_a, 0xf1f8, 0x5188, { 8, 8, 2, 2, 2, 2, 2}},
31883 {m68k_op_subq_32_ai, 0xf1f8, 0x5190, { 20, 20, 8, 8, 8, 8, 4}},
31884 {m68k_op_subq_32_pi, 0xf1f8, 0x5198, { 20, 20, 8, 8, 8, 8, 4}},
31885 {m68k_op_subq_32_pd, 0xf1f8, 0x51a0, { 22, 22, 9, 9, 9, 9, 4}},
31886 {m68k_op_subq_32_di, 0xf1f8, 0x51a8, { 24, 24, 9, 9, 9, 9, 4}},
31887 {m68k_op_subq_32_ix, 0xf1f8, 0x51b0, { 26, 26, 11, 11, 11, 11, 4}},
31888 {m68k_op_or_8_er_d, 0xf1f8, 0x8000, { 4, 4, 2, 2, 2, 2, 2}},
31889 {m68k_op_or_8_er_ai, 0xf1f8, 0x8010, { 8, 8, 6, 6, 6, 6, 2}},
31890 {m68k_op_or_8_er_pi, 0xf1f8, 0x8018, { 8, 8, 6, 6, 6, 6, 2}},
31891 {m68k_op_or_8_er_pd, 0xf1f8, 0x8020, { 10, 10, 7, 7, 7, 7, 2}},
31892 {m68k_op_or_8_er_di, 0xf1f8, 0x8028, { 12, 12, 7, 7, 7, 7, 2}},
31893 {m68k_op_or_8_er_ix, 0xf1f8, 0x8030, { 14, 14, 9, 9, 9, 9, 2}},
31894 {m68k_op_or_16_er_d, 0xf1f8, 0x8040, { 4, 4, 2, 2, 2, 2, 2}},
31895 {m68k_op_or_16_er_ai, 0xf1f8, 0x8050, { 8, 8, 6, 6, 6, 6, 2}},
31896 {m68k_op_or_16_er_pi, 0xf1f8, 0x8058, { 8, 8, 6, 6, 6, 6, 2}},
31897 {m68k_op_or_16_er_pd, 0xf1f8, 0x8060, { 10, 10, 7, 7, 7, 7, 2}},
31898 {m68k_op_or_16_er_di, 0xf1f8, 0x8068, { 12, 12, 7, 7, 7, 7, 2}},
31899 {m68k_op_or_16_er_ix, 0xf1f8, 0x8070, { 14, 14, 9, 9, 9, 9, 2}},
31900 {m68k_op_or_32_er_d, 0xf1f8, 0x8080, { 8, 6, 2, 2, 2, 2, 2}},
31901 {m68k_op_or_32_er_ai, 0xf1f8, 0x8090, { 14, 14, 6, 6, 6, 6, 2}},
31902 {m68k_op_or_32_er_pi, 0xf1f8, 0x8098, { 14, 14, 6, 6, 6, 6, 2}},
31903 {m68k_op_or_32_er_pd, 0xf1f8, 0x80a0, { 16, 16, 7, 7, 7, 7, 2}},
31904 {m68k_op_or_32_er_di, 0xf1f8, 0x80a8, { 18, 18, 7, 7, 7, 7, 2}},
31905 {m68k_op_or_32_er_ix, 0xf1f8, 0x80b0, { 20, 20, 9, 9, 9, 9, 2}},
31906 {m68k_op_divu_16_d, 0xf1f8, 0x80c0, {140, 108, 44, 44, 44, 44, 44}},
31907 {m68k_op_divu_16_ai, 0xf1f8, 0x80d0, {144, 112, 48, 48, 48, 48, 44}},
31908 {m68k_op_divu_16_pi, 0xf1f8, 0x80d8, {144, 112, 48, 48, 48, 48, 44}},
31909 {m68k_op_divu_16_pd, 0xf1f8, 0x80e0, {146, 114, 49, 49, 49, 49, 44}},
31910 {m68k_op_divu_16_di, 0xf1f8, 0x80e8, {148, 116, 49, 49, 49, 49, 44}},
31911 {m68k_op_divu_16_ix, 0xf1f8, 0x80f0, {150, 118, 51, 51, 51, 51, 44}},
31912 {m68k_op_sbcd_8_rr, 0xf1f8, 0x8100, { 6, 6, 4, 4, 4, 4, 4}},
31913 {m68k_op_sbcd_8_mm, 0xf1f8, 0x8108, { 18, 18, 16, 16, 16, 16, 16}},
31914 {m68k_op_or_8_re_ai, 0xf1f8, 0x8110, { 12, 12, 8, 8, 8, 8, 4}},
31915 {m68k_op_or_8_re_pi, 0xf1f8, 0x8118, { 12, 12, 8, 8, 8, 8, 4}},
31916 {m68k_op_or_8_re_pd, 0xf1f8, 0x8120, { 14, 14, 9, 9, 9, 9, 4}},
31917 {m68k_op_or_8_re_di, 0xf1f8, 0x8128, { 16, 16, 9, 9, 9, 9, 4}},
31918 {m68k_op_or_8_re_ix, 0xf1f8, 0x8130, { 18, 18, 11, 11, 11, 11, 4}},
31919 {m68k_op_pack_16_rr, 0xf1f8, 0x8140, {255, 255, 6, 6, 6, 6, 6}},
31920 {m68k_op_pack_16_mm, 0xf1f8, 0x8148, {255, 255, 13, 13, 13, 13, 13}},
31921 {m68k_op_or_16_re_ai, 0xf1f8, 0x8150, { 12, 12, 8, 8, 8, 8, 4}},
31922 {m68k_op_or_16_re_pi, 0xf1f8, 0x8158, { 12, 12, 8, 8, 8, 8, 4}},
31923 {m68k_op_or_16_re_pd, 0xf1f8, 0x8160, { 14, 14, 9, 9, 9, 9, 4}},
31924 {m68k_op_or_16_re_di, 0xf1f8, 0x8168, { 16, 16, 9, 9, 9, 9, 4}},
31925 {m68k_op_or_16_re_ix, 0xf1f8, 0x8170, { 18, 18, 11, 11, 11, 11, 4}},
31926 {m68k_op_unpk_16_rr, 0xf1f8, 0x8180, {255, 255, 8, 8, 8, 8, 8}},
31927 {m68k_op_unpk_16_mm, 0xf1f8, 0x8188, {255, 255, 13, 13, 13, 13, 13}},
31928 {m68k_op_or_32_re_ai, 0xf1f8, 0x8190, { 20, 20, 8, 8, 8, 8, 4}},
31929 {m68k_op_or_32_re_pi, 0xf1f8, 0x8198, { 20, 20, 8, 8, 8, 8, 4}},
31930 {m68k_op_or_32_re_pd, 0xf1f8, 0x81a0, { 22, 22, 9, 9, 9, 9, 4}},
31931 {m68k_op_or_32_re_di, 0xf1f8, 0x81a8, { 24, 24, 9, 9, 9, 9, 4}},
31932 {m68k_op_or_32_re_ix, 0xf1f8, 0x81b0, { 26, 26, 11, 11, 11, 11, 4}},
31933 {m68k_op_divs_16_d, 0xf1f8, 0x81c0, {158, 122, 56, 56, 56, 56, 56}},
31934 {m68k_op_divs_16_ai, 0xf1f8, 0x81d0, {162, 126, 60, 60, 60, 60, 56}},
31935 {m68k_op_divs_16_pi, 0xf1f8, 0x81d8, {162, 126, 60, 60, 60, 60, 56}},
31936 {m68k_op_divs_16_pd, 0xf1f8, 0x81e0, {164, 128, 61, 61, 61, 61, 56}},
31937 {m68k_op_divs_16_di, 0xf1f8, 0x81e8, {166, 130, 61, 61, 61, 61, 56}},
31938 {m68k_op_divs_16_ix, 0xf1f8, 0x81f0, {168, 132, 63, 63, 63, 63, 56}},
31939 {m68k_op_sub_8_er_d, 0xf1f8, 0x9000, { 4, 4, 2, 2, 2, 2, 2}},
31940 {m68k_op_sub_8_er_ai, 0xf1f8, 0x9010, { 8, 8, 6, 6, 6, 6, 2}},
31941 {m68k_op_sub_8_er_pi, 0xf1f8, 0x9018, { 8, 8, 6, 6, 6, 6, 2}},
31942 {m68k_op_sub_8_er_pd, 0xf1f8, 0x9020, { 10, 10, 7, 7, 7, 7, 2}},
31943 {m68k_op_sub_8_er_di, 0xf1f8, 0x9028, { 12, 12, 7, 7, 7, 7, 2}},
31944 {m68k_op_sub_8_er_ix, 0xf1f8, 0x9030, { 14, 14, 9, 9, 9, 9, 2}},
31945 {m68k_op_sub_16_er_d, 0xf1f8, 0x9040, { 4, 4, 2, 2, 2, 2, 2}},
31946 {m68k_op_sub_16_er_a, 0xf1f8, 0x9048, { 4, 4, 2, 2, 2, 2, 2}},
31947 {m68k_op_sub_16_er_ai, 0xf1f8, 0x9050, { 8, 8, 6, 6, 6, 6, 2}},
31948 {m68k_op_sub_16_er_pi, 0xf1f8, 0x9058, { 8, 8, 6, 6, 6, 6, 2}},
31949 {m68k_op_sub_16_er_pd, 0xf1f8, 0x9060, { 10, 10, 7, 7, 7, 7, 2}},
31950 {m68k_op_sub_16_er_di, 0xf1f8, 0x9068, { 12, 12, 7, 7, 7, 7, 2}},
31951 {m68k_op_sub_16_er_ix, 0xf1f8, 0x9070, { 14, 14, 9, 9, 9, 9, 2}},
31952 {m68k_op_sub_32_er_d, 0xf1f8, 0x9080, { 8, 6, 2, 2, 2, 2, 2}},
31953 {m68k_op_sub_32_er_a, 0xf1f8, 0x9088, { 8, 6, 2, 2, 2, 2, 2}},
31954 {m68k_op_sub_32_er_ai, 0xf1f8, 0x9090, { 14, 14, 6, 6, 6, 6, 2}},
31955 {m68k_op_sub_32_er_pi, 0xf1f8, 0x9098, { 14, 14, 6, 6, 6, 6, 2}},
31956 {m68k_op_sub_32_er_pd, 0xf1f8, 0x90a0, { 16, 16, 7, 7, 7, 7, 2}},
31957 {m68k_op_sub_32_er_di, 0xf1f8, 0x90a8, { 18, 18, 7, 7, 7, 7, 2}},
31958 {m68k_op_sub_32_er_ix, 0xf1f8, 0x90b0, { 20, 20, 9, 9, 9, 9, 2}},
31959 {m68k_op_suba_16_d, 0xf1f8, 0x90c0, { 8, 8, 2, 2, 2, 2, 2}},
31960 {m68k_op_suba_16_a, 0xf1f8, 0x90c8, { 8, 8, 2, 2, 2, 2, 2}},
31961 {m68k_op_suba_16_ai, 0xf1f8, 0x90d0, { 12, 12, 6, 6, 6, 6, 2}},
31962 {m68k_op_suba_16_pi, 0xf1f8, 0x90d8, { 12, 12, 6, 6, 6, 6, 2}},
31963 {m68k_op_suba_16_pd, 0xf1f8, 0x90e0, { 14, 14, 7, 7, 7, 7, 2}},
31964 {m68k_op_suba_16_di, 0xf1f8, 0x90e8, { 16, 16, 7, 7, 7, 7, 2}},
31965 {m68k_op_suba_16_ix, 0xf1f8, 0x90f0, { 18, 18, 9, 9, 9, 9, 2}},
31966 {m68k_op_subx_8_rr, 0xf1f8, 0x9100, { 4, 4, 2, 2, 2, 2, 2}},
31967 {m68k_op_subx_8_mm, 0xf1f8, 0x9108, { 18, 18, 12, 12, 12, 12, 12}},
31968 {m68k_op_sub_8_re_ai, 0xf1f8, 0x9110, { 12, 12, 8, 8, 8, 8, 4}},
31969 {m68k_op_sub_8_re_pi, 0xf1f8, 0x9118, { 12, 12, 8, 8, 8, 8, 4}},
31970 {m68k_op_sub_8_re_pd, 0xf1f8, 0x9120, { 14, 14, 9, 9, 9, 9, 4}},
31971 {m68k_op_sub_8_re_di, 0xf1f8, 0x9128, { 16, 16, 9, 9, 9, 9, 4}},
31972 {m68k_op_sub_8_re_ix, 0xf1f8, 0x9130, { 18, 18, 11, 11, 11, 11, 4}},
31973 {m68k_op_subx_16_rr, 0xf1f8, 0x9140, { 4, 4, 2, 2, 2, 2, 2}},
31974 {m68k_op_subx_16_mm, 0xf1f8, 0x9148, { 18, 18, 12, 12, 12, 12, 12}},
31975 {m68k_op_sub_16_re_ai, 0xf1f8, 0x9150, { 12, 12, 8, 8, 8, 8, 4}},
31976 {m68k_op_sub_16_re_pi, 0xf1f8, 0x9158, { 12, 12, 8, 8, 8, 8, 4}},
31977 {m68k_op_sub_16_re_pd, 0xf1f8, 0x9160, { 14, 14, 9, 9, 9, 9, 4}},
31978 {m68k_op_sub_16_re_di, 0xf1f8, 0x9168, { 16, 16, 9, 9, 9, 9, 4}},
31979 {m68k_op_sub_16_re_ix, 0xf1f8, 0x9170, { 18, 18, 11, 11, 11, 11, 4}},
31980 {m68k_op_subx_32_rr, 0xf1f8, 0x9180, { 8, 6, 2, 2, 2, 2, 2}},
31981 {m68k_op_subx_32_mm, 0xf1f8, 0x9188, { 30, 30, 12, 12, 12, 12, 12}},
31982 {m68k_op_sub_32_re_ai, 0xf1f8, 0x9190, { 20, 20, 8, 8, 8, 8, 4}},
31983 {m68k_op_sub_32_re_pi, 0xf1f8, 0x9198, { 20, 20, 8, 8, 8, 8, 4}},
31984 {m68k_op_sub_32_re_pd, 0xf1f8, 0x91a0, { 22, 22, 9, 9, 9, 9, 4}},
31985 {m68k_op_sub_32_re_di, 0xf1f8, 0x91a8, { 24, 24, 9, 9, 9, 9, 4}},
31986 {m68k_op_sub_32_re_ix, 0xf1f8, 0x91b0, { 26, 26, 11, 11, 11, 11, 4}},
31987 {m68k_op_suba_32_d, 0xf1f8, 0x91c0, { 8, 6, 2, 2, 2, 2, 2}},
31988 {m68k_op_suba_32_a, 0xf1f8, 0x91c8, { 8, 6, 2, 2, 2, 2, 2}},
31989 {m68k_op_suba_32_ai, 0xf1f8, 0x91d0, { 14, 14, 6, 6, 6, 6, 2}},
31990 {m68k_op_suba_32_pi, 0xf1f8, 0x91d8, { 14, 14, 6, 6, 6, 6, 2}},
31991 {m68k_op_suba_32_pd, 0xf1f8, 0x91e0, { 16, 16, 7, 7, 7, 7, 2}},
31992 {m68k_op_suba_32_di, 0xf1f8, 0x91e8, { 18, 18, 7, 7, 7, 7, 2}},
31993 {m68k_op_suba_32_ix, 0xf1f8, 0x91f0, { 20, 20, 9, 9, 9, 9, 2}},
31994 {m68k_op_cmp_8_d, 0xf1f8, 0xb000, { 4, 4, 2, 2, 2, 2, 2}},
31995 {m68k_op_cmp_8_ai, 0xf1f8, 0xb010, { 8, 8, 6, 6, 6, 6, 2}},
31996 {m68k_op_cmp_8_pi, 0xf1f8, 0xb018, { 8, 8, 6, 6, 6, 6, 2}},
31997 {m68k_op_cmp_8_pd, 0xf1f8, 0xb020, { 10, 10, 7, 7, 7, 7, 2}},
31998 {m68k_op_cmp_8_di, 0xf1f8, 0xb028, { 12, 12, 7, 7, 7, 7, 2}},
31999 {m68k_op_cmp_8_ix, 0xf1f8, 0xb030, { 14, 14, 9, 9, 9, 9, 2}},
32000 {m68k_op_cmp_16_d, 0xf1f8, 0xb040, { 4, 4, 2, 2, 2, 2, 2}},
32001 {m68k_op_cmp_16_a, 0xf1f8, 0xb048, { 4, 4, 2, 2, 2, 2, 2}},
32002 {m68k_op_cmp_16_ai, 0xf1f8, 0xb050, { 8, 8, 6, 6, 6, 6, 2}},
32003 {m68k_op_cmp_16_pi, 0xf1f8, 0xb058, { 8, 8, 6, 6, 6, 6, 2}},
32004 {m68k_op_cmp_16_pd, 0xf1f8, 0xb060, { 10, 10, 7, 7, 7, 7, 2}},
32005 {m68k_op_cmp_16_di, 0xf1f8, 0xb068, { 12, 12, 7, 7, 7, 7, 2}},
32006 {m68k_op_cmp_16_ix, 0xf1f8, 0xb070, { 14, 14, 9, 9, 9, 9, 2}},
32007 {m68k_op_cmp_32_d, 0xf1f8, 0xb080, { 6, 6, 2, 2, 2, 2, 2}},
32008 {m68k_op_cmp_32_a, 0xf1f8, 0xb088, { 6, 6, 2, 2, 2, 2, 2}},
32009 {m68k_op_cmp_32_ai, 0xf1f8, 0xb090, { 14, 14, 6, 6, 6, 6, 2}},
32010 {m68k_op_cmp_32_pi, 0xf1f8, 0xb098, { 14, 14, 6, 6, 6, 6, 2}},
32011 {m68k_op_cmp_32_pd, 0xf1f8, 0xb0a0, { 16, 16, 7, 7, 7, 7, 2}},
32012 {m68k_op_cmp_32_di, 0xf1f8, 0xb0a8, { 18, 18, 7, 7, 7, 7, 2}},
32013 {m68k_op_cmp_32_ix, 0xf1f8, 0xb0b0, { 20, 20, 9, 9, 9, 9, 2}},
32014 {m68k_op_cmpa_16_d, 0xf1f8, 0xb0c0, { 6, 6, 4, 4, 4, 4, 4}},
32015 {m68k_op_cmpa_16_a, 0xf1f8, 0xb0c8, { 6, 6, 4, 4, 4, 4, 4}},
32016 {m68k_op_cmpa_16_ai, 0xf1f8, 0xb0d0, { 10, 10, 8, 8, 8, 8, 4}},
32017 {m68k_op_cmpa_16_pi, 0xf1f8, 0xb0d8, { 10, 10, 8, 8, 8, 8, 4}},
32018 {m68k_op_cmpa_16_pd, 0xf1f8, 0xb0e0, { 12, 12, 9, 9, 9, 9, 4}},
32019 {m68k_op_cmpa_16_di, 0xf1f8, 0xb0e8, { 14, 14, 9, 9, 9, 9, 4}},
32020 {m68k_op_cmpa_16_ix, 0xf1f8, 0xb0f0, { 16, 16, 11, 11, 11, 11, 4}},
32021 {m68k_op_eor_8_d, 0xf1f8, 0xb100, { 4, 4, 2, 2, 2, 2, 2}},
32022 {m68k_op_cmpm_8, 0xf1f8, 0xb108, { 12, 12, 9, 9, 9, 9, 9}},
32023 {m68k_op_eor_8_ai, 0xf1f8, 0xb110, { 12, 12, 8, 8, 8, 8, 4}},
32024 {m68k_op_eor_8_pi, 0xf1f8, 0xb118, { 12, 12, 8, 8, 8, 8, 4}},
32025 {m68k_op_eor_8_pd, 0xf1f8, 0xb120, { 14, 14, 9, 9, 9, 9, 4}},
32026 {m68k_op_eor_8_di, 0xf1f8, 0xb128, { 16, 16, 9, 9, 9, 9, 4}},
32027 {m68k_op_eor_8_ix, 0xf1f8, 0xb130, { 18, 18, 11, 11, 11, 11, 4}},
32028 {m68k_op_eor_16_d, 0xf1f8, 0xb140, { 4, 4, 2, 2, 2, 2, 2}},
32029 {m68k_op_cmpm_16, 0xf1f8, 0xb148, { 12, 12, 9, 9, 9, 9, 9}},
32030 {m68k_op_eor_16_ai, 0xf1f8, 0xb150, { 12, 12, 8, 8, 8, 8, 4}},
32031 {m68k_op_eor_16_pi, 0xf1f8, 0xb158, { 12, 12, 8, 8, 8, 8, 4}},
32032 {m68k_op_eor_16_pd, 0xf1f8, 0xb160, { 14, 14, 9, 9, 9, 9, 4}},
32033 {m68k_op_eor_16_di, 0xf1f8, 0xb168, { 16, 16, 9, 9, 9, 9, 4}},
32034 {m68k_op_eor_16_ix, 0xf1f8, 0xb170, { 18, 18, 11, 11, 11, 11, 4}},
32035 {m68k_op_eor_32_d, 0xf1f8, 0xb180, { 8, 6, 2, 2, 2, 2, 2}},
32036 {m68k_op_cmpm_32, 0xf1f8, 0xb188, { 20, 20, 9, 9, 9, 9, 9}},
32037 {m68k_op_eor_32_ai, 0xf1f8, 0xb190, { 20, 20, 8, 8, 8, 8, 4}},
32038 {m68k_op_eor_32_pi, 0xf1f8, 0xb198, { 20, 20, 8, 8, 8, 8, 4}},
32039 {m68k_op_eor_32_pd, 0xf1f8, 0xb1a0, { 22, 22, 9, 9, 9, 9, 4}},
32040 {m68k_op_eor_32_di, 0xf1f8, 0xb1a8, { 24, 24, 9, 9, 9, 9, 4}},
32041 {m68k_op_eor_32_ix, 0xf1f8, 0xb1b0, { 26, 26, 11, 11, 11, 11, 4}},
32042 {m68k_op_cmpa_32_d, 0xf1f8, 0xb1c0, { 6, 6, 4, 4, 4, 4, 4}},
32043 {m68k_op_cmpa_32_a, 0xf1f8, 0xb1c8, { 6, 6, 4, 4, 4, 4, 4}},
32044 {m68k_op_cmpa_32_ai, 0xf1f8, 0xb1d0, { 14, 14, 8, 8, 8, 8, 4}},
32045 {m68k_op_cmpa_32_pi, 0xf1f8, 0xb1d8, { 14, 14, 8, 8, 8, 8, 4}},
32046 {m68k_op_cmpa_32_pd, 0xf1f8, 0xb1e0, { 16, 16, 9, 9, 9, 9, 4}},
32047 {m68k_op_cmpa_32_di, 0xf1f8, 0xb1e8, { 18, 18, 9, 9, 9, 9, 4}},
32048 {m68k_op_cmpa_32_ix, 0xf1f8, 0xb1f0, { 20, 20, 11, 11, 11, 11, 4}},
32049 {m68k_op_and_8_er_d, 0xf1f8, 0xc000, { 4, 4, 2, 2, 2, 2, 2}},
32050 {m68k_op_and_8_er_ai, 0xf1f8, 0xc010, { 8, 8, 6, 6, 6, 6, 2}},
32051 {m68k_op_and_8_er_pi, 0xf1f8, 0xc018, { 8, 8, 6, 6, 6, 6, 2}},
32052 {m68k_op_and_8_er_pd, 0xf1f8, 0xc020, { 10, 10, 7, 7, 7, 7, 2}},
32053 {m68k_op_and_8_er_di, 0xf1f8, 0xc028, { 12, 12, 7, 7, 7, 7, 2}},
32054 {m68k_op_and_8_er_ix, 0xf1f8, 0xc030, { 14, 14, 9, 9, 9, 9, 2}},
32055 {m68k_op_and_16_er_d, 0xf1f8, 0xc040, { 4, 4, 2, 2, 2, 2, 2}},
32056 {m68k_op_and_16_er_ai, 0xf1f8, 0xc050, { 8, 8, 6, 6, 6, 6, 2}},
32057 {m68k_op_and_16_er_pi, 0xf1f8, 0xc058, { 8, 8, 6, 6, 6, 6, 2}},
32058 {m68k_op_and_16_er_pd, 0xf1f8, 0xc060, { 10, 10, 7, 7, 7, 7, 2}},
32059 {m68k_op_and_16_er_di, 0xf1f8, 0xc068, { 12, 12, 7, 7, 7, 7, 2}},
32060 {m68k_op_and_16_er_ix, 0xf1f8, 0xc070, { 14, 14, 9, 9, 9, 9, 2}},
32061 {m68k_op_and_32_er_d, 0xf1f8, 0xc080, { 8, 6, 2, 2, 2, 2, 2}},
32062 {m68k_op_and_32_er_ai, 0xf1f8, 0xc090, { 14, 14, 6, 6, 6, 6, 2}},
32063 {m68k_op_and_32_er_pi, 0xf1f8, 0xc098, { 14, 14, 6, 6, 6, 6, 2}},
32064 {m68k_op_and_32_er_pd, 0xf1f8, 0xc0a0, { 16, 16, 7, 7, 7, 7, 2}},
32065 {m68k_op_and_32_er_di, 0xf1f8, 0xc0a8, { 18, 18, 7, 7, 7, 7, 2}},
32066 {m68k_op_and_32_er_ix, 0xf1f8, 0xc0b0, { 20, 20, 9, 9, 9, 9, 2}},
32067 {m68k_op_mulu_16_d, 0xf1f8, 0xc0c0, { 54, 30, 27, 27, 27, 27, 27}},
32068 {m68k_op_mulu_16_ai, 0xf1f8, 0xc0d0, { 58, 34, 31, 31, 31, 31, 27}},
32069 {m68k_op_mulu_16_pi, 0xf1f8, 0xc0d8, { 58, 34, 31, 31, 31, 31, 27}},
32070 {m68k_op_mulu_16_pd, 0xf1f8, 0xc0e0, { 60, 36, 32, 32, 32, 32, 27}},
32071 {m68k_op_mulu_16_di, 0xf1f8, 0xc0e8, { 62, 38, 32, 32, 32, 32, 27}},
32072 {m68k_op_mulu_16_ix, 0xf1f8, 0xc0f0, { 64, 40, 34, 34, 34, 34, 27}},
32073 {m68k_op_abcd_8_rr, 0xf1f8, 0xc100, { 6, 6, 4, 4, 4, 4, 4}},
32074 {m68k_op_abcd_8_mm, 0xf1f8, 0xc108, { 18, 18, 16, 16, 16, 16, 16}},
32075 {m68k_op_and_8_re_ai, 0xf1f8, 0xc110, { 12, 12, 8, 8, 8, 8, 4}},
32076 {m68k_op_and_8_re_pi, 0xf1f8, 0xc118, { 12, 12, 8, 8, 8, 8, 4}},
32077 {m68k_op_and_8_re_pd, 0xf1f8, 0xc120, { 14, 14, 9, 9, 9, 9, 4}},
32078 {m68k_op_and_8_re_di, 0xf1f8, 0xc128, { 16, 16, 9, 9, 9, 9, 4}},
32079 {m68k_op_and_8_re_ix, 0xf1f8, 0xc130, { 18, 18, 11, 11, 11, 11, 4}},
32080 {m68k_op_exg_32_dd, 0xf1f8, 0xc140, { 6, 6, 2, 2, 2, 2, 2}},
32081 {m68k_op_exg_32_aa, 0xf1f8, 0xc148, { 6, 6, 2, 2, 2, 2, 2}},
32082 {m68k_op_and_16_re_ai, 0xf1f8, 0xc150, { 12, 12, 8, 8, 8, 8, 4}},
32083 {m68k_op_and_16_re_pi, 0xf1f8, 0xc158, { 12, 12, 8, 8, 8, 8, 4}},
32084 {m68k_op_and_16_re_pd, 0xf1f8, 0xc160, { 14, 14, 9, 9, 9, 9, 4}},
32085 {m68k_op_and_16_re_di, 0xf1f8, 0xc168, { 16, 16, 9, 9, 9, 9, 4}},
32086 {m68k_op_and_16_re_ix, 0xf1f8, 0xc170, { 18, 18, 11, 11, 11, 11, 4}},
32087 {m68k_op_exg_32_da, 0xf1f8, 0xc188, { 6, 6, 2, 2, 2, 2, 2}},
32088 {m68k_op_and_32_re_ai, 0xf1f8, 0xc190, { 20, 20, 8, 8, 8, 8, 4}},
32089 {m68k_op_and_32_re_pi, 0xf1f8, 0xc198, { 20, 20, 8, 8, 8, 8, 4}},
32090 {m68k_op_and_32_re_pd, 0xf1f8, 0xc1a0, { 22, 22, 9, 9, 9, 9, 4}},
32091 {m68k_op_and_32_re_di, 0xf1f8, 0xc1a8, { 24, 24, 9, 9, 9, 9, 4}},
32092 {m68k_op_and_32_re_ix, 0xf1f8, 0xc1b0, { 26, 26, 11, 11, 11, 11, 4}},
32093 {m68k_op_muls_16_d, 0xf1f8, 0xc1c0, { 54, 32, 27, 27, 27, 27, 27}},
32094 {m68k_op_muls_16_ai, 0xf1f8, 0xc1d0, { 58, 36, 31, 31, 31, 31, 27}},
32095 {m68k_op_muls_16_pi, 0xf1f8, 0xc1d8, { 58, 36, 31, 31, 31, 31, 27}},
32096 {m68k_op_muls_16_pd, 0xf1f8, 0xc1e0, { 60, 38, 32, 32, 32, 32, 27}},
32097 {m68k_op_muls_16_di, 0xf1f8, 0xc1e8, { 62, 40, 32, 32, 32, 32, 27}},
32098 {m68k_op_muls_16_ix, 0xf1f8, 0xc1f0, { 64, 42, 34, 34, 34, 34, 27}},
32099 {m68k_op_add_8_er_d, 0xf1f8, 0xd000, { 4, 4, 2, 2, 2, 2, 2}},
32100 {m68k_op_add_8_er_ai, 0xf1f8, 0xd010, { 8, 8, 6, 6, 6, 6, 2}},
32101 {m68k_op_add_8_er_pi, 0xf1f8, 0xd018, { 8, 8, 6, 6, 6, 6, 2}},
32102 {m68k_op_add_8_er_pd, 0xf1f8, 0xd020, { 10, 10, 7, 7, 7, 7, 2}},
32103 {m68k_op_add_8_er_di, 0xf1f8, 0xd028, { 12, 12, 7, 7, 7, 7, 2}},
32104 {m68k_op_add_8_er_ix, 0xf1f8, 0xd030, { 14, 14, 9, 9, 9, 9, 2}},
32105 {m68k_op_add_16_er_d, 0xf1f8, 0xd040, { 4, 4, 2, 2, 2, 2, 2}},
32106 {m68k_op_add_16_er_a, 0xf1f8, 0xd048, { 4, 4, 2, 2, 2, 2, 2}},
32107 {m68k_op_add_16_er_ai, 0xf1f8, 0xd050, { 8, 8, 6, 6, 6, 6, 2}},
32108 {m68k_op_add_16_er_pi, 0xf1f8, 0xd058, { 8, 8, 6, 6, 6, 6, 2}},
32109 {m68k_op_add_16_er_pd, 0xf1f8, 0xd060, { 10, 10, 7, 7, 7, 7, 2}},
32110 {m68k_op_add_16_er_di, 0xf1f8, 0xd068, { 12, 12, 7, 7, 7, 7, 2}},
32111 {m68k_op_add_16_er_ix, 0xf1f8, 0xd070, { 14, 14, 9, 9, 9, 9, 2}},
32112 {m68k_op_add_32_er_d, 0xf1f8, 0xd080, { 8, 6, 2, 2, 2, 2, 2}},
32113 {m68k_op_add_32_er_a, 0xf1f8, 0xd088, { 8, 6, 2, 2, 2, 2, 2}},
32114 {m68k_op_add_32_er_ai, 0xf1f8, 0xd090, { 14, 14, 6, 6, 6, 6, 2}},
32115 {m68k_op_add_32_er_pi, 0xf1f8, 0xd098, { 14, 14, 6, 6, 6, 6, 2}},
32116 {m68k_op_add_32_er_pd, 0xf1f8, 0xd0a0, { 16, 16, 7, 7, 7, 7, 2}},
32117 {m68k_op_add_32_er_di, 0xf1f8, 0xd0a8, { 18, 18, 7, 7, 7, 7, 2}},
32118 {m68k_op_add_32_er_ix, 0xf1f8, 0xd0b0, { 20, 20, 9, 9, 9, 9, 2}},
32119 {m68k_op_adda_16_d, 0xf1f8, 0xd0c0, { 8, 8, 2, 2, 2, 2, 2}},
32120 {m68k_op_adda_16_a, 0xf1f8, 0xd0c8, { 8, 8, 2, 2, 2, 2, 2}},
32121 {m68k_op_adda_16_ai, 0xf1f8, 0xd0d0, { 12, 12, 6, 6, 6, 6, 2}},
32122 {m68k_op_adda_16_pi, 0xf1f8, 0xd0d8, { 12, 12, 6, 6, 6, 6, 2}},
32123 {m68k_op_adda_16_pd, 0xf1f8, 0xd0e0, { 14, 14, 7, 7, 7, 7, 2}},
32124 {m68k_op_adda_16_di, 0xf1f8, 0xd0e8, { 16, 16, 7, 7, 7, 7, 2}},
32125 {m68k_op_adda_16_ix, 0xf1f8, 0xd0f0, { 18, 18, 9, 9, 9, 9, 2}},
32126 {m68k_op_addx_8_rr, 0xf1f8, 0xd100, { 4, 4, 2, 2, 2, 2, 2}},
32127 {m68k_op_addx_8_mm, 0xf1f8, 0xd108, { 18, 18, 12, 12, 12, 12, 12}},
32128 {m68k_op_add_8_re_ai, 0xf1f8, 0xd110, { 12, 12, 8, 8, 8, 8, 4}},
32129 {m68k_op_add_8_re_pi, 0xf1f8, 0xd118, { 12, 12, 8, 8, 8, 8, 4}},
32130 {m68k_op_add_8_re_pd, 0xf1f8, 0xd120, { 14, 14, 9, 9, 9, 9, 4}},
32131 {m68k_op_add_8_re_di, 0xf1f8, 0xd128, { 16, 16, 9, 9, 9, 9, 4}},
32132 {m68k_op_add_8_re_ix, 0xf1f8, 0xd130, { 18, 18, 11, 11, 11, 11, 4}},
32133 {m68k_op_addx_16_rr, 0xf1f8, 0xd140, { 4, 4, 2, 2, 2, 2, 2}},
32134 {m68k_op_addx_16_mm, 0xf1f8, 0xd148, { 18, 18, 12, 12, 12, 12, 12}},
32135 {m68k_op_add_16_re_ai, 0xf1f8, 0xd150, { 12, 12, 8, 8, 8, 8, 4}},
32136 {m68k_op_add_16_re_pi, 0xf1f8, 0xd158, { 12, 12, 8, 8, 8, 8, 4}},
32137 {m68k_op_add_16_re_pd, 0xf1f8, 0xd160, { 14, 14, 9, 9, 9, 9, 4}},
32138 {m68k_op_add_16_re_di, 0xf1f8, 0xd168, { 16, 16, 9, 9, 9, 9, 4}},
32139 {m68k_op_add_16_re_ix, 0xf1f8, 0xd170, { 18, 18, 11, 11, 11, 11, 4}},
32140 {m68k_op_addx_32_rr, 0xf1f8, 0xd180, { 8, 6, 2, 2, 2, 2, 2}},
32141 {m68k_op_addx_32_mm, 0xf1f8, 0xd188, { 30, 30, 12, 12, 12, 12, 12}},
32142 {m68k_op_add_32_re_ai, 0xf1f8, 0xd190, { 20, 20, 8, 8, 8, 8, 4}},
32143 {m68k_op_add_32_re_pi, 0xf1f8, 0xd198, { 20, 20, 8, 8, 8, 8, 4}},
32144 {m68k_op_add_32_re_pd, 0xf1f8, 0xd1a0, { 22, 22, 9, 9, 9, 9, 4}},
32145 {m68k_op_add_32_re_di, 0xf1f8, 0xd1a8, { 24, 24, 9, 9, 9, 9, 4}},
32146 {m68k_op_add_32_re_ix, 0xf1f8, 0xd1b0, { 26, 26, 11, 11, 11, 11, 4}},
32147 {m68k_op_adda_32_d, 0xf1f8, 0xd1c0, { 8, 6, 2, 2, 2, 2, 2}},
32148 {m68k_op_adda_32_a, 0xf1f8, 0xd1c8, { 8, 6, 2, 2, 2, 2, 2}},
32149 {m68k_op_adda_32_ai, 0xf1f8, 0xd1d0, { 14, 14, 6, 6, 6, 6, 2}},
32150 {m68k_op_adda_32_pi, 0xf1f8, 0xd1d8, { 14, 14, 6, 6, 6, 6, 2}},
32151 {m68k_op_adda_32_pd, 0xf1f8, 0xd1e0, { 16, 16, 7, 7, 7, 7, 2}},
32152 {m68k_op_adda_32_di, 0xf1f8, 0xd1e8, { 18, 18, 7, 7, 7, 7, 2}},
32153 {m68k_op_adda_32_ix, 0xf1f8, 0xd1f0, { 20, 20, 9, 9, 9, 9, 2}},
32154 {m68k_op_asr_8_s, 0xf1f8, 0xe000, { 6, 6, 6, 6, 6, 6, 6}},
32155 {m68k_op_lsr_8_s, 0xf1f8, 0xe008, { 6, 6, 4, 4, 4, 4, 4}},
32156 {m68k_op_roxr_8_s, 0xf1f8, 0xe010, { 6, 6, 12, 12, 12, 12, 12}},
32157 {m68k_op_ror_8_s, 0xf1f8, 0xe018, { 6, 6, 8, 8, 8, 8, 8}},
32158 {m68k_op_asr_8_r, 0xf1f8, 0xe020, { 6, 6, 6, 6, 6, 6, 6}},
32159 {m68k_op_lsr_8_r, 0xf1f8, 0xe028, { 6, 6, 6, 6, 6, 6, 6}},
32160 {m68k_op_roxr_8_r, 0xf1f8, 0xe030, { 6, 6, 12, 12, 12, 12, 12}},
32161 {m68k_op_ror_8_r, 0xf1f8, 0xe038, { 6, 6, 8, 8, 8, 8, 8}},
32162 {m68k_op_asr_16_s, 0xf1f8, 0xe040, { 6, 6, 6, 6, 6, 6, 6}},
32163 {m68k_op_lsr_16_s, 0xf1f8, 0xe048, { 6, 6, 4, 4, 4, 4, 4}},
32164 {m68k_op_roxr_16_s, 0xf1f8, 0xe050, { 6, 6, 12, 12, 12, 12, 12}},
32165 {m68k_op_ror_16_s, 0xf1f8, 0xe058, { 6, 6, 8, 8, 8, 8, 8}},
32166 {m68k_op_asr_16_r, 0xf1f8, 0xe060, { 6, 6, 6, 6, 6, 6, 6}},
32167 {m68k_op_lsr_16_r, 0xf1f8, 0xe068, { 6, 6, 6, 6, 6, 6, 6}},
32168 {m68k_op_roxr_16_r, 0xf1f8, 0xe070, { 6, 6, 12, 12, 12, 12, 12}},
32169 {m68k_op_ror_16_r, 0xf1f8, 0xe078, { 6, 6, 8, 8, 8, 8, 8}},
32170 {m68k_op_asr_32_s, 0xf1f8, 0xe080, { 8, 8, 6, 6, 6, 6, 6}},
32171 {m68k_op_lsr_32_s, 0xf1f8, 0xe088, { 8, 8, 4, 4, 4, 4, 4}},
32172 {m68k_op_roxr_32_s, 0xf1f8, 0xe090, { 8, 8, 12, 12, 12, 12, 12}},
32173 {m68k_op_ror_32_s, 0xf1f8, 0xe098, { 8, 8, 8, 8, 8, 8, 8}},
32174 {m68k_op_asr_32_r, 0xf1f8, 0xe0a0, { 8, 8, 6, 6, 6, 6, 6}},
32175 {m68k_op_lsr_32_r, 0xf1f8, 0xe0a8, { 8, 8, 6, 6, 6, 6, 6}},
32176 {m68k_op_roxr_32_r, 0xf1f8, 0xe0b0, { 8, 8, 12, 12, 12, 12, 12}},
32177 {m68k_op_ror_32_r, 0xf1f8, 0xe0b8, { 8, 8, 8, 8, 8, 8, 8}},
32178 {m68k_op_asl_8_s, 0xf1f8, 0xe100, { 6, 6, 8, 8, 8, 8, 8}},
32179 {m68k_op_lsl_8_s, 0xf1f8, 0xe108, { 6, 6, 4, 4, 4, 4, 4}},
32180 {m68k_op_roxl_8_s, 0xf1f8, 0xe110, { 6, 6, 12, 12, 12, 12, 12}},
32181 {m68k_op_rol_8_s, 0xf1f8, 0xe118, { 6, 6, 8, 8, 8, 8, 8}},
32182 {m68k_op_asl_8_r, 0xf1f8, 0xe120, { 6, 6, 8, 8, 8, 8, 8}},
32183 {m68k_op_lsl_8_r, 0xf1f8, 0xe128, { 6, 6, 6, 6, 6, 6, 6}},
32184 {m68k_op_roxl_8_r, 0xf1f8, 0xe130, { 6, 6, 12, 12, 12, 12, 12}},
32185 {m68k_op_rol_8_r, 0xf1f8, 0xe138, { 6, 6, 8, 8, 8, 8, 8}},
32186 {m68k_op_asl_16_s, 0xf1f8, 0xe140, { 6, 6, 8, 8, 8, 8, 8}},
32187 {m68k_op_lsl_16_s, 0xf1f8, 0xe148, { 6, 6, 4, 4, 4, 4, 4}},
32188 {m68k_op_roxl_16_s, 0xf1f8, 0xe150, { 6, 6, 12, 12, 12, 12, 12}},
32189 {m68k_op_rol_16_s, 0xf1f8, 0xe158, { 6, 6, 8, 8, 8, 8, 8}},
32190 {m68k_op_asl_16_r, 0xf1f8, 0xe160, { 6, 6, 8, 8, 8, 8, 8}},
32191 {m68k_op_lsl_16_r, 0xf1f8, 0xe168, { 6, 6, 6, 6, 6, 6, 6}},
32192 {m68k_op_roxl_16_r, 0xf1f8, 0xe170, { 6, 6, 12, 12, 12, 12, 12}},
32193 {m68k_op_rol_16_r, 0xf1f8, 0xe178, { 6, 6, 8, 8, 8, 8, 8}},
32194 {m68k_op_asl_32_s, 0xf1f8, 0xe180, { 8, 8, 8, 8, 8, 8, 8}},
32195 {m68k_op_lsl_32_s, 0xf1f8, 0xe188, { 8, 8, 4, 4, 4, 4, 4}},
32196 {m68k_op_roxl_32_s, 0xf1f8, 0xe190, { 8, 8, 12, 12, 12, 12, 12}},
32197 {m68k_op_rol_32_s, 0xf1f8, 0xe198, { 8, 8, 8, 8, 8, 8, 8}},
32198 {m68k_op_asl_32_r, 0xf1f8, 0xe1a0, { 8, 8, 8, 8, 8, 8, 8}},
32199 {m68k_op_lsl_32_r, 0xf1f8, 0xe1a8, { 8, 8, 6, 6, 6, 6, 6}},
32200 {m68k_op_roxl_32_r, 0xf1f8, 0xe1b0, { 8, 8, 12, 12, 12, 12, 12}},
32201 {m68k_op_rol_32_r, 0xf1f8, 0xe1b8, { 8, 8, 8, 8, 8, 8, 8}},
32202 {m68k_op_cpdbcc_32, 0xf1f8, 0xf048, {255, 255, 4, 4, 255, 255, 255}},
32203 {m68k_op_cptrapcc_32, 0xf1f8, 0xf078, {255, 255, 4, 4, 255, 255, 255}},
32204 {m68k_op_ptest_32, 0xffd8, 0xf548, {255, 255, 255, 255, 8, 255, 255}},
32205 {m68k_op_rtm_32, 0xfff0, 0x06c0, {255, 255, 19, 19, 19, 19, 19}},
32206 {m68k_op_trap, 0xfff0, 0x4e40, { 4, 4, 4, 4, 4, 4, 4}},
32207 {m68k_op_btst_8_r_pi7, 0xf1ff, 0x011f, { 8, 8, 8, 8, 8, 8, 4}},
32208 {m68k_op_btst_8_r_pd7, 0xf1ff, 0x0127, { 10, 10, 9, 9, 9, 9, 4}},
32209 {m68k_op_btst_8_r_aw, 0xf1ff, 0x0138, { 12, 12, 8, 8, 8, 8, 4}},
32210 {m68k_op_btst_8_r_al, 0xf1ff, 0x0139, { 16, 16, 8, 8, 8, 8, 4}},
32211 {m68k_op_btst_8_r_pcdi, 0xf1ff, 0x013a, { 12, 12, 9, 9, 9, 9, 4}},
32212 {m68k_op_btst_8_r_pcix, 0xf1ff, 0x013b, { 14, 14, 11, 11, 11, 11, 4}},
32213 {m68k_op_btst_8_r_i, 0xf1ff, 0x013c, { 8, 8, 6, 6, 6, 6, 4}},
32214 {m68k_op_bchg_8_r_pi7, 0xf1ff, 0x015f, { 12, 12, 8, 8, 8, 8, 4}},
32215 {m68k_op_bchg_8_r_pd7, 0xf1ff, 0x0167, { 14, 14, 9, 9, 9, 9, 4}},
32216 {m68k_op_bchg_8_r_aw, 0xf1ff, 0x0178, { 16, 16, 8, 8, 8, 8, 4}},
32217 {m68k_op_bchg_8_r_al, 0xf1ff, 0x0179, { 20, 20, 8, 8, 8, 8, 4}},
32218 {m68k_op_bclr_8_r_pi7, 0xf1ff, 0x019f, { 12, 14, 8, 8, 8, 8, 4}},
32219 {m68k_op_bclr_8_r_pd7, 0xf1ff, 0x01a7, { 14, 16, 9, 9, 9, 9, 4}},
32220 {m68k_op_bclr_8_r_aw, 0xf1ff, 0x01b8, { 16, 18, 8, 8, 8, 8, 4}},
32221 {m68k_op_bclr_8_r_al, 0xf1ff, 0x01b9, { 20, 22, 8, 8, 8, 8, 4}},
32222 {m68k_op_bset_8_r_pi7, 0xf1ff, 0x01df, { 12, 12, 8, 8, 8, 8, 4}},
32223 {m68k_op_bset_8_r_pd7, 0xf1ff, 0x01e7, { 14, 14, 9, 9, 9, 9, 4}},
32224 {m68k_op_bset_8_r_aw, 0xf1ff, 0x01f8, { 16, 16, 8, 8, 8, 8, 4}},
32225 {m68k_op_bset_8_r_al, 0xf1ff, 0x01f9, { 20, 20, 8, 8, 8, 8, 4}},
32226 {m68k_op_move_8_d_pi7, 0xf1ff, 0x101f, { 8, 8, 6, 6, 6, 6, 2}},
32227 {m68k_op_move_8_d_pd7, 0xf1ff, 0x1027, { 10, 10, 7, 7, 7, 7, 2}},
32228 {m68k_op_move_8_d_aw, 0xf1ff, 0x1038, { 12, 12, 6, 6, 6, 6, 2}},
32229 {m68k_op_move_8_d_al, 0xf1ff, 0x1039, { 16, 16, 6, 6, 6, 6, 2}},
32230 {m68k_op_move_8_d_pcdi, 0xf1ff, 0x103a, { 12, 12, 7, 7, 7, 7, 2}},
32231 {m68k_op_move_8_d_pcix, 0xf1ff, 0x103b, { 14, 14, 9, 9, 9, 9, 2}},
32232 {m68k_op_move_8_d_i, 0xf1ff, 0x103c, { 8, 8, 4, 4, 4, 4, 2}},
32233 {m68k_op_move_8_ai_pi7, 0xf1ff, 0x109f, { 12, 12, 8, 8, 8, 8, 4}},
32234 {m68k_op_move_8_ai_pd7, 0xf1ff, 0x10a7, { 14, 14, 9, 9, 9, 9, 4}},
32235 {m68k_op_move_8_ai_aw, 0xf1ff, 0x10b8, { 16, 16, 8, 8, 8, 8, 4}},
32236 {m68k_op_move_8_ai_al, 0xf1ff, 0x10b9, { 20, 20, 8, 8, 8, 8, 4}},
32237 {m68k_op_move_8_ai_pcdi, 0xf1ff, 0x10ba, { 16, 16, 9, 9, 9, 9, 4}},
32238 {m68k_op_move_8_ai_pcix, 0xf1ff, 0x10bb, { 18, 18, 11, 11, 11, 11, 4}},
32239 {m68k_op_move_8_ai_i, 0xf1ff, 0x10bc, { 12, 12, 6, 6, 6, 6, 4}},
32240 {m68k_op_move_8_pi_pi7, 0xf1ff, 0x10df, { 12, 12, 8, 8, 8, 8, 4}},
32241 {m68k_op_move_8_pi_pd7, 0xf1ff, 0x10e7, { 14, 14, 9, 9, 9, 9, 4}},
32242 {m68k_op_move_8_pi_aw, 0xf1ff, 0x10f8, { 16, 16, 8, 8, 8, 8, 4}},
32243 {m68k_op_move_8_pi_al, 0xf1ff, 0x10f9, { 20, 20, 8, 8, 8, 8, 4}},
32244 {m68k_op_move_8_pi_pcdi, 0xf1ff, 0x10fa, { 16, 16, 9, 9, 9, 9, 4}},
32245 {m68k_op_move_8_pi_pcix, 0xf1ff, 0x10fb, { 18, 18, 11, 11, 11, 11, 4}},
32246 {m68k_op_move_8_pi_i, 0xf1ff, 0x10fc, { 12, 12, 6, 6, 6, 6, 4}},
32247 {m68k_op_move_8_pd_pi7, 0xf1ff, 0x111f, { 12, 12, 9, 9, 9, 9, 5}},
32248 {m68k_op_move_8_pd_pd7, 0xf1ff, 0x1127, { 14, 14, 10, 10, 10, 10, 5}},
32249 {m68k_op_move_8_pd_aw, 0xf1ff, 0x1138, { 16, 16, 9, 9, 9, 9, 5}},
32250 {m68k_op_move_8_pd_al, 0xf1ff, 0x1139, { 20, 20, 9, 9, 9, 9, 5}},
32251 {m68k_op_move_8_pd_pcdi, 0xf1ff, 0x113a, { 16, 16, 10, 10, 10, 10, 5}},
32252 {m68k_op_move_8_pd_pcix, 0xf1ff, 0x113b, { 18, 18, 12, 12, 12, 12, 5}},
32253 {m68k_op_move_8_pd_i, 0xf1ff, 0x113c, { 12, 12, 7, 7, 7, 7, 5}},
32254 {m68k_op_move_8_di_pi7, 0xf1ff, 0x115f, { 16, 16, 9, 9, 9, 9, 5}},
32255 {m68k_op_move_8_di_pd7, 0xf1ff, 0x1167, { 18, 18, 10, 10, 10, 10, 5}},
32256 {m68k_op_move_8_di_aw, 0xf1ff, 0x1178, { 20, 20, 9, 9, 9, 9, 5}},
32257 {m68k_op_move_8_di_al, 0xf1ff, 0x1179, { 24, 24, 9, 9, 9, 9, 5}},
32258 {m68k_op_move_8_di_pcdi, 0xf1ff, 0x117a, { 20, 20, 10, 10, 10, 10, 5}},
32259 {m68k_op_move_8_di_pcix, 0xf1ff, 0x117b, { 22, 22, 12, 12, 12, 12, 5}},
32260 {m68k_op_move_8_di_i, 0xf1ff, 0x117c, { 16, 16, 7, 7, 7, 7, 5}},
32261 {m68k_op_move_8_ix_pi7, 0xf1ff, 0x119f, { 18, 18, 11, 11, 11, 11, 7}},
32262 {m68k_op_move_8_ix_pd7, 0xf1ff, 0x11a7, { 20, 20, 12, 12, 12, 12, 7}},
32263 {m68k_op_move_8_ix_aw, 0xf1ff, 0x11b8, { 22, 22, 11, 11, 11, 11, 7}},
32264 {m68k_op_move_8_ix_al, 0xf1ff, 0x11b9, { 26, 26, 11, 11, 11, 11, 7}},
32265 {m68k_op_move_8_ix_pcdi, 0xf1ff, 0x11ba, { 22, 22, 12, 12, 12, 12, 7}},
32266 {m68k_op_move_8_ix_pcix, 0xf1ff, 0x11bb, { 24, 24, 14, 14, 14, 14, 7}},
32267 {m68k_op_move_8_ix_i, 0xf1ff, 0x11bc, { 18, 18, 9, 9, 9, 9, 7}},
32268 {m68k_op_move_32_d_aw, 0xf1ff, 0x2038, { 16, 16, 6, 6, 6, 6, 2}},
32269 {m68k_op_move_32_d_al, 0xf1ff, 0x2039, { 20, 20, 6, 6, 6, 6, 2}},
32270 {m68k_op_move_32_d_pcdi, 0xf1ff, 0x203a, { 16, 16, 7, 7, 7, 7, 2}},
32271 {m68k_op_move_32_d_pcix, 0xf1ff, 0x203b, { 18, 18, 9, 9, 9, 9, 2}},
32272 {m68k_op_move_32_d_i, 0xf1ff, 0x203c, { 12, 12, 6, 6, 6, 6, 2}},
32273 {m68k_op_movea_32_aw, 0xf1ff, 0x2078, { 16, 16, 6, 6, 6, 6, 2}},
32274 {m68k_op_movea_32_al, 0xf1ff, 0x2079, { 20, 20, 6, 6, 6, 6, 2}},
32275 {m68k_op_movea_32_pcdi, 0xf1ff, 0x207a, { 16, 16, 7, 7, 7, 7, 2}},
32276 {m68k_op_movea_32_pcix, 0xf1ff, 0x207b, { 18, 18, 9, 9, 9, 9, 2}},
32277 {m68k_op_movea_32_i, 0xf1ff, 0x207c, { 12, 12, 6, 6, 6, 6, 2}},
32278 {m68k_op_move_32_ai_aw, 0xf1ff, 0x20b8, { 24, 24, 8, 8, 8, 8, 4}},
32279 {m68k_op_move_32_ai_al, 0xf1ff, 0x20b9, { 28, 28, 8, 8, 8, 8, 4}},
32280 {m68k_op_move_32_ai_pcdi, 0xf1ff, 0x20ba, { 24, 24, 9, 9, 9, 9, 4}},
32281 {m68k_op_move_32_ai_pcix, 0xf1ff, 0x20bb, { 26, 26, 11, 11, 11, 11, 4}},
32282 {m68k_op_move_32_ai_i, 0xf1ff, 0x20bc, { 20, 20, 8, 8, 8, 8, 4}},
32283 {m68k_op_move_32_pi_aw, 0xf1ff, 0x20f8, { 24, 24, 8, 8, 8, 8, 4}},
32284 {m68k_op_move_32_pi_al, 0xf1ff, 0x20f9, { 28, 28, 8, 8, 8, 8, 4}},
32285 {m68k_op_move_32_pi_pcdi, 0xf1ff, 0x20fa, { 24, 24, 9, 9, 9, 9, 4}},
32286 {m68k_op_move_32_pi_pcix, 0xf1ff, 0x20fb, { 26, 26, 11, 11, 11, 11, 4}},
32287 {m68k_op_move_32_pi_i, 0xf1ff, 0x20fc, { 20, 20, 8, 8, 8, 8, 4}},
32288 {m68k_op_move_32_pd_aw, 0xf1ff, 0x2138, { 24, 26, 9, 9, 9, 9, 5}},
32289 {m68k_op_move_32_pd_al, 0xf1ff, 0x2139, { 28, 30, 9, 9, 9, 9, 5}},
32290 {m68k_op_move_32_pd_pcdi, 0xf1ff, 0x213a, { 24, 26, 10, 10, 10, 10, 5}},
32291 {m68k_op_move_32_pd_pcix, 0xf1ff, 0x213b, { 26, 28, 12, 12, 12, 12, 5}},
32292 {m68k_op_move_32_pd_i, 0xf1ff, 0x213c, { 20, 22, 9, 9, 9, 9, 5}},
32293 {m68k_op_move_32_di_aw, 0xf1ff, 0x2178, { 28, 28, 9, 9, 9, 9, 5}},
32294 {m68k_op_move_32_di_al, 0xf1ff, 0x2179, { 32, 32, 9, 9, 9, 9, 5}},
32295 {m68k_op_move_32_di_pcdi, 0xf1ff, 0x217a, { 28, 28, 10, 10, 10, 10, 5}},
32296 {m68k_op_move_32_di_pcix, 0xf1ff, 0x217b, { 30, 30, 12, 12, 12, 12, 5}},
32297 {m68k_op_move_32_di_i, 0xf1ff, 0x217c, { 24, 24, 9, 9, 9, 9, 5}},
32298 {m68k_op_move_32_ix_aw, 0xf1ff, 0x21b8, { 30, 30, 11, 11, 11, 11, 7}},
32299 {m68k_op_move_32_ix_al, 0xf1ff, 0x21b9, { 34, 34, 11, 11, 11, 11, 7}},
32300 {m68k_op_move_32_ix_pcdi, 0xf1ff, 0x21ba, { 30, 30, 12, 12, 12, 12, 7}},
32301 {m68k_op_move_32_ix_pcix, 0xf1ff, 0x21bb, { 32, 32, 14, 14, 14, 14, 7}},
32302 {m68k_op_move_32_ix_i, 0xf1ff, 0x21bc, { 26, 26, 11, 11, 11, 11, 7}},
32303 {m68k_op_move_16_d_aw, 0xf1ff, 0x3038, { 12, 12, 6, 6, 6, 6, 2}},
32304 {m68k_op_move_16_d_al, 0xf1ff, 0x3039, { 16, 16, 6, 6, 6, 6, 2}},
32305 {m68k_op_move_16_d_pcdi, 0xf1ff, 0x303a, { 12, 12, 7, 7, 7, 7, 2}},
32306 {m68k_op_move_16_d_pcix, 0xf1ff, 0x303b, { 14, 14, 9, 9, 9, 9, 2}},
32307 {m68k_op_move_16_d_i, 0xf1ff, 0x303c, { 8, 8, 4, 4, 4, 4, 2}},
32308 {m68k_op_movea_16_aw, 0xf1ff, 0x3078, { 12, 12, 6, 6, 6, 6, 2}},
32309 {m68k_op_movea_16_al, 0xf1ff, 0x3079, { 16, 16, 6, 6, 6, 6, 2}},
32310 {m68k_op_movea_16_pcdi, 0xf1ff, 0x307a, { 12, 12, 7, 7, 7, 7, 2}},
32311 {m68k_op_movea_16_pcix, 0xf1ff, 0x307b, { 14, 14, 9, 9, 9, 9, 2}},
32312 {m68k_op_movea_16_i, 0xf1ff, 0x307c, { 8, 8, 4, 4, 4, 4, 2}},
32313 {m68k_op_move_16_ai_aw, 0xf1ff, 0x30b8, { 16, 16, 8, 8, 8, 8, 4}},
32314 {m68k_op_move_16_ai_al, 0xf1ff, 0x30b9, { 20, 20, 8, 8, 8, 8, 4}},
32315 {m68k_op_move_16_ai_pcdi, 0xf1ff, 0x30ba, { 16, 16, 9, 9, 9, 9, 4}},
32316 {m68k_op_move_16_ai_pcix, 0xf1ff, 0x30bb, { 18, 18, 11, 11, 11, 11, 4}},
32317 {m68k_op_move_16_ai_i, 0xf1ff, 0x30bc, { 12, 12, 6, 6, 6, 6, 4}},
32318 {m68k_op_move_16_pi_aw, 0xf1ff, 0x30f8, { 16, 16, 8, 8, 8, 8, 4}},
32319 {m68k_op_move_16_pi_al, 0xf1ff, 0x30f9, { 20, 20, 8, 8, 8, 8, 4}},
32320 {m68k_op_move_16_pi_pcdi, 0xf1ff, 0x30fa, { 16, 16, 9, 9, 9, 9, 4}},
32321 {m68k_op_move_16_pi_pcix, 0xf1ff, 0x30fb, { 18, 18, 11, 11, 11, 11, 4}},
32322 {m68k_op_move_16_pi_i, 0xf1ff, 0x30fc, { 12, 12, 6, 6, 6, 6, 4}},
32323 {m68k_op_move_16_pd_aw, 0xf1ff, 0x3138, { 16, 16, 9, 9, 9, 9, 5}},
32324 {m68k_op_move_16_pd_al, 0xf1ff, 0x3139, { 20, 20, 9, 9, 9, 9, 5}},
32325 {m68k_op_move_16_pd_pcdi, 0xf1ff, 0x313a, { 16, 16, 10, 10, 10, 10, 5}},
32326 {m68k_op_move_16_pd_pcix, 0xf1ff, 0x313b, { 18, 18, 12, 12, 12, 12, 5}},
32327 {m68k_op_move_16_pd_i, 0xf1ff, 0x313c, { 12, 12, 7, 7, 7, 7, 5}},
32328 {m68k_op_move_16_di_aw, 0xf1ff, 0x3178, { 20, 20, 9, 9, 9, 9, 5}},
32329 {m68k_op_move_16_di_al, 0xf1ff, 0x3179, { 24, 24, 9, 9, 9, 9, 5}},
32330 {m68k_op_move_16_di_pcdi, 0xf1ff, 0x317a, { 20, 20, 10, 10, 10, 10, 5}},
32331 {m68k_op_move_16_di_pcix, 0xf1ff, 0x317b, { 22, 22, 12, 12, 12, 12, 5}},
32332 {m68k_op_move_16_di_i, 0xf1ff, 0x317c, { 16, 16, 7, 7, 7, 7, 5}},
32333 {m68k_op_move_16_ix_aw, 0xf1ff, 0x31b8, { 22, 22, 11, 11, 11, 11, 7}},
32334 {m68k_op_move_16_ix_al, 0xf1ff, 0x31b9, { 26, 26, 11, 11, 11, 11, 7}},
32335 {m68k_op_move_16_ix_pcdi, 0xf1ff, 0x31ba, { 22, 22, 12, 12, 12, 12, 7}},
32336 {m68k_op_move_16_ix_pcix, 0xf1ff, 0x31bb, { 24, 24, 14, 14, 14, 14, 7}},
32337 {m68k_op_move_16_ix_i, 0xf1ff, 0x31bc, { 18, 18, 9, 9, 9, 9, 7}},
32338 {m68k_op_chk_32_aw, 0xf1ff, 0x4138, {255, 255, 12, 12, 12, 12, 8}},
32339 {m68k_op_chk_32_al, 0xf1ff, 0x4139, {255, 255, 12, 12, 12, 12, 8}},
32340 {m68k_op_chk_32_pcdi, 0xf1ff, 0x413a, {255, 255, 13, 13, 13, 13, 8}},
32341 {m68k_op_chk_32_pcix, 0xf1ff, 0x413b, {255, 255, 15, 15, 15, 15, 8}},
32342 {m68k_op_chk_32_i, 0xf1ff, 0x413c, {255, 255, 12, 12, 12, 12, 8}},
32343 {m68k_op_chk_16_aw, 0xf1ff, 0x41b8, { 18, 16, 12, 12, 12, 12, 8}},
32344 {m68k_op_chk_16_al, 0xf1ff, 0x41b9, { 22, 20, 12, 12, 12, 12, 8}},
32345 {m68k_op_chk_16_pcdi, 0xf1ff, 0x41ba, { 18, 16, 13, 13, 13, 13, 8}},
32346 {m68k_op_chk_16_pcix, 0xf1ff, 0x41bb, { 20, 18, 15, 15, 15, 15, 8}},
32347 {m68k_op_chk_16_i, 0xf1ff, 0x41bc, { 14, 12, 10, 10, 10, 10, 8}},
32348 {m68k_op_lea_32_aw, 0xf1ff, 0x41f8, { 8, 8, 6, 6, 6, 6, 2}},
32349 {m68k_op_lea_32_al, 0xf1ff, 0x41f9, { 12, 12, 6, 6, 6, 6, 2}},
32350 {m68k_op_lea_32_pcdi, 0xf1ff, 0x41fa, { 8, 8, 7, 7, 7, 7, 2}},
32351 {m68k_op_lea_32_pcix, 0xf1ff, 0x41fb, { 12, 12, 9, 9, 9, 9, 2}},
32352 {m68k_op_addq_8_pi7, 0xf1ff, 0x501f, { 12, 12, 8, 8, 8, 8, 4}},
32353 {m68k_op_addq_8_pd7, 0xf1ff, 0x5027, { 14, 14, 9, 9, 9, 9, 4}},
32354 {m68k_op_addq_8_aw, 0xf1ff, 0x5038, { 16, 16, 8, 8, 8, 8, 4}},
32355 {m68k_op_addq_8_al, 0xf1ff, 0x5039, { 20, 20, 8, 8, 8, 8, 4}},
32356 {m68k_op_addq_16_aw, 0xf1ff, 0x5078, { 16, 16, 8, 8, 8, 8, 4}},
32357 {m68k_op_addq_16_al, 0xf1ff, 0x5079, { 20, 20, 8, 8, 8, 8, 4}},
32358 {m68k_op_addq_32_aw, 0xf1ff, 0x50b8, { 24, 24, 8, 8, 8, 8, 4}},
32359 {m68k_op_addq_32_al, 0xf1ff, 0x50b9, { 28, 28, 8, 8, 8, 8, 4}},
32360 {m68k_op_subq_8_pi7, 0xf1ff, 0x511f, { 12, 12, 8, 8, 8, 8, 4}},
32361 {m68k_op_subq_8_pd7, 0xf1ff, 0x5127, { 14, 14, 9, 9, 9, 9, 4}},
32362 {m68k_op_subq_8_aw, 0xf1ff, 0x5138, { 16, 16, 8, 8, 8, 8, 4}},
32363 {m68k_op_subq_8_al, 0xf1ff, 0x5139, { 20, 20, 8, 8, 8, 8, 4}},
32364 {m68k_op_subq_16_aw, 0xf1ff, 0x5178, { 16, 16, 8, 8, 8, 8, 4}},
32365 {m68k_op_subq_16_al, 0xf1ff, 0x5179, { 20, 20, 8, 8, 8, 8, 4}},
32366 {m68k_op_subq_32_aw, 0xf1ff, 0x51b8, { 24, 24, 8, 8, 8, 8, 4}},
32367 {m68k_op_subq_32_al, 0xf1ff, 0x51b9, { 28, 28, 8, 8, 8, 8, 4}},
32368 {m68k_op_or_8_er_pi7, 0xf1ff, 0x801f, { 8, 8, 6, 6, 6, 6, 2}},
32369 {m68k_op_or_8_er_pd7, 0xf1ff, 0x8027, { 10, 10, 7, 7, 7, 7, 2}},
32370 {m68k_op_or_8_er_aw, 0xf1ff, 0x8038, { 12, 12, 6, 6, 6, 6, 2}},
32371 {m68k_op_or_8_er_al, 0xf1ff, 0x8039, { 16, 16, 6, 6, 6, 6, 2}},
32372 {m68k_op_or_8_er_pcdi, 0xf1ff, 0x803a, { 12, 12, 7, 7, 7, 7, 2}},
32373 {m68k_op_or_8_er_pcix, 0xf1ff, 0x803b, { 14, 14, 9, 9, 9, 9, 2}},
32374 {m68k_op_or_8_er_i, 0xf1ff, 0x803c, { 8, 8, 4, 4, 4, 4, 2}},
32375 {m68k_op_or_16_er_aw, 0xf1ff, 0x8078, { 12, 12, 6, 6, 6, 6, 2}},
32376 {m68k_op_or_16_er_al, 0xf1ff, 0x8079, { 16, 16, 6, 6, 6, 6, 2}},
32377 {m68k_op_or_16_er_pcdi, 0xf1ff, 0x807a, { 12, 12, 7, 7, 7, 7, 2}},
32378 {m68k_op_or_16_er_pcix, 0xf1ff, 0x807b, { 14, 14, 9, 9, 9, 9, 2}},
32379 {m68k_op_or_16_er_i, 0xf1ff, 0x807c, { 8, 8, 4, 4, 4, 4, 2}},
32380 {m68k_op_or_32_er_aw, 0xf1ff, 0x80b8, { 18, 18, 6, 6, 6, 6, 2}},
32381 {m68k_op_or_32_er_al, 0xf1ff, 0x80b9, { 22, 22, 6, 6, 6, 6, 2}},
32382 {m68k_op_or_32_er_pcdi, 0xf1ff, 0x80ba, { 18, 18, 7, 7, 7, 7, 2}},
32383 {m68k_op_or_32_er_pcix, 0xf1ff, 0x80bb, { 20, 20, 9, 9, 9, 9, 2}},
32384 {m68k_op_or_32_er_i, 0xf1ff, 0x80bc, { 16, 14, 6, 6, 6, 6, 2}},
32385 {m68k_op_divu_16_aw, 0xf1ff, 0x80f8, {148, 116, 48, 48, 48, 48, 44}},
32386 {m68k_op_divu_16_al, 0xf1ff, 0x80f9, {152, 120, 48, 48, 48, 48, 44}},
32387 {m68k_op_divu_16_pcdi, 0xf1ff, 0x80fa, {148, 116, 49, 49, 49, 49, 44}},
32388 {m68k_op_divu_16_pcix, 0xf1ff, 0x80fb, {150, 118, 51, 51, 51, 51, 44}},
32389 {m68k_op_divu_16_i, 0xf1ff, 0x80fc, {144, 112, 46, 46, 46, 46, 44}},
32390 {m68k_op_sbcd_8_mm_ay7, 0xf1ff, 0x810f, { 18, 18, 16, 16, 16, 16, 16}},
32391 {m68k_op_or_8_re_pi7, 0xf1ff, 0x811f, { 12, 12, 8, 8, 8, 8, 4}},
32392 {m68k_op_or_8_re_pd7, 0xf1ff, 0x8127, { 14, 14, 9, 9, 9, 9, 4}},
32393 {m68k_op_or_8_re_aw, 0xf1ff, 0x8138, { 16, 16, 8, 8, 8, 8, 4}},
32394 {m68k_op_or_8_re_al, 0xf1ff, 0x8139, { 20, 20, 8, 8, 8, 8, 4}},
32395 {m68k_op_pack_16_mm_ay7, 0xf1ff, 0x814f, {255, 255, 13, 13, 13, 13, 13}},
32396 {m68k_op_or_16_re_aw, 0xf1ff, 0x8178, { 16, 16, 8, 8, 8, 8, 4}},
32397 {m68k_op_or_16_re_al, 0xf1ff, 0x8179, { 20, 20, 8, 8, 8, 8, 4}},
32398 {m68k_op_unpk_16_mm_ay7, 0xf1ff, 0x818f, {255, 255, 13, 13, 13, 13, 13}},
32399 {m68k_op_or_32_re_aw, 0xf1ff, 0x81b8, { 24, 24, 8, 8, 8, 8, 4}},
32400 {m68k_op_or_32_re_al, 0xf1ff, 0x81b9, { 28, 28, 8, 8, 8, 8, 4}},
32401 {m68k_op_divs_16_aw, 0xf1ff, 0x81f8, {166, 130, 60, 60, 60, 60, 56}},
32402 {m68k_op_divs_16_al, 0xf1ff, 0x81f9, {170, 134, 60, 60, 60, 60, 56}},
32403 {m68k_op_divs_16_pcdi, 0xf1ff, 0x81fa, {166, 130, 61, 61, 61, 61, 56}},
32404 {m68k_op_divs_16_pcix, 0xf1ff, 0x81fb, {168, 132, 63, 63, 63, 63, 56}},
32405 {m68k_op_divs_16_i, 0xf1ff, 0x81fc, {162, 126, 58, 58, 58, 58, 56}},
32406 {m68k_op_sub_8_er_pi7, 0xf1ff, 0x901f, { 8, 8, 6, 6, 6, 6, 2}},
32407 {m68k_op_sub_8_er_pd7, 0xf1ff, 0x9027, { 10, 10, 7, 7, 7, 7, 2}},
32408 {m68k_op_sub_8_er_aw, 0xf1ff, 0x9038, { 12, 12, 6, 6, 6, 6, 2}},
32409 {m68k_op_sub_8_er_al, 0xf1ff, 0x9039, { 16, 16, 6, 6, 6, 6, 2}},
32410 {m68k_op_sub_8_er_pcdi, 0xf1ff, 0x903a, { 12, 12, 7, 7, 7, 7, 2}},
32411 {m68k_op_sub_8_er_pcix, 0xf1ff, 0x903b, { 14, 14, 9, 9, 9, 9, 2}},
32412 {m68k_op_sub_8_er_i, 0xf1ff, 0x903c, { 8, 8, 4, 4, 4, 4, 2}},
32413 {m68k_op_sub_16_er_aw, 0xf1ff, 0x9078, { 12, 12, 6, 6, 6, 6, 2}},
32414 {m68k_op_sub_16_er_al, 0xf1ff, 0x9079, { 16, 16, 6, 6, 6, 6, 2}},
32415 {m68k_op_sub_16_er_pcdi, 0xf1ff, 0x907a, { 12, 12, 7, 7, 7, 7, 2}},
32416 {m68k_op_sub_16_er_pcix, 0xf1ff, 0x907b, { 14, 14, 9, 9, 9, 9, 2}},
32417 {m68k_op_sub_16_er_i, 0xf1ff, 0x907c, { 8, 8, 4, 4, 4, 4, 2}},
32418 {m68k_op_sub_32_er_aw, 0xf1ff, 0x90b8, { 18, 18, 6, 6, 6, 6, 2}},
32419 {m68k_op_sub_32_er_al, 0xf1ff, 0x90b9, { 22, 22, 6, 6, 6, 6, 2}},
32420 {m68k_op_sub_32_er_pcdi, 0xf1ff, 0x90ba, { 18, 18, 7, 7, 7, 7, 2}},
32421 {m68k_op_sub_32_er_pcix, 0xf1ff, 0x90bb, { 20, 20, 9, 9, 9, 9, 2}},
32422 {m68k_op_sub_32_er_i, 0xf1ff, 0x90bc, { 16, 14, 6, 6, 6, 6, 2}},
32423 {m68k_op_suba_16_aw, 0xf1ff, 0x90f8, { 16, 16, 6, 6, 6, 6, 2}},
32424 {m68k_op_suba_16_al, 0xf1ff, 0x90f9, { 20, 20, 6, 6, 6, 6, 2}},
32425 {m68k_op_suba_16_pcdi, 0xf1ff, 0x90fa, { 16, 16, 7, 7, 7, 7, 2}},
32426 {m68k_op_suba_16_pcix, 0xf1ff, 0x90fb, { 18, 18, 9, 9, 9, 9, 2}},
32427 {m68k_op_suba_16_i, 0xf1ff, 0x90fc, { 12, 12, 4, 4, 4, 4, 2}},
32428 {m68k_op_subx_8_mm_ay7, 0xf1ff, 0x910f, { 18, 18, 12, 12, 12, 12, 12}},
32429 {m68k_op_sub_8_re_pi7, 0xf1ff, 0x911f, { 12, 12, 8, 8, 8, 8, 4}},
32430 {m68k_op_sub_8_re_pd7, 0xf1ff, 0x9127, { 14, 14, 9, 9, 9, 9, 4}},
32431 {m68k_op_sub_8_re_aw, 0xf1ff, 0x9138, { 16, 16, 8, 8, 8, 8, 4}},
32432 {m68k_op_sub_8_re_al, 0xf1ff, 0x9139, { 20, 20, 8, 8, 8, 8, 4}},
32433 {m68k_op_sub_16_re_aw, 0xf1ff, 0x9178, { 16, 16, 8, 8, 8, 8, 4}},
32434 {m68k_op_sub_16_re_al, 0xf1ff, 0x9179, { 20, 20, 8, 8, 8, 8, 4}},
32435 {m68k_op_sub_32_re_aw, 0xf1ff, 0x91b8, { 24, 24, 8, 8, 8, 8, 4}},
32436 {m68k_op_sub_32_re_al, 0xf1ff, 0x91b9, { 28, 28, 8, 8, 8, 8, 4}},
32437 {m68k_op_suba_32_aw, 0xf1ff, 0x91f8, { 18, 18, 6, 6, 6, 6, 2}},
32438 {m68k_op_suba_32_al, 0xf1ff, 0x91f9, { 22, 22, 6, 6, 6, 6, 2}},
32439 {m68k_op_suba_32_pcdi, 0xf1ff, 0x91fa, { 18, 18, 7, 7, 7, 7, 2}},
32440 {m68k_op_suba_32_pcix, 0xf1ff, 0x91fb, { 20, 20, 9, 9, 9, 9, 2}},
32441 {m68k_op_suba_32_i, 0xf1ff, 0x91fc, { 16, 14, 6, 6, 6, 6, 2}},
32442 {m68k_op_cmp_8_pi7, 0xf1ff, 0xb01f, { 8, 8, 6, 6, 6, 6, 2}},
32443 {m68k_op_cmp_8_pd7, 0xf1ff, 0xb027, { 10, 10, 7, 7, 7, 7, 2}},
32444 {m68k_op_cmp_8_aw, 0xf1ff, 0xb038, { 12, 12, 6, 6, 6, 6, 2}},
32445 {m68k_op_cmp_8_al, 0xf1ff, 0xb039, { 16, 16, 6, 6, 6, 6, 2}},
32446 {m68k_op_cmp_8_pcdi, 0xf1ff, 0xb03a, { 12, 12, 7, 7, 7, 7, 2}},
32447 {m68k_op_cmp_8_pcix, 0xf1ff, 0xb03b, { 14, 14, 9, 9, 9, 9, 2}},
32448 {m68k_op_cmp_8_i, 0xf1ff, 0xb03c, { 8, 8, 4, 4, 4, 4, 2}},
32449 {m68k_op_cmp_16_aw, 0xf1ff, 0xb078, { 12, 12, 6, 6, 6, 6, 2}},
32450 {m68k_op_cmp_16_al, 0xf1ff, 0xb079, { 16, 16, 6, 6, 6, 6, 2}},
32451 {m68k_op_cmp_16_pcdi, 0xf1ff, 0xb07a, { 12, 12, 7, 7, 7, 7, 2}},
32452 {m68k_op_cmp_16_pcix, 0xf1ff, 0xb07b, { 14, 14, 9, 9, 9, 9, 2}},
32453 {m68k_op_cmp_16_i, 0xf1ff, 0xb07c, { 8, 8, 4, 4, 4, 4, 2}},
32454 {m68k_op_cmp_32_aw, 0xf1ff, 0xb0b8, { 18, 18, 6, 6, 6, 6, 2}},
32455 {m68k_op_cmp_32_al, 0xf1ff, 0xb0b9, { 22, 22, 6, 6, 6, 6, 2}},
32456 {m68k_op_cmp_32_pcdi, 0xf1ff, 0xb0ba, { 18, 18, 7, 7, 7, 7, 2}},
32457 {m68k_op_cmp_32_pcix, 0xf1ff, 0xb0bb, { 20, 20, 9, 9, 9, 9, 2}},
32458 {m68k_op_cmp_32_i, 0xf1ff, 0xb0bc, { 14, 14, 6, 6, 6, 6, 2}},
32459 {m68k_op_cmpa_16_aw, 0xf1ff, 0xb0f8, { 14, 14, 8, 8, 8, 8, 4}},
32460 {m68k_op_cmpa_16_al, 0xf1ff, 0xb0f9, { 18, 18, 8, 8, 8, 8, 4}},
32461 {m68k_op_cmpa_16_pcdi, 0xf1ff, 0xb0fa, { 14, 14, 9, 9, 9, 9, 4}},
32462 {m68k_op_cmpa_16_pcix, 0xf1ff, 0xb0fb, { 16, 16, 11, 11, 11, 11, 4}},
32463 {m68k_op_cmpa_16_i, 0xf1ff, 0xb0fc, { 10, 10, 6, 6, 6, 6, 4}},
32464 {m68k_op_cmpm_8_ay7, 0xf1ff, 0xb10f, { 12, 12, 9, 9, 9, 9, 9}},
32465 {m68k_op_eor_8_pi7, 0xf1ff, 0xb11f, { 12, 12, 8, 8, 8, 8, 4}},
32466 {m68k_op_eor_8_pd7, 0xf1ff, 0xb127, { 14, 14, 9, 9, 9, 9, 4}},
32467 {m68k_op_eor_8_aw, 0xf1ff, 0xb138, { 16, 16, 8, 8, 8, 8, 4}},
32468 {m68k_op_eor_8_al, 0xf1ff, 0xb139, { 20, 20, 8, 8, 8, 8, 4}},
32469 {m68k_op_eor_16_aw, 0xf1ff, 0xb178, { 16, 16, 8, 8, 8, 8, 4}},
32470 {m68k_op_eor_16_al, 0xf1ff, 0xb179, { 20, 20, 8, 8, 8, 8, 4}},
32471 {m68k_op_eor_32_aw, 0xf1ff, 0xb1b8, { 24, 24, 8, 8, 8, 8, 4}},
32472 {m68k_op_eor_32_al, 0xf1ff, 0xb1b9, { 28, 28, 8, 8, 8, 8, 4}},
32473 {m68k_op_cmpa_32_aw, 0xf1ff, 0xb1f8, { 18, 18, 8, 8, 8, 8, 4}},
32474 {m68k_op_cmpa_32_al, 0xf1ff, 0xb1f9, { 22, 22, 8, 8, 8, 8, 4}},
32475 {m68k_op_cmpa_32_pcdi, 0xf1ff, 0xb1fa, { 18, 18, 9, 9, 9, 9, 4}},
32476 {m68k_op_cmpa_32_pcix, 0xf1ff, 0xb1fb, { 20, 20, 11, 11, 11, 11, 4}},
32477 {m68k_op_cmpa_32_i, 0xf1ff, 0xb1fc, { 14, 14, 8, 8, 8, 8, 4}},
32478 {m68k_op_and_8_er_pi7, 0xf1ff, 0xc01f, { 8, 8, 6, 6, 6, 6, 2}},
32479 {m68k_op_and_8_er_pd7, 0xf1ff, 0xc027, { 10, 10, 7, 7, 7, 7, 2}},
32480 {m68k_op_and_8_er_aw, 0xf1ff, 0xc038, { 12, 12, 6, 6, 6, 6, 2}},
32481 {m68k_op_and_8_er_al, 0xf1ff, 0xc039, { 16, 16, 6, 6, 6, 6, 2}},
32482 {m68k_op_and_8_er_pcdi, 0xf1ff, 0xc03a, { 12, 12, 7, 7, 7, 7, 2}},
32483 {m68k_op_and_8_er_pcix, 0xf1ff, 0xc03b, { 14, 14, 9, 9, 9, 9, 2}},
32484 {m68k_op_and_8_er_i, 0xf1ff, 0xc03c, { 8, 8, 4, 4, 4, 4, 2}},
32485 {m68k_op_and_16_er_aw, 0xf1ff, 0xc078, { 12, 12, 6, 6, 6, 6, 2}},
32486 {m68k_op_and_16_er_al, 0xf1ff, 0xc079, { 16, 16, 6, 6, 6, 6, 2}},
32487 {m68k_op_and_16_er_pcdi, 0xf1ff, 0xc07a, { 12, 12, 7, 7, 7, 7, 2}},
32488 {m68k_op_and_16_er_pcix, 0xf1ff, 0xc07b, { 14, 14, 9, 9, 9, 9, 2}},
32489 {m68k_op_and_16_er_i, 0xf1ff, 0xc07c, { 8, 8, 4, 4, 4, 4, 2}},
32490 {m68k_op_and_32_er_aw, 0xf1ff, 0xc0b8, { 18, 18, 6, 6, 6, 6, 2}},
32491 {m68k_op_and_32_er_al, 0xf1ff, 0xc0b9, { 22, 22, 6, 6, 6, 6, 2}},
32492 {m68k_op_and_32_er_pcdi, 0xf1ff, 0xc0ba, { 18, 18, 7, 7, 7, 7, 2}},
32493 {m68k_op_and_32_er_pcix, 0xf1ff, 0xc0bb, { 20, 20, 9, 9, 9, 9, 2}},
32494 {m68k_op_and_32_er_i, 0xf1ff, 0xc0bc, { 16, 14, 6, 6, 6, 6, 2}},
32495 {m68k_op_mulu_16_aw, 0xf1ff, 0xc0f8, { 62, 38, 31, 31, 31, 31, 27}},
32496 {m68k_op_mulu_16_al, 0xf1ff, 0xc0f9, { 66, 42, 31, 31, 31, 31, 27}},
32497 {m68k_op_mulu_16_pcdi, 0xf1ff, 0xc0fa, { 62, 38, 32, 32, 32, 32, 27}},
32498 {m68k_op_mulu_16_pcix, 0xf1ff, 0xc0fb, { 64, 40, 34, 34, 34, 34, 27}},
32499 {m68k_op_mulu_16_i, 0xf1ff, 0xc0fc, { 58, 34, 29, 29, 29, 29, 27}},
32500 {m68k_op_abcd_8_mm_ay7, 0xf1ff, 0xc10f, { 18, 18, 16, 16, 16, 16, 16}},
32501 {m68k_op_and_8_re_pi7, 0xf1ff, 0xc11f, { 12, 12, 8, 8, 8, 8, 4}},
32502 {m68k_op_and_8_re_pd7, 0xf1ff, 0xc127, { 14, 14, 9, 9, 9, 9, 4}},
32503 {m68k_op_and_8_re_aw, 0xf1ff, 0xc138, { 16, 16, 8, 8, 8, 8, 4}},
32504 {m68k_op_and_8_re_al, 0xf1ff, 0xc139, { 20, 20, 8, 8, 8, 8, 4}},
32505 {m68k_op_and_16_re_aw, 0xf1ff, 0xc178, { 16, 16, 8, 8, 8, 8, 4}},
32506 {m68k_op_and_16_re_al, 0xf1ff, 0xc179, { 20, 20, 8, 8, 8, 8, 4}},
32507 {m68k_op_and_32_re_aw, 0xf1ff, 0xc1b8, { 24, 24, 8, 8, 8, 8, 4}},
32508 {m68k_op_and_32_re_al, 0xf1ff, 0xc1b9, { 28, 28, 8, 8, 8, 8, 4}},
32509 {m68k_op_muls_16_aw, 0xf1ff, 0xc1f8, { 62, 40, 31, 31, 31, 31, 27}},
32510 {m68k_op_muls_16_al, 0xf1ff, 0xc1f9, { 66, 44, 31, 31, 31, 31, 27}},
32511 {m68k_op_muls_16_pcdi, 0xf1ff, 0xc1fa, { 62, 40, 32, 32, 32, 32, 27}},
32512 {m68k_op_muls_16_pcix, 0xf1ff, 0xc1fb, { 64, 42, 34, 34, 34, 34, 27}},
32513 {m68k_op_muls_16_i, 0xf1ff, 0xc1fc, { 58, 36, 29, 29, 29, 29, 27}},
32514 {m68k_op_add_8_er_pi7, 0xf1ff, 0xd01f, { 8, 8, 6, 6, 6, 6, 2}},
32515 {m68k_op_add_8_er_pd7, 0xf1ff, 0xd027, { 10, 10, 7, 7, 7, 7, 2}},
32516 {m68k_op_add_8_er_aw, 0xf1ff, 0xd038, { 12, 12, 6, 6, 6, 6, 2}},
32517 {m68k_op_add_8_er_al, 0xf1ff, 0xd039, { 16, 16, 6, 6, 6, 6, 2}},
32518 {m68k_op_add_8_er_pcdi, 0xf1ff, 0xd03a, { 12, 12, 7, 7, 7, 7, 2}},
32519 {m68k_op_add_8_er_pcix, 0xf1ff, 0xd03b, { 14, 14, 9, 9, 9, 9, 2}},
32520 {m68k_op_add_8_er_i, 0xf1ff, 0xd03c, { 8, 8, 4, 4, 4, 4, 2}},
32521 {m68k_op_add_16_er_aw, 0xf1ff, 0xd078, { 12, 12, 6, 6, 6, 6, 2}},
32522 {m68k_op_add_16_er_al, 0xf1ff, 0xd079, { 16, 16, 6, 6, 6, 6, 2}},
32523 {m68k_op_add_16_er_pcdi, 0xf1ff, 0xd07a, { 12, 12, 7, 7, 7, 7, 2}},
32524 {m68k_op_add_16_er_pcix, 0xf1ff, 0xd07b, { 14, 14, 9, 9, 9, 9, 2}},
32525 {m68k_op_add_16_er_i, 0xf1ff, 0xd07c, { 8, 8, 4, 4, 4, 4, 2}},
32526 {m68k_op_add_32_er_aw, 0xf1ff, 0xd0b8, { 18, 18, 6, 6, 6, 6, 2}},
32527 {m68k_op_add_32_er_al, 0xf1ff, 0xd0b9, { 22, 22, 6, 6, 6, 6, 2}},
32528 {m68k_op_add_32_er_pcdi, 0xf1ff, 0xd0ba, { 18, 18, 7, 7, 7, 7, 2}},
32529 {m68k_op_add_32_er_pcix, 0xf1ff, 0xd0bb, { 20, 20, 9, 9, 9, 9, 2}},
32530 {m68k_op_add_32_er_i, 0xf1ff, 0xd0bc, { 16, 14, 6, 6, 6, 6, 2}},
32531 {m68k_op_adda_16_aw, 0xf1ff, 0xd0f8, { 16, 16, 6, 6, 6, 6, 2}},
32532 {m68k_op_adda_16_al, 0xf1ff, 0xd0f9, { 20, 20, 6, 6, 6, 6, 2}},
32533 {m68k_op_adda_16_pcdi, 0xf1ff, 0xd0fa, { 16, 16, 7, 7, 7, 7, 2}},
32534 {m68k_op_adda_16_pcix, 0xf1ff, 0xd0fb, { 18, 18, 9, 9, 9, 9, 2}},
32535 {m68k_op_adda_16_i, 0xf1ff, 0xd0fc, { 12, 12, 4, 4, 4, 4, 2}},
32536 {m68k_op_addx_8_mm_ay7, 0xf1ff, 0xd10f, { 18, 18, 12, 12, 12, 12, 12}},
32537 {m68k_op_add_8_re_pi7, 0xf1ff, 0xd11f, { 12, 12, 8, 8, 8, 8, 4}},
32538 {m68k_op_add_8_re_pd7, 0xf1ff, 0xd127, { 14, 14, 9, 9, 9, 9, 4}},
32539 {m68k_op_add_8_re_aw, 0xf1ff, 0xd138, { 16, 16, 8, 8, 8, 8, 4}},
32540 {m68k_op_add_8_re_al, 0xf1ff, 0xd139, { 20, 20, 8, 8, 8, 8, 4}},
32541 {m68k_op_add_16_re_aw, 0xf1ff, 0xd178, { 16, 16, 8, 8, 8, 8, 4}},
32542 {m68k_op_add_16_re_al, 0xf1ff, 0xd179, { 20, 20, 8, 8, 8, 8, 4}},
32543 {m68k_op_add_32_re_aw, 0xf1ff, 0xd1b8, { 24, 24, 8, 8, 8, 8, 4}},
32544 {m68k_op_add_32_re_al, 0xf1ff, 0xd1b9, { 28, 28, 8, 8, 8, 8, 4}},
32545 {m68k_op_adda_32_aw, 0xf1ff, 0xd1f8, { 18, 18, 6, 6, 6, 6, 2}},
32546 {m68k_op_adda_32_al, 0xf1ff, 0xd1f9, { 22, 22, 6, 6, 6, 6, 2}},
32547 {m68k_op_adda_32_pcdi, 0xf1ff, 0xd1fa, { 18, 18, 7, 7, 7, 7, 2}},
32548 {m68k_op_adda_32_pcix, 0xf1ff, 0xd1fb, { 20, 20, 9, 9, 9, 9, 2}},
32549 {m68k_op_adda_32_i, 0xf1ff, 0xd1fc, { 16, 14, 6, 6, 6, 6, 2}},
32550 {m68k_op_ori_8_d, 0xfff8, 0x0000, { 8, 8, 2, 2, 2, 2, 2}},
32551 {m68k_op_ori_8_ai, 0xfff8, 0x0010, { 16, 16, 8, 8, 8, 8, 4}},
32552 {m68k_op_ori_8_pi, 0xfff8, 0x0018, { 16, 16, 8, 8, 8, 8, 4}},
32553 {m68k_op_ori_8_pd, 0xfff8, 0x0020, { 18, 18, 9, 9, 9, 9, 4}},
32554 {m68k_op_ori_8_di, 0xfff8, 0x0028, { 20, 20, 9, 9, 9, 9, 4}},
32555 {m68k_op_ori_8_ix, 0xfff8, 0x0030, { 22, 22, 11, 11, 11, 11, 4}},
32556 {m68k_op_ori_16_d, 0xfff8, 0x0040, { 8, 8, 2, 2, 2, 2, 2}},
32557 {m68k_op_ori_16_ai, 0xfff8, 0x0050, { 16, 16, 8, 8, 8, 8, 4}},
32558 {m68k_op_ori_16_pi, 0xfff8, 0x0058, { 16, 16, 8, 8, 8, 8, 4}},
32559 {m68k_op_ori_16_pd, 0xfff8, 0x0060, { 18, 18, 9, 9, 9, 9, 4}},
32560 {m68k_op_ori_16_di, 0xfff8, 0x0068, { 20, 20, 9, 9, 9, 9, 4}},
32561 {m68k_op_ori_16_ix, 0xfff8, 0x0070, { 22, 22, 11, 11, 11, 11, 4}},
32562 {m68k_op_ori_32_d, 0xfff8, 0x0080, { 16, 14, 2, 2, 2, 2, 2}},
32563 {m68k_op_ori_32_ai, 0xfff8, 0x0090, { 28, 28, 8, 8, 8, 8, 4}},
32564 {m68k_op_ori_32_pi, 0xfff8, 0x0098, { 28, 28, 8, 8, 8, 8, 4}},
32565 {m68k_op_ori_32_pd, 0xfff8, 0x00a0, { 30, 30, 9, 9, 9, 9, 4}},
32566 {m68k_op_ori_32_di, 0xfff8, 0x00a8, { 32, 32, 9, 9, 9, 9, 4}},
32567 {m68k_op_ori_32_ix, 0xfff8, 0x00b0, { 34, 34, 11, 11, 11, 11, 4}},
32568 {m68k_op_chk2cmp2_8_ai, 0xfff8, 0x00d0, {255, 255, 22, 22, 22, 22, 18}},
32569 {m68k_op_chk2cmp2_8_di, 0xfff8, 0x00e8, {255, 255, 23, 23, 23, 23, 18}},
32570 {m68k_op_chk2cmp2_8_ix, 0xfff8, 0x00f0, {255, 255, 25, 25, 25, 25, 18}},
32571 {m68k_op_andi_8_d, 0xfff8, 0x0200, { 8, 8, 2, 2, 2, 2, 2}},
32572 {m68k_op_andi_8_ai, 0xfff8, 0x0210, { 16, 16, 8, 8, 8, 8, 4}},
32573 {m68k_op_andi_8_pi, 0xfff8, 0x0218, { 16, 16, 8, 8, 8, 8, 4}},
32574 {m68k_op_andi_8_pd, 0xfff8, 0x0220, { 18, 18, 9, 9, 9, 9, 4}},
32575 {m68k_op_andi_8_di, 0xfff8, 0x0228, { 20, 20, 9, 9, 9, 9, 4}},
32576 {m68k_op_andi_8_ix, 0xfff8, 0x0230, { 22, 22, 11, 11, 11, 11, 4}},
32577 {m68k_op_andi_16_d, 0xfff8, 0x0240, { 8, 8, 2, 2, 2, 2, 2}},
32578 {m68k_op_andi_16_ai, 0xfff8, 0x0250, { 16, 16, 8, 8, 8, 8, 4}},
32579 {m68k_op_andi_16_pi, 0xfff8, 0x0258, { 16, 16, 8, 8, 8, 8, 4}},
32580 {m68k_op_andi_16_pd, 0xfff8, 0x0260, { 18, 18, 9, 9, 9, 9, 4}},
32581 {m68k_op_andi_16_di, 0xfff8, 0x0268, { 20, 20, 9, 9, 9, 9, 4}},
32582 {m68k_op_andi_16_ix, 0xfff8, 0x0270, { 22, 22, 11, 11, 11, 11, 4}},
32583 {m68k_op_andi_32_d, 0xfff8, 0x0280, { 14, 14, 2, 2, 2, 2, 2}},
32584 {m68k_op_andi_32_ai, 0xfff8, 0x0290, { 28, 28, 8, 8, 8, 8, 4}},
32585 {m68k_op_andi_32_pi, 0xfff8, 0x0298, { 28, 28, 8, 8, 8, 8, 4}},
32586 {m68k_op_andi_32_pd, 0xfff8, 0x02a0, { 30, 30, 9, 9, 9, 9, 4}},
32587 {m68k_op_andi_32_di, 0xfff8, 0x02a8, { 32, 32, 9, 9, 9, 9, 4}},
32588 {m68k_op_andi_32_ix, 0xfff8, 0x02b0, { 34, 34, 11, 11, 11, 11, 4}},
32589 {m68k_op_chk2cmp2_16_ai, 0xfff8, 0x02d0, {255, 255, 22, 22, 22, 22, 18}},
32590 {m68k_op_chk2cmp2_16_di, 0xfff8, 0x02e8, {255, 255, 23, 23, 23, 23, 18}},
32591 {m68k_op_chk2cmp2_16_ix, 0xfff8, 0x02f0, {255, 255, 25, 25, 25, 25, 18}},
32592 {m68k_op_subi_8_d, 0xfff8, 0x0400, { 8, 8, 2, 2, 2, 2, 2}},
32593 {m68k_op_subi_8_ai, 0xfff8, 0x0410, { 16, 16, 8, 8, 8, 8, 4}},
32594 {m68k_op_subi_8_pi, 0xfff8, 0x0418, { 16, 16, 8, 8, 8, 8, 4}},
32595 {m68k_op_subi_8_pd, 0xfff8, 0x0420, { 18, 18, 9, 9, 9, 9, 4}},
32596 {m68k_op_subi_8_di, 0xfff8, 0x0428, { 20, 20, 9, 9, 9, 9, 4}},
32597 {m68k_op_subi_8_ix, 0xfff8, 0x0430, { 22, 22, 11, 11, 11, 11, 4}},
32598 {m68k_op_subi_16_d, 0xfff8, 0x0440, { 8, 8, 2, 2, 2, 2, 2}},
32599 {m68k_op_subi_16_ai, 0xfff8, 0x0450, { 16, 16, 8, 8, 8, 8, 4}},
32600 {m68k_op_subi_16_pi, 0xfff8, 0x0458, { 16, 16, 8, 8, 8, 8, 4}},
32601 {m68k_op_subi_16_pd, 0xfff8, 0x0460, { 18, 18, 9, 9, 9, 9, 4}},
32602 {m68k_op_subi_16_di, 0xfff8, 0x0468, { 20, 20, 9, 9, 9, 9, 4}},
32603 {m68k_op_subi_16_ix, 0xfff8, 0x0470, { 22, 22, 11, 11, 11, 11, 4}},
32604 {m68k_op_subi_32_d, 0xfff8, 0x0480, { 16, 14, 2, 2, 2, 2, 2}},
32605 {m68k_op_subi_32_ai, 0xfff8, 0x0490, { 28, 28, 8, 8, 8, 8, 4}},
32606 {m68k_op_subi_32_pi, 0xfff8, 0x0498, { 28, 28, 8, 8, 8, 8, 4}},
32607 {m68k_op_subi_32_pd, 0xfff8, 0x04a0, { 30, 30, 9, 9, 9, 9, 4}},
32608 {m68k_op_subi_32_di, 0xfff8, 0x04a8, { 32, 32, 9, 9, 9, 9, 4}},
32609 {m68k_op_subi_32_ix, 0xfff8, 0x04b0, { 34, 34, 11, 11, 11, 11, 4}},
32610 {m68k_op_chk2cmp2_32_ai, 0xfff8, 0x04d0, {255, 255, 22, 22, 22, 22, 18}},
32611 {m68k_op_chk2cmp2_32_di, 0xfff8, 0x04e8, {255, 255, 23, 23, 23, 23, 18}},
32612 {m68k_op_chk2cmp2_32_ix, 0xfff8, 0x04f0, {255, 255, 25, 25, 25, 25, 18}},
32613 {m68k_op_addi_8_d, 0xfff8, 0x0600, { 8, 8, 2, 2, 2, 2, 2}},
32614 {m68k_op_addi_8_ai, 0xfff8, 0x0610, { 16, 16, 8, 8, 8, 8, 4}},
32615 {m68k_op_addi_8_pi, 0xfff8, 0x0618, { 16, 16, 8, 8, 8, 8, 4}},
32616 {m68k_op_addi_8_pd, 0xfff8, 0x0620, { 18, 18, 9, 9, 9, 9, 4}},
32617 {m68k_op_addi_8_di, 0xfff8, 0x0628, { 20, 20, 9, 9, 9, 9, 4}},
32618 {m68k_op_addi_8_ix, 0xfff8, 0x0630, { 22, 22, 11, 11, 11, 11, 4}},
32619 {m68k_op_addi_16_d, 0xfff8, 0x0640, { 8, 8, 2, 2, 2, 2, 2}},
32620 {m68k_op_addi_16_ai, 0xfff8, 0x0650, { 16, 16, 8, 8, 8, 8, 4}},
32621 {m68k_op_addi_16_pi, 0xfff8, 0x0658, { 16, 16, 8, 8, 8, 8, 4}},
32622 {m68k_op_addi_16_pd, 0xfff8, 0x0660, { 18, 18, 9, 9, 9, 9, 4}},
32623 {m68k_op_addi_16_di, 0xfff8, 0x0668, { 20, 20, 9, 9, 9, 9, 4}},
32624 {m68k_op_addi_16_ix, 0xfff8, 0x0670, { 22, 22, 11, 11, 11, 11, 4}},
32625 {m68k_op_addi_32_d, 0xfff8, 0x0680, { 16, 14, 2, 2, 2, 2, 2}},
32626 {m68k_op_addi_32_ai, 0xfff8, 0x0690, { 28, 28, 8, 8, 8, 8, 4}},
32627 {m68k_op_addi_32_pi, 0xfff8, 0x0698, { 28, 28, 8, 8, 8, 8, 4}},
32628 {m68k_op_addi_32_pd, 0xfff8, 0x06a0, { 30, 30, 9, 9, 9, 9, 4}},
32629 {m68k_op_addi_32_di, 0xfff8, 0x06a8, { 32, 32, 9, 9, 9, 9, 4}},
32630 {m68k_op_addi_32_ix, 0xfff8, 0x06b0, { 34, 34, 11, 11, 11, 11, 4}},
32631 {m68k_op_callm_32_ai, 0xfff8, 0x06d0, {255, 255, 64, 64, 64, 64, 60}},
32632 {m68k_op_callm_32_di, 0xfff8, 0x06e8, {255, 255, 65, 65, 65, 65, 60}},
32633 {m68k_op_callm_32_ix, 0xfff8, 0x06f0, {255, 255, 67, 67, 67, 67, 60}},
32634 {m68k_op_btst_32_s_d, 0xfff8, 0x0800, { 10, 10, 4, 4, 4, 4, 4}},
32635 {m68k_op_btst_8_s_ai, 0xfff8, 0x0810, { 12, 12, 8, 8, 8, 8, 4}},
32636 {m68k_op_btst_8_s_pi, 0xfff8, 0x0818, { 12, 12, 8, 8, 8, 8, 4}},
32637 {m68k_op_btst_8_s_pd, 0xfff8, 0x0820, { 14, 14, 9, 9, 9, 9, 4}},
32638 {m68k_op_btst_8_s_di, 0xfff8, 0x0828, { 16, 16, 9, 9, 9, 9, 4}},
32639 {m68k_op_btst_8_s_ix, 0xfff8, 0x0830, { 18, 18, 11, 11, 11, 11, 4}},
32640 {m68k_op_bchg_32_s_d, 0xfff8, 0x0840, { 12, 12, 4, 4, 4, 4, 4}},
32641 {m68k_op_bchg_8_s_ai, 0xfff8, 0x0850, { 16, 16, 8, 8, 8, 8, 4}},
32642 {m68k_op_bchg_8_s_pi, 0xfff8, 0x0858, { 16, 16, 8, 8, 8, 8, 4}},
32643 {m68k_op_bchg_8_s_pd, 0xfff8, 0x0860, { 18, 18, 9, 9, 9, 9, 4}},
32644 {m68k_op_bchg_8_s_di, 0xfff8, 0x0868, { 20, 20, 9, 9, 9, 9, 4}},
32645 {m68k_op_bchg_8_s_ix, 0xfff8, 0x0870, { 22, 22, 11, 11, 11, 11, 4}},
32646 {m68k_op_bclr_32_s_d, 0xfff8, 0x0880, { 14, 14, 4, 4, 4, 4, 4}},
32647 {m68k_op_bclr_8_s_ai, 0xfff8, 0x0890, { 16, 16, 8, 8, 8, 8, 4}},
32648 {m68k_op_bclr_8_s_pi, 0xfff8, 0x0898, { 16, 16, 8, 8, 8, 8, 4}},
32649 {m68k_op_bclr_8_s_pd, 0xfff8, 0x08a0, { 18, 18, 9, 9, 9, 9, 4}},
32650 {m68k_op_bclr_8_s_di, 0xfff8, 0x08a8, { 20, 20, 9, 9, 9, 9, 4}},
32651 {m68k_op_bclr_8_s_ix, 0xfff8, 0x08b0, { 22, 22, 11, 11, 11, 11, 4}},
32652 {m68k_op_bset_32_s_d, 0xfff8, 0x08c0, { 12, 12, 4, 4, 4, 4, 4}},
32653 {m68k_op_bset_8_s_ai, 0xfff8, 0x08d0, { 16, 16, 8, 8, 8, 8, 4}},
32654 {m68k_op_bset_8_s_pi, 0xfff8, 0x08d8, { 16, 16, 8, 8, 8, 8, 4}},
32655 {m68k_op_bset_8_s_pd, 0xfff8, 0x08e0, { 18, 18, 9, 9, 9, 9, 4}},
32656 {m68k_op_bset_8_s_di, 0xfff8, 0x08e8, { 20, 20, 9, 9, 9, 9, 4}},
32657 {m68k_op_bset_8_s_ix, 0xfff8, 0x08f0, { 22, 22, 11, 11, 11, 11, 4}},
32658 {m68k_op_eori_8_d, 0xfff8, 0x0a00, { 8, 8, 2, 2, 2, 2, 2}},
32659 {m68k_op_eori_8_ai, 0xfff8, 0x0a10, { 16, 16, 8, 8, 8, 8, 4}},
32660 {m68k_op_eori_8_pi, 0xfff8, 0x0a18, { 16, 16, 8, 8, 8, 8, 4}},
32661 {m68k_op_eori_8_pd, 0xfff8, 0x0a20, { 18, 18, 9, 9, 9, 9, 4}},
32662 {m68k_op_eori_8_di, 0xfff8, 0x0a28, { 20, 20, 9, 9, 9, 9, 4}},
32663 {m68k_op_eori_8_ix, 0xfff8, 0x0a30, { 22, 22, 11, 11, 11, 11, 4}},
32664 {m68k_op_eori_16_d, 0xfff8, 0x0a40, { 8, 8, 2, 2, 2, 2, 2}},
32665 {m68k_op_eori_16_ai, 0xfff8, 0x0a50, { 16, 16, 8, 8, 8, 8, 4}},
32666 {m68k_op_eori_16_pi, 0xfff8, 0x0a58, { 16, 16, 8, 8, 8, 8, 4}},
32667 {m68k_op_eori_16_pd, 0xfff8, 0x0a60, { 18, 18, 9, 9, 9, 9, 4}},
32668 {m68k_op_eori_16_di, 0xfff8, 0x0a68, { 20, 20, 9, 9, 9, 9, 4}},
32669 {m68k_op_eori_16_ix, 0xfff8, 0x0a70, { 22, 22, 11, 11, 11, 11, 4}},
32670 {m68k_op_eori_32_d, 0xfff8, 0x0a80, { 16, 14, 2, 2, 2, 2, 2}},
32671 {m68k_op_eori_32_ai, 0xfff8, 0x0a90, { 28, 28, 8, 8, 8, 8, 4}},
32672 {m68k_op_eori_32_pi, 0xfff8, 0x0a98, { 28, 28, 8, 8, 8, 8, 4}},
32673 {m68k_op_eori_32_pd, 0xfff8, 0x0aa0, { 30, 30, 9, 9, 9, 9, 4}},
32674 {m68k_op_eori_32_di, 0xfff8, 0x0aa8, { 32, 32, 9, 9, 9, 9, 4}},
32675 {m68k_op_eori_32_ix, 0xfff8, 0x0ab0, { 34, 34, 11, 11, 11, 11, 4}},
32676 {m68k_op_cas_8_ai, 0xfff8, 0x0ad0, {255, 255, 16, 16, 16, 16, 12}},
32677 {m68k_op_cas_8_pi, 0xfff8, 0x0ad8, {255, 255, 16, 16, 16, 16, 12}},
32678 {m68k_op_cas_8_pd, 0xfff8, 0x0ae0, {255, 255, 17, 17, 17, 17, 12}},
32679 {m68k_op_cas_8_di, 0xfff8, 0x0ae8, {255, 255, 17, 17, 17, 17, 12}},
32680 {m68k_op_cas_8_ix, 0xfff8, 0x0af0, {255, 255, 19, 19, 19, 19, 12}},
32681 {m68k_op_cmpi_8_d, 0xfff8, 0x0c00, { 8, 8, 2, 2, 2, 2, 2}},
32682 {m68k_op_cmpi_8_ai, 0xfff8, 0x0c10, { 12, 12, 6, 6, 6, 6, 2}},
32683 {m68k_op_cmpi_8_pi, 0xfff8, 0x0c18, { 12, 12, 6, 6, 6, 6, 2}},
32684 {m68k_op_cmpi_8_pd, 0xfff8, 0x0c20, { 14, 14, 7, 7, 7, 7, 2}},
32685 {m68k_op_cmpi_8_di, 0xfff8, 0x0c28, { 16, 16, 7, 7, 7, 7, 2}},
32686 {m68k_op_cmpi_8_ix, 0xfff8, 0x0c30, { 18, 18, 9, 9, 9, 9, 2}},
32687 {m68k_op_cmpi_16_d, 0xfff8, 0x0c40, { 8, 8, 2, 2, 2, 2, 2}},
32688 {m68k_op_cmpi_16_ai, 0xfff8, 0x0c50, { 12, 12, 6, 6, 6, 6, 2}},
32689 {m68k_op_cmpi_16_pi, 0xfff8, 0x0c58, { 12, 12, 6, 6, 6, 6, 2}},
32690 {m68k_op_cmpi_16_pd, 0xfff8, 0x0c60, { 14, 14, 7, 7, 7, 7, 2}},
32691 {m68k_op_cmpi_16_di, 0xfff8, 0x0c68, { 16, 16, 7, 7, 7, 7, 2}},
32692 {m68k_op_cmpi_16_ix, 0xfff8, 0x0c70, { 18, 18, 9, 9, 9, 9, 2}},
32693 {m68k_op_cmpi_32_d, 0xfff8, 0x0c80, { 14, 12, 2, 2, 2, 2, 2}},
32694 {m68k_op_cmpi_32_ai, 0xfff8, 0x0c90, { 20, 20, 6, 6, 6, 6, 2}},
32695 {m68k_op_cmpi_32_pi, 0xfff8, 0x0c98, { 20, 20, 6, 6, 6, 6, 2}},
32696 {m68k_op_cmpi_32_pd, 0xfff8, 0x0ca0, { 22, 22, 7, 7, 7, 7, 2}},
32697 {m68k_op_cmpi_32_di, 0xfff8, 0x0ca8, { 24, 24, 7, 7, 7, 7, 2}},
32698 {m68k_op_cmpi_32_ix, 0xfff8, 0x0cb0, { 26, 26, 9, 9, 9, 9, 2}},
32699 {m68k_op_cas_16_ai, 0xfff8, 0x0cd0, {255, 255, 16, 16, 16, 16, 12}},
32700 {m68k_op_cas_16_pi, 0xfff8, 0x0cd8, {255, 255, 16, 16, 16, 16, 12}},
32701 {m68k_op_cas_16_pd, 0xfff8, 0x0ce0, {255, 255, 17, 17, 17, 17, 12}},
32702 {m68k_op_cas_16_di, 0xfff8, 0x0ce8, {255, 255, 17, 17, 17, 17, 12}},
32703 {m68k_op_cas_16_ix, 0xfff8, 0x0cf0, {255, 255, 19, 19, 19, 19, 12}},
32704 {m68k_op_moves_8_ai, 0xfff8, 0x0e10, {255, 18, 9, 9, 9, 9, 5}},
32705 {m68k_op_moves_8_pi, 0xfff8, 0x0e18, {255, 18, 9, 9, 9, 9, 5}},
32706 {m68k_op_moves_8_pd, 0xfff8, 0x0e20, {255, 20, 10, 10, 10, 10, 5}},
32707 {m68k_op_moves_8_di, 0xfff8, 0x0e28, {255, 26, 10, 10, 10, 10, 5}},
32708 {m68k_op_moves_8_ix, 0xfff8, 0x0e30, {255, 30, 12, 12, 12, 12, 5}},
32709 {m68k_op_moves_16_ai, 0xfff8, 0x0e50, {255, 18, 9, 9, 9, 9, 5}},
32710 {m68k_op_moves_16_pi, 0xfff8, 0x0e58, {255, 18, 9, 9, 9, 9, 5}},
32711 {m68k_op_moves_16_pd, 0xfff8, 0x0e60, {255, 20, 10, 10, 10, 10, 5}},
32712 {m68k_op_moves_16_di, 0xfff8, 0x0e68, {255, 26, 10, 10, 10, 10, 5}},
32713 {m68k_op_moves_16_ix, 0xfff8, 0x0e70, {255, 30, 12, 12, 12, 12, 5}},
32714 {m68k_op_moves_32_ai, 0xfff8, 0x0e90, {255, 22, 9, 9, 9, 9, 5}},
32715 {m68k_op_moves_32_pi, 0xfff8, 0x0e98, {255, 22, 9, 9, 9, 9, 5}},
32716 {m68k_op_moves_32_pd, 0xfff8, 0x0ea0, {255, 28, 10, 10, 10, 10, 5}},
32717 {m68k_op_moves_32_di, 0xfff8, 0x0ea8, {255, 32, 10, 10, 10, 10, 5}},
32718 {m68k_op_moves_32_ix, 0xfff8, 0x0eb0, {255, 36, 12, 12, 12, 12, 5}},
32719 {m68k_op_cas_32_ai, 0xfff8, 0x0ed0, {255, 255, 16, 16, 16, 16, 12}},
32720 {m68k_op_cas_32_pi, 0xfff8, 0x0ed8, {255, 255, 16, 16, 16, 16, 12}},
32721 {m68k_op_cas_32_pd, 0xfff8, 0x0ee0, {255, 255, 17, 17, 17, 17, 12}},
32722 {m68k_op_cas_32_di, 0xfff8, 0x0ee8, {255, 255, 17, 17, 17, 17, 12}},
32723 {m68k_op_cas_32_ix, 0xfff8, 0x0ef0, {255, 255, 19, 19, 19, 19, 12}},
32724 {m68k_op_move_8_aw_d, 0xfff8, 0x11c0, { 12, 12, 4, 4, 4, 4, 4}},
32725 {m68k_op_move_8_aw_ai, 0xfff8, 0x11d0, { 16, 16, 8, 8, 8, 8, 4}},
32726 {m68k_op_move_8_aw_pi, 0xfff8, 0x11d8, { 16, 16, 8, 8, 8, 8, 4}},
32727 {m68k_op_move_8_aw_pd, 0xfff8, 0x11e0, { 18, 18, 9, 9, 9, 9, 4}},
32728 {m68k_op_move_8_aw_di, 0xfff8, 0x11e8, { 20, 20, 9, 9, 9, 9, 4}},
32729 {m68k_op_move_8_aw_ix, 0xfff8, 0x11f0, { 22, 22, 11, 11, 11, 11, 4}},
32730 {m68k_op_move_8_al_d, 0xfff8, 0x13c0, { 16, 16, 6, 6, 6, 6, 6}},
32731 {m68k_op_move_8_al_ai, 0xfff8, 0x13d0, { 20, 20, 10, 10, 10, 10, 6}},
32732 {m68k_op_move_8_al_pi, 0xfff8, 0x13d8, { 20, 20, 10, 10, 10, 10, 6}},
32733 {m68k_op_move_8_al_pd, 0xfff8, 0x13e0, { 22, 22, 11, 11, 11, 11, 6}},
32734 {m68k_op_move_8_al_di, 0xfff8, 0x13e8, { 24, 24, 11, 11, 11, 11, 6}},
32735 {m68k_op_move_8_al_ix, 0xfff8, 0x13f0, { 26, 26, 13, 13, 13, 13, 6}},
32736 {m68k_op_move_8_pi7_d, 0xfff8, 0x1ec0, { 8, 8, 4, 4, 4, 4, 4}},
32737 {m68k_op_move_8_pi7_ai, 0xfff8, 0x1ed0, { 12, 12, 8, 8, 8, 8, 4}},
32738 {m68k_op_move_8_pi7_pi, 0xfff8, 0x1ed8, { 12, 12, 8, 8, 8, 8, 4}},
32739 {m68k_op_move_8_pi7_pd, 0xfff8, 0x1ee0, { 14, 14, 9, 9, 9, 9, 4}},
32740 {m68k_op_move_8_pi7_di, 0xfff8, 0x1ee8, { 16, 16, 9, 9, 9, 9, 4}},
32741 {m68k_op_move_8_pi7_ix, 0xfff8, 0x1ef0, { 18, 18, 11, 11, 11, 11, 4}},
32742 {m68k_op_move_8_pd7_d, 0xfff8, 0x1f00, { 8, 8, 5, 5, 5, 5, 5}},
32743 {m68k_op_move_8_pd7_ai, 0xfff8, 0x1f10, { 12, 12, 9, 9, 9, 9, 5}},
32744 {m68k_op_move_8_pd7_pi, 0xfff8, 0x1f18, { 12, 12, 9, 9, 9, 9, 5}},
32745 {m68k_op_move_8_pd7_pd, 0xfff8, 0x1f20, { 14, 14, 10, 10, 10, 10, 5}},
32746 {m68k_op_move_8_pd7_di, 0xfff8, 0x1f28, { 16, 16, 10, 10, 10, 10, 5}},
32747 {m68k_op_move_8_pd7_ix, 0xfff8, 0x1f30, { 18, 18, 12, 12, 12, 12, 5}},
32748 {m68k_op_move_32_aw_d, 0xfff8, 0x21c0, { 16, 16, 4, 4, 4, 4, 4}},
32749 {m68k_op_move_32_aw_a, 0xfff8, 0x21c8, { 16, 16, 4, 4, 4, 4, 4}},
32750 {m68k_op_move_32_aw_ai, 0xfff8, 0x21d0, { 24, 24, 8, 8, 8, 8, 4}},
32751 {m68k_op_move_32_aw_pi, 0xfff8, 0x21d8, { 24, 24, 8, 8, 8, 8, 4}},
32752 {m68k_op_move_32_aw_pd, 0xfff8, 0x21e0, { 26, 26, 9, 9, 9, 9, 4}},
32753 {m68k_op_move_32_aw_di, 0xfff8, 0x21e8, { 28, 28, 9, 9, 9, 9, 4}},
32754 {m68k_op_move_32_aw_ix, 0xfff8, 0x21f0, { 30, 30, 11, 11, 11, 11, 4}},
32755 {m68k_op_move_32_al_d, 0xfff8, 0x23c0, { 20, 20, 6, 6, 6, 6, 6}},
32756 {m68k_op_move_32_al_a, 0xfff8, 0x23c8, { 20, 20, 6, 6, 6, 6, 6}},
32757 {m68k_op_move_32_al_ai, 0xfff8, 0x23d0, { 28, 28, 10, 10, 10, 10, 6}},
32758 {m68k_op_move_32_al_pi, 0xfff8, 0x23d8, { 28, 28, 10, 10, 10, 10, 6}},
32759 {m68k_op_move_32_al_pd, 0xfff8, 0x23e0, { 30, 30, 11, 11, 11, 11, 6}},
32760 {m68k_op_move_32_al_di, 0xfff8, 0x23e8, { 32, 32, 11, 11, 11, 11, 6}},
32761 {m68k_op_move_32_al_ix, 0xfff8, 0x23f0, { 34, 34, 13, 13, 13, 13, 6}},
32762 {m68k_op_move_16_aw_d, 0xfff8, 0x31c0, { 12, 12, 4, 4, 4, 4, 4}},
32763 {m68k_op_move_16_aw_a, 0xfff8, 0x31c8, { 12, 12, 4, 4, 4, 4, 4}},
32764 {m68k_op_move_16_aw_ai, 0xfff8, 0x31d0, { 16, 16, 8, 8, 8, 8, 4}},
32765 {m68k_op_move_16_aw_pi, 0xfff8, 0x31d8, { 16, 16, 8, 8, 8, 8, 4}},
32766 {m68k_op_move_16_aw_pd, 0xfff8, 0x31e0, { 18, 18, 9, 9, 9, 9, 4}},
32767 {m68k_op_move_16_aw_di, 0xfff8, 0x31e8, { 20, 20, 9, 9, 9, 9, 4}},
32768 {m68k_op_move_16_aw_ix, 0xfff8, 0x31f0, { 22, 22, 11, 11, 11, 11, 4}},
32769 {m68k_op_move_16_al_d, 0xfff8, 0x33c0, { 16, 16, 6, 6, 6, 6, 6}},
32770 {m68k_op_move_16_al_a, 0xfff8, 0x33c8, { 16, 16, 6, 6, 6, 6, 6}},
32771 {m68k_op_move_16_al_ai, 0xfff8, 0x33d0, { 20, 20, 10, 10, 10, 10, 6}},
32772 {m68k_op_move_16_al_pi, 0xfff8, 0x33d8, { 20, 20, 10, 10, 10, 10, 6}},
32773 {m68k_op_move_16_al_pd, 0xfff8, 0x33e0, { 22, 22, 11, 11, 11, 11, 6}},
32774 {m68k_op_move_16_al_di, 0xfff8, 0x33e8, { 24, 24, 11, 11, 11, 11, 6}},
32775 {m68k_op_move_16_al_ix, 0xfff8, 0x33f0, { 26, 26, 13, 13, 13, 13, 6}},
32776 {m68k_op_negx_8_d, 0xfff8, 0x4000, { 4, 4, 2, 2, 2, 2, 2}},
32777 {m68k_op_negx_8_ai, 0xfff8, 0x4010, { 12, 12, 8, 8, 8, 8, 4}},
32778 {m68k_op_negx_8_pi, 0xfff8, 0x4018, { 12, 12, 8, 8, 8, 8, 4}},
32779 {m68k_op_negx_8_pd, 0xfff8, 0x4020, { 14, 14, 9, 9, 9, 9, 4}},
32780 {m68k_op_negx_8_di, 0xfff8, 0x4028, { 16, 16, 9, 9, 9, 9, 4}},
32781 {m68k_op_negx_8_ix, 0xfff8, 0x4030, { 18, 18, 11, 11, 11, 11, 4}},
32782 {m68k_op_negx_16_d, 0xfff8, 0x4040, { 4, 4, 2, 2, 2, 2, 2}},
32783 {m68k_op_negx_16_ai, 0xfff8, 0x4050, { 12, 12, 8, 8, 8, 8, 4}},
32784 {m68k_op_negx_16_pi, 0xfff8, 0x4058, { 12, 12, 8, 8, 8, 8, 4}},
32785 {m68k_op_negx_16_pd, 0xfff8, 0x4060, { 14, 14, 9, 9, 9, 9, 4}},
32786 {m68k_op_negx_16_di, 0xfff8, 0x4068, { 16, 16, 9, 9, 9, 9, 4}},
32787 {m68k_op_negx_16_ix, 0xfff8, 0x4070, { 18, 18, 11, 11, 11, 11, 4}},
32788 {m68k_op_negx_32_d, 0xfff8, 0x4080, { 6, 6, 2, 2, 2, 2, 2}},
32789 {m68k_op_negx_32_ai, 0xfff8, 0x4090, { 20, 20, 8, 8, 8, 8, 4}},
32790 {m68k_op_negx_32_pi, 0xfff8, 0x4098, { 20, 20, 8, 8, 8, 8, 4}},
32791 {m68k_op_negx_32_pd, 0xfff8, 0x40a0, { 22, 22, 9, 9, 9, 9, 4}},
32792 {m68k_op_negx_32_di, 0xfff8, 0x40a8, { 24, 24, 9, 9, 9, 9, 4}},
32793 {m68k_op_negx_32_ix, 0xfff8, 0x40b0, { 26, 26, 11, 11, 11, 11, 4}},
32794 {m68k_op_move_16_frs_d, 0xfff8, 0x40c0, { 6, 4, 8, 8, 8, 8, 8}},
32795 {m68k_op_move_16_frs_ai, 0xfff8, 0x40d0, { 12, 12, 12, 12, 12, 12, 8}},
32796 {m68k_op_move_16_frs_pi, 0xfff8, 0x40d8, { 12, 12, 12, 12, 12, 12, 8}},
32797 {m68k_op_move_16_frs_pd, 0xfff8, 0x40e0, { 14, 14, 13, 13, 13, 13, 8}},
32798 {m68k_op_move_16_frs_di, 0xfff8, 0x40e8, { 16, 16, 13, 13, 13, 13, 8}},
32799 {m68k_op_move_16_frs_ix, 0xfff8, 0x40f0, { 18, 18, 15, 15, 15, 15, 8}},
32800 {m68k_op_clr_8_d, 0xfff8, 0x4200, { 4, 4, 2, 2, 2, 2, 2}},
32801 {m68k_op_clr_8_ai, 0xfff8, 0x4210, { 12, 8, 8, 8, 8, 8, 4}},
32802 {m68k_op_clr_8_pi, 0xfff8, 0x4218, { 12, 8, 8, 8, 8, 8, 4}},
32803 {m68k_op_clr_8_pd, 0xfff8, 0x4220, { 14, 10, 9, 9, 9, 9, 4}},
32804 {m68k_op_clr_8_di, 0xfff8, 0x4228, { 16, 12, 9, 9, 9, 9, 4}},
32805 {m68k_op_clr_8_ix, 0xfff8, 0x4230, { 18, 14, 11, 11, 11, 11, 4}},
32806 {m68k_op_clr_16_d, 0xfff8, 0x4240, { 4, 4, 2, 2, 2, 2, 2}},
32807 {m68k_op_clr_16_ai, 0xfff8, 0x4250, { 12, 8, 8, 8, 8, 8, 4}},
32808 {m68k_op_clr_16_pi, 0xfff8, 0x4258, { 12, 8, 8, 8, 8, 8, 4}},
32809 {m68k_op_clr_16_pd, 0xfff8, 0x4260, { 14, 10, 9, 9, 9, 9, 4}},
32810 {m68k_op_clr_16_di, 0xfff8, 0x4268, { 16, 12, 9, 9, 9, 9, 4}},
32811 {m68k_op_clr_16_ix, 0xfff8, 0x4270, { 18, 14, 11, 11, 11, 11, 4}},
32812 {m68k_op_clr_32_d, 0xfff8, 0x4280, { 6, 6, 2, 2, 2, 2, 2}},
32813 {m68k_op_clr_32_ai, 0xfff8, 0x4290, { 20, 12, 8, 8, 8, 8, 4}},
32814 {m68k_op_clr_32_pi, 0xfff8, 0x4298, { 20, 12, 8, 8, 8, 8, 4}},
32815 {m68k_op_clr_32_pd, 0xfff8, 0x42a0, { 22, 14, 9, 9, 9, 9, 4}},
32816 {m68k_op_clr_32_di, 0xfff8, 0x42a8, { 24, 16, 9, 9, 9, 9, 4}},
32817 {m68k_op_clr_32_ix, 0xfff8, 0x42b0, { 26, 20, 11, 11, 11, 11, 4}},
32818 {m68k_op_move_16_frc_d, 0xfff8, 0x42c0, {255, 4, 4, 4, 4, 4, 4}},
32819 {m68k_op_move_16_frc_ai, 0xfff8, 0x42d0, {255, 12, 8, 8, 8, 8, 4}},
32820 {m68k_op_move_16_frc_pi, 0xfff8, 0x42d8, {255, 12, 8, 8, 8, 8, 4}},
32821 {m68k_op_move_16_frc_pd, 0xfff8, 0x42e0, {255, 14, 9, 9, 9, 9, 4}},
32822 {m68k_op_move_16_frc_di, 0xfff8, 0x42e8, {255, 16, 9, 9, 9, 9, 4}},
32823 {m68k_op_move_16_frc_ix, 0xfff8, 0x42f0, {255, 18, 11, 11, 11, 11, 4}},
32824 {m68k_op_neg_8_d, 0xfff8, 0x4400, { 4, 4, 2, 2, 2, 2, 2}},
32825 {m68k_op_neg_8_ai, 0xfff8, 0x4410, { 12, 12, 8, 8, 8, 8, 4}},
32826 {m68k_op_neg_8_pi, 0xfff8, 0x4418, { 12, 12, 8, 8, 8, 8, 4}},
32827 {m68k_op_neg_8_pd, 0xfff8, 0x4420, { 14, 14, 9, 9, 9, 9, 4}},
32828 {m68k_op_neg_8_di, 0xfff8, 0x4428, { 16, 16, 9, 9, 9, 9, 4}},
32829 {m68k_op_neg_8_ix, 0xfff8, 0x4430, { 18, 18, 11, 11, 11, 11, 4}},
32830 {m68k_op_neg_16_d, 0xfff8, 0x4440, { 4, 4, 2, 2, 2, 2, 2}},
32831 {m68k_op_neg_16_ai, 0xfff8, 0x4450, { 12, 12, 8, 8, 8, 8, 4}},
32832 {m68k_op_neg_16_pi, 0xfff8, 0x4458, { 12, 12, 8, 8, 8, 8, 4}},
32833 {m68k_op_neg_16_pd, 0xfff8, 0x4460, { 14, 14, 9, 9, 9, 9, 4}},
32834 {m68k_op_neg_16_di, 0xfff8, 0x4468, { 16, 16, 9, 9, 9, 9, 4}},
32835 {m68k_op_neg_16_ix, 0xfff8, 0x4470, { 18, 18, 11, 11, 11, 11, 4}},
32836 {m68k_op_neg_32_d, 0xfff8, 0x4480, { 6, 6, 2, 2, 2, 2, 2}},
32837 {m68k_op_neg_32_ai, 0xfff8, 0x4490, { 20, 20, 8, 8, 8, 8, 4}},
32838 {m68k_op_neg_32_pi, 0xfff8, 0x4498, { 20, 20, 8, 8, 8, 8, 4}},
32839 {m68k_op_neg_32_pd, 0xfff8, 0x44a0, { 22, 22, 9, 9, 9, 9, 4}},
32840 {m68k_op_neg_32_di, 0xfff8, 0x44a8, { 24, 24, 9, 9, 9, 9, 4}},
32841 {m68k_op_neg_32_ix, 0xfff8, 0x44b0, { 26, 26, 11, 11, 11, 11, 4}},
32842 {m68k_op_move_16_toc_d, 0xfff8, 0x44c0, { 12, 12, 4, 4, 4, 4, 4}},
32843 {m68k_op_move_16_toc_ai, 0xfff8, 0x44d0, { 16, 16, 8, 8, 8, 8, 4}},
32844 {m68k_op_move_16_toc_pi, 0xfff8, 0x44d8, { 16, 16, 8, 8, 8, 8, 4}},
32845 {m68k_op_move_16_toc_pd, 0xfff8, 0x44e0, { 18, 18, 9, 9, 9, 9, 4}},
32846 {m68k_op_move_16_toc_di, 0xfff8, 0x44e8, { 20, 20, 9, 9, 9, 9, 4}},
32847 {m68k_op_move_16_toc_ix, 0xfff8, 0x44f0, { 22, 22, 11, 11, 11, 11, 4}},
32848 {m68k_op_not_8_d, 0xfff8, 0x4600, { 4, 4, 2, 2, 2, 2, 2}},
32849 {m68k_op_not_8_ai, 0xfff8, 0x4610, { 12, 12, 8, 8, 8, 8, 4}},
32850 {m68k_op_not_8_pi, 0xfff8, 0x4618, { 12, 12, 8, 8, 8, 8, 4}},
32851 {m68k_op_not_8_pd, 0xfff8, 0x4620, { 14, 14, 9, 9, 9, 9, 4}},
32852 {m68k_op_not_8_di, 0xfff8, 0x4628, { 16, 16, 9, 9, 9, 9, 4}},
32853 {m68k_op_not_8_ix, 0xfff8, 0x4630, { 18, 18, 11, 11, 11, 11, 4}},
32854 {m68k_op_not_16_d, 0xfff8, 0x4640, { 4, 4, 2, 2, 2, 2, 2}},
32855 {m68k_op_not_16_ai, 0xfff8, 0x4650, { 12, 12, 8, 8, 8, 8, 4}},
32856 {m68k_op_not_16_pi, 0xfff8, 0x4658, { 12, 12, 8, 8, 8, 8, 4}},
32857 {m68k_op_not_16_pd, 0xfff8, 0x4660, { 14, 14, 9, 9, 9, 9, 4}},
32858 {m68k_op_not_16_di, 0xfff8, 0x4668, { 16, 16, 9, 9, 9, 9, 4}},
32859 {m68k_op_not_16_ix, 0xfff8, 0x4670, { 18, 18, 11, 11, 11, 11, 4}},
32860 {m68k_op_not_32_d, 0xfff8, 0x4680, { 6, 6, 2, 2, 2, 2, 2}},
32861 {m68k_op_not_32_ai, 0xfff8, 0x4690, { 20, 20, 8, 8, 8, 8, 4}},
32862 {m68k_op_not_32_pi, 0xfff8, 0x4698, { 20, 20, 8, 8, 8, 8, 4}},
32863 {m68k_op_not_32_pd, 0xfff8, 0x46a0, { 22, 22, 9, 9, 9, 9, 4}},
32864 {m68k_op_not_32_di, 0xfff8, 0x46a8, { 24, 24, 9, 9, 9, 9, 4}},
32865 {m68k_op_not_32_ix, 0xfff8, 0x46b0, { 26, 26, 11, 11, 11, 11, 4}},
32866 {m68k_op_move_16_tos_d, 0xfff8, 0x46c0, { 12, 12, 8, 8, 8, 8, 8}},
32867 {m68k_op_move_16_tos_ai, 0xfff8, 0x46d0, { 16, 16, 12, 12, 12, 12, 8}},
32868 {m68k_op_move_16_tos_pi, 0xfff8, 0x46d8, { 16, 16, 12, 12, 12, 12, 8}},
32869 {m68k_op_move_16_tos_pd, 0xfff8, 0x46e0, { 18, 18, 13, 13, 13, 13, 8}},
32870 {m68k_op_move_16_tos_di, 0xfff8, 0x46e8, { 20, 20, 13, 13, 13, 13, 8}},
32871 {m68k_op_move_16_tos_ix, 0xfff8, 0x46f0, { 22, 22, 15, 15, 15, 15, 8}},
32872 {m68k_op_nbcd_8_d, 0xfff8, 0x4800, { 6, 6, 6, 6, 6, 6, 6}},
32873 {m68k_op_link_32, 0xfff8, 0x4808, {255, 255, 6, 6, 6, 6, 6}},
32874 {m68k_op_nbcd_8_ai, 0xfff8, 0x4810, { 12, 12, 10, 10, 10, 10, 6}},
32875 {m68k_op_nbcd_8_pi, 0xfff8, 0x4818, { 12, 12, 10, 10, 10, 10, 6}},
32876 {m68k_op_nbcd_8_pd, 0xfff8, 0x4820, { 14, 14, 11, 11, 11, 11, 6}},
32877 {m68k_op_nbcd_8_di, 0xfff8, 0x4828, { 16, 16, 11, 11, 11, 11, 6}},
32878 {m68k_op_nbcd_8_ix, 0xfff8, 0x4830, { 18, 18, 13, 13, 13, 13, 6}},
32879 {m68k_op_swap_32, 0xfff8, 0x4840, { 4, 4, 4, 4, 4, 4, 4}},
32880 {m68k_op_bkpt, 0xfff8, 0x4848, {255, 10, 10, 10, 10, 10, 10}},
32881 {m68k_op_pea_32_ai, 0xfff8, 0x4850, { 12, 12, 9, 9, 9, 9, 5}},
32882 {m68k_op_pea_32_di, 0xfff8, 0x4868, { 16, 16, 10, 10, 10, 10, 5}},
32883 {m68k_op_pea_32_ix, 0xfff8, 0x4870, { 20, 20, 12, 12, 12, 12, 5}},
32884 {m68k_op_ext_16, 0xfff8, 0x4880, { 4, 4, 4, 4, 4, 4, 4}},
32885 {m68k_op_movem_16_re_ai, 0xfff8, 0x4890, { 8, 8, 8, 8, 8, 8, 4}},
32886 {m68k_op_movem_16_re_pd, 0xfff8, 0x48a0, { 8, 8, 4, 4, 4, 4, 4}},
32887 {m68k_op_movem_16_re_di, 0xfff8, 0x48a8, { 12, 12, 9, 9, 9, 9, 4}},
32888 {m68k_op_movem_16_re_ix, 0xfff8, 0x48b0, { 14, 14, 11, 11, 11, 11, 4}},
32889 {m68k_op_ext_32, 0xfff8, 0x48c0, { 4, 4, 4, 4, 4, 4, 4}},
32890 {m68k_op_movem_32_re_ai, 0xfff8, 0x48d0, { 8, 8, 8, 8, 8, 8, 4}},
32891 {m68k_op_movem_32_re_pd, 0xfff8, 0x48e0, { 8, 8, 4, 4, 4, 4, 4}},
32892 {m68k_op_movem_32_re_di, 0xfff8, 0x48e8, { 12, 12, 9, 9, 9, 9, 4}},
32893 {m68k_op_movem_32_re_ix, 0xfff8, 0x48f0, { 14, 14, 11, 11, 11, 11, 4}},
32894 {m68k_op_extb_32, 0xfff8, 0x49c0, {255, 255, 4, 4, 4, 4, 4}},
32895 {m68k_op_tst_8_d, 0xfff8, 0x4a00, { 4, 4, 2, 2, 2, 2, 2}},
32896 {m68k_op_tst_8_ai, 0xfff8, 0x4a10, { 8, 8, 6, 6, 6, 6, 2}},
32897 {m68k_op_tst_8_pi, 0xfff8, 0x4a18, { 8, 8, 6, 6, 6, 6, 2}},
32898 {m68k_op_tst_8_pd, 0xfff8, 0x4a20, { 10, 10, 7, 7, 7, 7, 2}},
32899 {m68k_op_tst_8_di, 0xfff8, 0x4a28, { 12, 12, 7, 7, 7, 7, 2}},
32900 {m68k_op_tst_8_ix, 0xfff8, 0x4a30, { 14, 14, 9, 9, 9, 9, 2}},
32901 {m68k_op_tst_16_d, 0xfff8, 0x4a40, { 4, 4, 2, 2, 2, 2, 2}},
32902 {m68k_op_tst_16_a, 0xfff8, 0x4a48, {255, 255, 2, 2, 2, 2, 2}},
32903 {m68k_op_tst_16_ai, 0xfff8, 0x4a50, { 8, 8, 6, 6, 6, 6, 2}},
32904 {m68k_op_tst_16_pi, 0xfff8, 0x4a58, { 8, 8, 6, 6, 6, 6, 2}},
32905 {m68k_op_tst_16_pd, 0xfff8, 0x4a60, { 10, 10, 7, 7, 7, 7, 2}},
32906 {m68k_op_tst_16_di, 0xfff8, 0x4a68, { 12, 12, 7, 7, 7, 7, 2}},
32907 {m68k_op_tst_16_ix, 0xfff8, 0x4a70, { 14, 14, 9, 9, 9, 9, 2}},
32908 {m68k_op_tst_32_d, 0xfff8, 0x4a80, { 4, 4, 2, 2, 2, 2, 2}},
32909 {m68k_op_tst_32_a, 0xfff8, 0x4a88, {255, 255, 2, 2, 2, 2, 2}},
32910 {m68k_op_tst_32_ai, 0xfff8, 0x4a90, { 12, 12, 6, 6, 6, 6, 2}},
32911 {m68k_op_tst_32_pi, 0xfff8, 0x4a98, { 12, 12, 6, 6, 6, 6, 2}},
32912 {m68k_op_tst_32_pd, 0xfff8, 0x4aa0, { 14, 14, 7, 7, 7, 7, 2}},
32913 {m68k_op_tst_32_di, 0xfff8, 0x4aa8, { 16, 16, 7, 7, 7, 7, 2}},
32914 {m68k_op_tst_32_ix, 0xfff8, 0x4ab0, { 18, 18, 9, 9, 9, 9, 2}},
32915 {m68k_op_tas_8_d, 0xfff8, 0x4ac0, { 4, 4, 4, 4, 4, 4, 4}},
32916 {m68k_op_tas_8_ai, 0xfff8, 0x4ad0, { 18, 18, 16, 16, 16, 16, 12}},
32917 {m68k_op_tas_8_pi, 0xfff8, 0x4ad8, { 18, 18, 16, 16, 16, 16, 12}},
32918 {m68k_op_tas_8_pd, 0xfff8, 0x4ae0, { 20, 20, 17, 17, 17, 17, 12}},
32919 {m68k_op_tas_8_di, 0xfff8, 0x4ae8, { 22, 22, 17, 17, 17, 17, 12}},
32920 {m68k_op_tas_8_ix, 0xfff8, 0x4af0, { 24, 24, 19, 19, 19, 19, 12}},
32921 {m68k_op_mull_32_d, 0xfff8, 0x4c00, {255, 255, 43, 43, 43, 43, 43}},
32922 {m68k_op_mull_32_ai, 0xfff8, 0x4c10, {255, 255, 47, 47, 47, 47, 43}},
32923 {m68k_op_mull_32_pi, 0xfff8, 0x4c18, {255, 255, 47, 47, 47, 47, 43}},
32924 {m68k_op_mull_32_pd, 0xfff8, 0x4c20, {255, 255, 48, 48, 48, 48, 43}},
32925 {m68k_op_mull_32_di, 0xfff8, 0x4c28, {255, 255, 48, 48, 48, 48, 43}},
32926 {m68k_op_mull_32_ix, 0xfff8, 0x4c30, {255, 255, 50, 50, 50, 50, 43}},
32927 {m68k_op_divl_32_d, 0xfff8, 0x4c40, {255, 255, 84, 84, 84, 84, 84}},
32928 {m68k_op_divl_32_ai, 0xfff8, 0x4c50, {255, 255, 88, 88, 88, 88, 84}},
32929 {m68k_op_divl_32_pi, 0xfff8, 0x4c58, {255, 255, 88, 88, 88, 88, 84}},
32930 {m68k_op_divl_32_pd, 0xfff8, 0x4c60, {255, 255, 89, 89, 89, 89, 84}},
32931 {m68k_op_divl_32_di, 0xfff8, 0x4c68, {255, 255, 89, 89, 89, 89, 84}},
32932 {m68k_op_divl_32_ix, 0xfff8, 0x4c70, {255, 255, 91, 91, 91, 91, 84}},
32933 {m68k_op_movem_16_er_ai, 0xfff8, 0x4c90, { 12, 12, 12, 12, 12, 12, 8}},
32934 {m68k_op_movem_16_er_pi, 0xfff8, 0x4c98, { 12, 12, 8, 8, 8, 8, 8}},
32935 {m68k_op_movem_16_er_di, 0xfff8, 0x4ca8, { 16, 16, 13, 13, 13, 13, 8}},
32936 {m68k_op_movem_16_er_ix, 0xfff8, 0x4cb0, { 18, 18, 15, 15, 15, 15, 8}},
32937 {m68k_op_movem_32_er_ai, 0xfff8, 0x4cd0, { 12, 12, 12, 12, 12, 12, 8}},
32938 {m68k_op_movem_32_er_pi, 0xfff8, 0x4cd8, { 12, 12, 8, 8, 8, 8, 8}},
32939 {m68k_op_movem_32_er_di, 0xfff8, 0x4ce8, { 16, 16, 13, 13, 13, 13, 8}},
32940 {m68k_op_movem_32_er_ix, 0xfff8, 0x4cf0, { 18, 18, 15, 15, 15, 15, 8}},
32941 {m68k_op_link_16, 0xfff8, 0x4e50, { 16, 16, 5, 5, 5, 5, 5}},
32942 {m68k_op_unlk_32, 0xfff8, 0x4e58, { 12, 12, 6, 6, 6, 6, 6}},
32943 {m68k_op_move_32_tou, 0xfff8, 0x4e60, { 4, 6, 2, 2, 2, 2, 2}},
32944 {m68k_op_move_32_fru, 0xfff8, 0x4e68, { 4, 6, 2, 2, 2, 2, 2}},
32945 {m68k_op_jsr_32_ai, 0xfff8, 0x4e90, { 16, 16, 4, 4, 4, 4, 0}},
32946 {m68k_op_jsr_32_di, 0xfff8, 0x4ea8, { 18, 18, 5, 5, 5, 5, 0}},
32947 {m68k_op_jsr_32_ix, 0xfff8, 0x4eb0, { 22, 22, 7, 7, 7, 7, 0}},
32948 {m68k_op_jmp_32_ai, 0xfff8, 0x4ed0, { 8, 8, 4, 4, 4, 4, 0}},
32949 {m68k_op_jmp_32_di, 0xfff8, 0x4ee8, { 10, 10, 5, 5, 5, 5, 0}},
32950 {m68k_op_jmp_32_ix, 0xfff8, 0x4ef0, { 14, 14, 7, 7, 7, 7, 0}},
32951 {m68k_op_st_8_d, 0xfff8, 0x50c0, { 6, 4, 4, 4, 4, 4, 4}},
32952 {m68k_op_dbt_16, 0xfff8, 0x50c8, { 12, 12, 6, 6, 6, 6, 6}},
32953 {m68k_op_st_8_ai, 0xfff8, 0x50d0, { 12, 12, 10, 10, 10, 10, 6}},
32954 {m68k_op_st_8_pi, 0xfff8, 0x50d8, { 12, 12, 10, 10, 10, 10, 6}},
32955 {m68k_op_st_8_pd, 0xfff8, 0x50e0, { 14, 14, 11, 11, 11, 11, 6}},
32956 {m68k_op_st_8_di, 0xfff8, 0x50e8, { 16, 16, 11, 11, 11, 11, 6}},
32957 {m68k_op_st_8_ix, 0xfff8, 0x50f0, { 18, 18, 13, 13, 13, 13, 6}},
32958 {m68k_op_sf_8_d, 0xfff8, 0x51c0, { 4, 4, 4, 4, 4, 4, 4}},
32959 {m68k_op_dbf_16, 0xfff8, 0x51c8, { 12, 12, 6, 4, 4, 4, 4}},
32960 {m68k_op_sf_8_ai, 0xfff8, 0x51d0, { 12, 12, 10, 10, 10, 10, 6}},
32961 {m68k_op_sf_8_pi, 0xfff8, 0x51d8, { 12, 12, 10, 10, 10, 10, 6}},
32962 {m68k_op_sf_8_pd, 0xfff8, 0x51e0, { 14, 14, 11, 11, 11, 11, 6}},
32963 {m68k_op_sf_8_di, 0xfff8, 0x51e8, { 16, 16, 11, 11, 11, 11, 6}},
32964 {m68k_op_sf_8_ix, 0xfff8, 0x51f0, { 18, 18, 13, 13, 13, 13, 6}},
32965 {m68k_op_shi_8_d, 0xfff8, 0x52c0, { 4, 4, 4, 4, 4, 4, 4}},
32966 {m68k_op_dbhi_16, 0xfff8, 0x52c8, { 12, 12, 6, 6, 6, 6, 6}},
32967 {m68k_op_shi_8_ai, 0xfff8, 0x52d0, { 12, 12, 10, 10, 10, 10, 6}},
32968 {m68k_op_shi_8_pi, 0xfff8, 0x52d8, { 12, 12, 10, 10, 10, 10, 6}},
32969 {m68k_op_shi_8_pd, 0xfff8, 0x52e0, { 14, 14, 11, 11, 11, 11, 6}},
32970 {m68k_op_shi_8_di, 0xfff8, 0x52e8, { 16, 16, 11, 11, 11, 11, 6}},
32971 {m68k_op_shi_8_ix, 0xfff8, 0x52f0, { 18, 18, 13, 13, 13, 13, 6}},
32972 {m68k_op_sls_8_d, 0xfff8, 0x53c0, { 4, 4, 4, 4, 4, 4, 4}},
32973 {m68k_op_dbls_16, 0xfff8, 0x53c8, { 12, 12, 6, 6, 6, 6, 6}},
32974 {m68k_op_sls_8_ai, 0xfff8, 0x53d0, { 12, 12, 10, 10, 10, 10, 6}},
32975 {m68k_op_sls_8_pi, 0xfff8, 0x53d8, { 12, 12, 10, 10, 10, 10, 6}},
32976 {m68k_op_sls_8_pd, 0xfff8, 0x53e0, { 14, 14, 11, 11, 11, 11, 6}},
32977 {m68k_op_sls_8_di, 0xfff8, 0x53e8, { 16, 16, 11, 11, 11, 11, 6}},
32978 {m68k_op_sls_8_ix, 0xfff8, 0x53f0, { 18, 18, 13, 13, 13, 13, 6}},
32979 {m68k_op_scc_8_d, 0xfff8, 0x54c0, { 4, 4, 4, 4, 4, 4, 4}},
32980 {m68k_op_dbcc_16, 0xfff8, 0x54c8, { 12, 12, 6, 6, 6, 6, 6}},
32981 {m68k_op_scc_8_ai, 0xfff8, 0x54d0, { 12, 12, 10, 10, 10, 10, 6}},
32982 {m68k_op_scc_8_pi, 0xfff8, 0x54d8, { 12, 12, 10, 10, 10, 10, 6}},
32983 {m68k_op_scc_8_pd, 0xfff8, 0x54e0, { 14, 14, 11, 11, 11, 11, 6}},
32984 {m68k_op_scc_8_di, 0xfff8, 0x54e8, { 16, 16, 11, 11, 11, 11, 6}},
32985 {m68k_op_scc_8_ix, 0xfff8, 0x54f0, { 18, 18, 13, 13, 13, 13, 6}},
32986 {m68k_op_scs_8_d, 0xfff8, 0x55c0, { 4, 4, 4, 4, 4, 4, 4}},
32987 {m68k_op_dbcs_16, 0xfff8, 0x55c8, { 12, 12, 6, 6, 6, 6, 6}},
32988 {m68k_op_scs_8_ai, 0xfff8, 0x55d0, { 12, 12, 10, 10, 10, 10, 6}},
32989 {m68k_op_scs_8_pi, 0xfff8, 0x55d8, { 12, 12, 10, 10, 10, 10, 6}},
32990 {m68k_op_scs_8_pd, 0xfff8, 0x55e0, { 14, 14, 11, 11, 11, 11, 6}},
32991 {m68k_op_scs_8_di, 0xfff8, 0x55e8, { 16, 16, 11, 11, 11, 11, 6}},
32992 {m68k_op_scs_8_ix, 0xfff8, 0x55f0, { 18, 18, 13, 13, 13, 13, 6}},
32993 {m68k_op_sne_8_d, 0xfff8, 0x56c0, { 4, 4, 4, 4, 4, 4, 4}},
32994 {m68k_op_dbne_16, 0xfff8, 0x56c8, { 12, 12, 6, 6, 6, 6, 6}},
32995 {m68k_op_sne_8_ai, 0xfff8, 0x56d0, { 12, 12, 10, 10, 10, 10, 6}},
32996 {m68k_op_sne_8_pi, 0xfff8, 0x56d8, { 12, 12, 10, 10, 10, 10, 6}},
32997 {m68k_op_sne_8_pd, 0xfff8, 0x56e0, { 14, 14, 11, 11, 11, 11, 6}},
32998 {m68k_op_sne_8_di, 0xfff8, 0x56e8, { 16, 16, 11, 11, 11, 11, 6}},
32999 {m68k_op_sne_8_ix, 0xfff8, 0x56f0, { 18, 18, 13, 13, 13, 13, 6}},
33000 {m68k_op_seq_8_d, 0xfff8, 0x57c0, { 4, 4, 4, 4, 4, 4, 4}},
33001 {m68k_op_dbeq_16, 0xfff8, 0x57c8, { 12, 12, 6, 6, 6, 6, 6}},
33002 {m68k_op_seq_8_ai, 0xfff8, 0x57d0, { 12, 12, 10, 10, 10, 10, 6}},
33003 {m68k_op_seq_8_pi, 0xfff8, 0x57d8, { 12, 12, 10, 10, 10, 10, 6}},
33004 {m68k_op_seq_8_pd, 0xfff8, 0x57e0, { 14, 14, 11, 11, 11, 11, 6}},
33005 {m68k_op_seq_8_di, 0xfff8, 0x57e8, { 16, 16, 11, 11, 11, 11, 6}},
33006 {m68k_op_seq_8_ix, 0xfff8, 0x57f0, { 18, 18, 13, 13, 13, 13, 6}},
33007 {m68k_op_svc_8_d, 0xfff8, 0x58c0, { 4, 4, 4, 4, 4, 4, 4}},
33008 {m68k_op_dbvc_16, 0xfff8, 0x58c8, { 12, 12, 6, 6, 6, 6, 6}},
33009 {m68k_op_svc_8_ai, 0xfff8, 0x58d0, { 12, 12, 10, 10, 10, 10, 6}},
33010 {m68k_op_svc_8_pi, 0xfff8, 0x58d8, { 12, 12, 10, 10, 10, 10, 6}},
33011 {m68k_op_svc_8_pd, 0xfff8, 0x58e0, { 14, 14, 11, 11, 11, 11, 6}},
33012 {m68k_op_svc_8_di, 0xfff8, 0x58e8, { 16, 16, 11, 11, 11, 11, 6}},
33013 {m68k_op_svc_8_ix, 0xfff8, 0x58f0, { 18, 18, 13, 13, 13, 13, 6}},
33014 {m68k_op_svs_8_d, 0xfff8, 0x59c0, { 4, 4, 4, 4, 4, 4, 4}},
33015 {m68k_op_dbvs_16, 0xfff8, 0x59c8, { 12, 12, 6, 6, 6, 6, 6}},
33016 {m68k_op_svs_8_ai, 0xfff8, 0x59d0, { 12, 12, 10, 10, 10, 10, 6}},
33017 {m68k_op_svs_8_pi, 0xfff8, 0x59d8, { 12, 12, 10, 10, 10, 10, 6}},
33018 {m68k_op_svs_8_pd, 0xfff8, 0x59e0, { 14, 14, 11, 11, 11, 11, 6}},
33019 {m68k_op_svs_8_di, 0xfff8, 0x59e8, { 16, 16, 11, 11, 11, 11, 6}},
33020 {m68k_op_svs_8_ix, 0xfff8, 0x59f0, { 18, 18, 13, 13, 13, 13, 6}},
33021 {m68k_op_spl_8_d, 0xfff8, 0x5ac0, { 4, 4, 4, 4, 4, 4, 4}},
33022 {m68k_op_dbpl_16, 0xfff8, 0x5ac8, { 12, 12, 6, 6, 6, 6, 6}},
33023 {m68k_op_spl_8_ai, 0xfff8, 0x5ad0, { 12, 12, 10, 10, 10, 10, 6}},
33024 {m68k_op_spl_8_pi, 0xfff8, 0x5ad8, { 12, 12, 10, 10, 10, 10, 6}},
33025 {m68k_op_spl_8_pd, 0xfff8, 0x5ae0, { 14, 14, 11, 11, 11, 11, 6}},
33026 {m68k_op_spl_8_di, 0xfff8, 0x5ae8, { 16, 16, 11, 11, 11, 11, 6}},
33027 {m68k_op_spl_8_ix, 0xfff8, 0x5af0, { 18, 18, 13, 13, 13, 13, 6}},
33028 {m68k_op_smi_8_d, 0xfff8, 0x5bc0, { 4, 4, 4, 4, 4, 4, 4}},
33029 {m68k_op_dbmi_16, 0xfff8, 0x5bc8, { 12, 12, 6, 6, 6, 6, 6}},
33030 {m68k_op_smi_8_ai, 0xfff8, 0x5bd0, { 12, 12, 10, 10, 10, 10, 6}},
33031 {m68k_op_smi_8_pi, 0xfff8, 0x5bd8, { 12, 12, 10, 10, 10, 10, 6}},
33032 {m68k_op_smi_8_pd, 0xfff8, 0x5be0, { 14, 14, 11, 11, 11, 11, 6}},
33033 {m68k_op_smi_8_di, 0xfff8, 0x5be8, { 16, 16, 11, 11, 11, 11, 6}},
33034 {m68k_op_smi_8_ix, 0xfff8, 0x5bf0, { 18, 18, 13, 13, 13, 13, 6}},
33035 {m68k_op_sge_8_d, 0xfff8, 0x5cc0, { 4, 4, 4, 4, 4, 4, 4}},
33036 {m68k_op_dbge_16, 0xfff8, 0x5cc8, { 12, 12, 6, 6, 6, 6, 6}},
33037 {m68k_op_sge_8_ai, 0xfff8, 0x5cd0, { 12, 12, 10, 10, 10, 10, 6}},
33038 {m68k_op_sge_8_pi, 0xfff8, 0x5cd8, { 12, 12, 10, 10, 10, 10, 6}},
33039 {m68k_op_sge_8_pd, 0xfff8, 0x5ce0, { 14, 14, 11, 11, 11, 11, 6}},
33040 {m68k_op_sge_8_di, 0xfff8, 0x5ce8, { 16, 16, 11, 11, 11, 11, 6}},
33041 {m68k_op_sge_8_ix, 0xfff8, 0x5cf0, { 18, 18, 13, 13, 13, 13, 6}},
33042 {m68k_op_slt_8_d, 0xfff8, 0x5dc0, { 4, 4, 4, 4, 4, 4, 4}},
33043 {m68k_op_dblt_16, 0xfff8, 0x5dc8, { 12, 12, 6, 6, 6, 6, 6}},
33044 {m68k_op_slt_8_ai, 0xfff8, 0x5dd0, { 12, 12, 10, 10, 10, 10, 6}},
33045 {m68k_op_slt_8_pi, 0xfff8, 0x5dd8, { 12, 12, 10, 10, 10, 10, 6}},
33046 {m68k_op_slt_8_pd, 0xfff8, 0x5de0, { 14, 14, 11, 11, 11, 11, 6}},
33047 {m68k_op_slt_8_di, 0xfff8, 0x5de8, { 16, 16, 11, 11, 11, 11, 6}},
33048 {m68k_op_slt_8_ix, 0xfff8, 0x5df0, { 18, 18, 13, 13, 13, 13, 6}},
33049 {m68k_op_sgt_8_d, 0xfff8, 0x5ec0, { 4, 4, 4, 4, 4, 4, 4}},
33050 {m68k_op_dbgt_16, 0xfff8, 0x5ec8, { 12, 12, 6, 6, 6, 6, 6}},
33051 {m68k_op_sgt_8_ai, 0xfff8, 0x5ed0, { 12, 12, 10, 10, 10, 10, 6}},
33052 {m68k_op_sgt_8_pi, 0xfff8, 0x5ed8, { 12, 12, 10, 10, 10, 10, 6}},
33053 {m68k_op_sgt_8_pd, 0xfff8, 0x5ee0, { 14, 14, 11, 11, 11, 11, 6}},
33054 {m68k_op_sgt_8_di, 0xfff8, 0x5ee8, { 16, 16, 11, 11, 11, 11, 6}},
33055 {m68k_op_sgt_8_ix, 0xfff8, 0x5ef0, { 18, 18, 13, 13, 13, 13, 6}},
33056 {m68k_op_sle_8_d, 0xfff8, 0x5fc0, { 4, 4, 4, 4, 4, 4, 4}},
33057 {m68k_op_dble_16, 0xfff8, 0x5fc8, { 12, 12, 6, 6, 6, 6, 6}},
33058 {m68k_op_sle_8_ai, 0xfff8, 0x5fd0, { 12, 12, 10, 10, 10, 10, 6}},
33059 {m68k_op_sle_8_pi, 0xfff8, 0x5fd8, { 12, 12, 10, 10, 10, 10, 6}},
33060 {m68k_op_sle_8_pd, 0xfff8, 0x5fe0, { 14, 14, 11, 11, 11, 11, 6}},
33061 {m68k_op_sle_8_di, 0xfff8, 0x5fe8, { 16, 16, 11, 11, 11, 11, 6}},
33062 {m68k_op_sle_8_ix, 0xfff8, 0x5ff0, { 18, 18, 13, 13, 13, 13, 6}},
33063 {m68k_op_sbcd_8_mm_ax7, 0xfff8, 0x8f08, { 18, 18, 16, 16, 16, 16, 16}},
33064 {m68k_op_pack_16_mm_ax7, 0xfff8, 0x8f48, {255, 255, 13, 13, 13, 13, 13}},
33065 {m68k_op_unpk_16_mm_ax7, 0xfff8, 0x8f88, {255, 255, 13, 13, 13, 13, 13}},
33066 {m68k_op_subx_8_mm_ax7, 0xfff8, 0x9f08, { 18, 18, 12, 12, 12, 12, 12}},
33067 {m68k_op_cmpm_8_ax7, 0xfff8, 0xbf08, { 12, 12, 9, 9, 9, 9, 9}},
33068 {m68k_op_abcd_8_mm_ax7, 0xfff8, 0xcf08, { 18, 18, 16, 16, 16, 16, 16}},
33069 {m68k_op_addx_8_mm_ax7, 0xfff8, 0xdf08, { 18, 18, 12, 12, 12, 12, 12}},
33070 {m68k_op_asr_16_ai, 0xfff8, 0xe0d0, { 12, 12, 9, 9, 9, 9, 5}},
33071 {m68k_op_asr_16_pi, 0xfff8, 0xe0d8, { 12, 12, 9, 9, 9, 9, 5}},
33072 {m68k_op_asr_16_pd, 0xfff8, 0xe0e0, { 14, 14, 10, 10, 10, 10, 5}},
33073 {m68k_op_asr_16_di, 0xfff8, 0xe0e8, { 16, 16, 10, 10, 10, 10, 5}},
33074 {m68k_op_asr_16_ix, 0xfff8, 0xe0f0, { 18, 18, 12, 12, 12, 12, 5}},
33075 {m68k_op_asl_16_ai, 0xfff8, 0xe1d0, { 12, 12, 10, 10, 10, 10, 6}},
33076 {m68k_op_asl_16_pi, 0xfff8, 0xe1d8, { 12, 12, 10, 10, 10, 10, 6}},
33077 {m68k_op_asl_16_pd, 0xfff8, 0xe1e0, { 14, 14, 11, 11, 11, 11, 6}},
33078 {m68k_op_asl_16_di, 0xfff8, 0xe1e8, { 16, 16, 11, 11, 11, 11, 6}},
33079 {m68k_op_asl_16_ix, 0xfff8, 0xe1f0, { 18, 18, 13, 13, 13, 13, 6}},
33080 {m68k_op_lsr_16_ai, 0xfff8, 0xe2d0, { 12, 12, 9, 9, 9, 9, 5}},
33081 {m68k_op_lsr_16_pi, 0xfff8, 0xe2d8, { 12, 12, 9, 9, 9, 9, 5}},
33082 {m68k_op_lsr_16_pd, 0xfff8, 0xe2e0, { 14, 14, 10, 10, 10, 10, 5}},
33083 {m68k_op_lsr_16_di, 0xfff8, 0xe2e8, { 16, 16, 10, 10, 10, 10, 5}},
33084 {m68k_op_lsr_16_ix, 0xfff8, 0xe2f0, { 18, 18, 12, 12, 12, 12, 5}},
33085 {m68k_op_lsl_16_ai, 0xfff8, 0xe3d0, { 12, 12, 9, 9, 9, 9, 5}},
33086 {m68k_op_lsl_16_pi, 0xfff8, 0xe3d8, { 12, 12, 9, 9, 9, 9, 5}},
33087 {m68k_op_lsl_16_pd, 0xfff8, 0xe3e0, { 14, 14, 10, 10, 10, 10, 5}},
33088 {m68k_op_lsl_16_di, 0xfff8, 0xe3e8, { 16, 16, 10, 10, 10, 10, 5}},
33089 {m68k_op_lsl_16_ix, 0xfff8, 0xe3f0, { 18, 18, 12, 12, 12, 12, 5}},
33090 {m68k_op_roxr_16_ai, 0xfff8, 0xe4d0, { 12, 12, 9, 9, 9, 9, 5}},
33091 {m68k_op_roxr_16_pi, 0xfff8, 0xe4d8, { 12, 12, 9, 9, 9, 9, 5}},
33092 {m68k_op_roxr_16_pd, 0xfff8, 0xe4e0, { 14, 14, 10, 10, 10, 10, 5}},
33093 {m68k_op_roxr_16_di, 0xfff8, 0xe4e8, { 16, 16, 10, 10, 10, 10, 5}},
33094 {m68k_op_roxr_16_ix, 0xfff8, 0xe4f0, { 18, 18, 12, 12, 12, 12, 5}},
33095 {m68k_op_roxl_16_ai, 0xfff8, 0xe5d0, { 12, 12, 9, 9, 9, 9, 5}},
33096 {m68k_op_roxl_16_pi, 0xfff8, 0xe5d8, { 12, 12, 9, 9, 9, 9, 5}},
33097 {m68k_op_roxl_16_pd, 0xfff8, 0xe5e0, { 14, 14, 10, 10, 10, 10, 5}},
33098 {m68k_op_roxl_16_di, 0xfff8, 0xe5e8, { 16, 16, 10, 10, 10, 10, 5}},
33099 {m68k_op_roxl_16_ix, 0xfff8, 0xe5f0, { 18, 18, 12, 12, 12, 12, 5}},
33100 {m68k_op_ror_16_ai, 0xfff8, 0xe6d0, { 12, 12, 11, 11, 11, 11, 7}},
33101 {m68k_op_ror_16_pi, 0xfff8, 0xe6d8, { 12, 12, 11, 11, 11, 11, 7}},
33102 {m68k_op_ror_16_pd, 0xfff8, 0xe6e0, { 14, 14, 12, 12, 12, 12, 7}},
33103 {m68k_op_ror_16_di, 0xfff8, 0xe6e8, { 16, 16, 12, 12, 12, 12, 7}},
33104 {m68k_op_ror_16_ix, 0xfff8, 0xe6f0, { 18, 18, 14, 14, 14, 14, 7}},
33105 {m68k_op_rol_16_ai, 0xfff8, 0xe7d0, { 12, 12, 11, 11, 11, 11, 7}},
33106 {m68k_op_rol_16_pi, 0xfff8, 0xe7d8, { 12, 12, 11, 11, 11, 11, 7}},
33107 {m68k_op_rol_16_pd, 0xfff8, 0xe7e0, { 14, 14, 12, 12, 12, 12, 7}},
33108 {m68k_op_rol_16_di, 0xfff8, 0xe7e8, { 16, 16, 12, 12, 12, 12, 7}},
33109 {m68k_op_rol_16_ix, 0xfff8, 0xe7f0, { 18, 18, 14, 14, 14, 14, 7}},
33110 {m68k_op_bftst_32_d, 0xfff8, 0xe8c0, {255, 255, 6, 6, 6, 6, 6}},
33111 {m68k_op_bftst_32_ai, 0xfff8, 0xe8d0, {255, 255, 17, 17, 17, 17, 13}},
33112 {m68k_op_bftst_32_di, 0xfff8, 0xe8e8, {255, 255, 18, 18, 18, 18, 13}},
33113 {m68k_op_bftst_32_ix, 0xfff8, 0xe8f0, {255, 255, 20, 20, 20, 20, 13}},
33114 {m68k_op_bfextu_32_d, 0xfff8, 0xe9c0, {255, 255, 8, 8, 8, 8, 8}},
33115 {m68k_op_bfextu_32_ai, 0xfff8, 0xe9d0, {255, 255, 19, 19, 19, 19, 15}},
33116 {m68k_op_bfextu_32_di, 0xfff8, 0xe9e8, {255, 255, 20, 20, 20, 20, 15}},
33117 {m68k_op_bfextu_32_ix, 0xfff8, 0xe9f0, {255, 255, 22, 22, 22, 22, 15}},
33118 {m68k_op_bfchg_32_d, 0xfff8, 0xeac0, {255, 255, 12, 12, 12, 12, 12}},
33119 {m68k_op_bfchg_32_ai, 0xfff8, 0xead0, {255, 255, 24, 24, 24, 24, 20}},
33120 {m68k_op_bfchg_32_di, 0xfff8, 0xeae8, {255, 255, 25, 25, 25, 25, 20}},
33121 {m68k_op_bfchg_32_ix, 0xfff8, 0xeaf0, {255, 255, 27, 27, 27, 27, 20}},
33122 {m68k_op_bfexts_32_d, 0xfff8, 0xebc0, {255, 255, 8, 8, 8, 8, 8}},
33123 {m68k_op_bfexts_32_ai, 0xfff8, 0xebd0, {255, 255, 19, 19, 19, 19, 15}},
33124 {m68k_op_bfexts_32_di, 0xfff8, 0xebe8, {255, 255, 20, 20, 20, 20, 15}},
33125 {m68k_op_bfexts_32_ix, 0xfff8, 0xebf0, {255, 255, 22, 22, 22, 22, 15}},
33126 {m68k_op_bfclr_32_d, 0xfff8, 0xecc0, {255, 255, 12, 12, 12, 12, 12}},
33127 {m68k_op_bfclr_32_ai, 0xfff8, 0xecd0, {255, 255, 24, 24, 24, 24, 20}},
33128 {m68k_op_bfclr_32_di, 0xfff8, 0xece8, {255, 255, 25, 25, 25, 25, 20}},
33129 {m68k_op_bfclr_32_ix, 0xfff8, 0xecf0, {255, 255, 27, 27, 27, 27, 20}},
33130 {m68k_op_bfffo_32_d, 0xfff8, 0xedc0, {255, 255, 18, 18, 18, 18, 18}},
33131 {m68k_op_bfffo_32_ai, 0xfff8, 0xedd0, {255, 255, 32, 32, 32, 32, 28}},
33132 {m68k_op_bfffo_32_di, 0xfff8, 0xede8, {255, 255, 33, 33, 33, 33, 28}},
33133 {m68k_op_bfffo_32_ix, 0xfff8, 0xedf0, {255, 255, 35, 35, 35, 35, 28}},
33134 {m68k_op_bfset_32_d, 0xfff8, 0xeec0, {255, 255, 12, 12, 12, 12, 12}},
33135 {m68k_op_bfset_32_ai, 0xfff8, 0xeed0, {255, 255, 24, 24, 24, 24, 20}},
33136 {m68k_op_bfset_32_di, 0xfff8, 0xeee8, {255, 255, 25, 25, 25, 25, 20}},
33137 {m68k_op_bfset_32_ix, 0xfff8, 0xeef0, {255, 255, 27, 27, 27, 27, 20}},
33138 {m68k_op_bfins_32_d, 0xfff8, 0xefc0, {255, 255, 10, 10, 10, 10, 10}},
33139 {m68k_op_bfins_32_ai, 0xfff8, 0xefd0, {255, 255, 21, 21, 21, 21, 17}},
33140 {m68k_op_bfins_32_di, 0xfff8, 0xefe8, {255, 255, 22, 22, 22, 22, 17}},
33141 {m68k_op_bfins_32_ix, 0xfff8, 0xeff0, {255, 255, 24, 24, 24, 24, 17}},
33142 {m68k_op_ftrapcc_32, 0xfff8, 0xf278, {255, 255, 4, 4, 255, 255, 255}},
33143 {m68k_op_pflushan_32, 0xfff8, 0xf510, {255, 255, 255, 255, 4, 4, 4}},
33144 {m68k_op_pflusha_32, 0xfff8, 0xf518, {255, 255, 255, 255, 4, 4, 4}},
33145 {m68k_op_move16_32, 0xfff8, 0xf620, {255, 255, 255, 255, 4, 4, 4}},
33146 {m68k_op_ori_8_pi7, 0xffff, 0x001f, { 16, 16, 8, 8, 8, 8, 4}},
33147 {m68k_op_ori_8_pd7, 0xffff, 0x0027, { 18, 18, 9, 9, 9, 9, 4}},
33148 {m68k_op_ori_8_aw, 0xffff, 0x0038, { 20, 20, 8, 8, 8, 8, 4}},
33149 {m68k_op_ori_8_al, 0xffff, 0x0039, { 24, 24, 8, 8, 8, 8, 4}},
33150 {m68k_op_ori_16_toc, 0xffff, 0x003c, { 20, 16, 12, 12, 12, 12, 12}},
33151 {m68k_op_ori_16_aw, 0xffff, 0x0078, { 20, 20, 8, 8, 8, 8, 4}},
33152 {m68k_op_ori_16_al, 0xffff, 0x0079, { 24, 24, 8, 8, 8, 8, 4}},
33153 {m68k_op_ori_16_tos, 0xffff, 0x007c, { 20, 16, 12, 12, 12, 12, 12}},
33154 {m68k_op_ori_32_aw, 0xffff, 0x00b8, { 32, 32, 8, 8, 8, 8, 4}},
33155 {m68k_op_ori_32_al, 0xffff, 0x00b9, { 36, 36, 8, 8, 8, 8, 4}},
33156 {m68k_op_chk2cmp2_8_aw, 0xffff, 0x00f8, {255, 255, 22, 22, 22, 22, 18}},
33157 {m68k_op_chk2cmp2_8_al, 0xffff, 0x00f9, {255, 255, 22, 22, 22, 22, 18}},
33158 {m68k_op_chk2cmp2_8_pcdi, 0xffff, 0x00fa, {255, 255, 23, 23, 23, 23, 23}},
33159 {m68k_op_chk2cmp2_8_pcix, 0xffff, 0x00fb, {255, 255, 23, 23, 23, 23, 23}},
33160 {m68k_op_andi_8_pi7, 0xffff, 0x021f, { 16, 16, 8, 8, 8, 8, 4}},
33161 {m68k_op_andi_8_pd7, 0xffff, 0x0227, { 18, 18, 9, 9, 9, 9, 4}},
33162 {m68k_op_andi_8_aw, 0xffff, 0x0238, { 20, 20, 8, 8, 8, 8, 4}},
33163 {m68k_op_andi_8_al, 0xffff, 0x0239, { 24, 24, 8, 8, 8, 8, 4}},
33164 {m68k_op_andi_16_toc, 0xffff, 0x023c, { 20, 16, 12, 12, 12, 12, 12}},
33165 {m68k_op_andi_16_aw, 0xffff, 0x0278, { 20, 20, 8, 8, 8, 8, 4}},
33166 {m68k_op_andi_16_al, 0xffff, 0x0279, { 24, 24, 8, 8, 8, 8, 4}},
33167 {m68k_op_andi_16_tos, 0xffff, 0x027c, { 20, 16, 12, 12, 12, 12, 12}},
33168 {m68k_op_andi_32_aw, 0xffff, 0x02b8, { 32, 32, 8, 8, 8, 8, 4}},
33169 {m68k_op_andi_32_al, 0xffff, 0x02b9, { 36, 36, 8, 8, 8, 8, 4}},
33170 {m68k_op_chk2cmp2_16_aw, 0xffff, 0x02f8, {255, 255, 22, 22, 22, 22, 18}},
33171 {m68k_op_chk2cmp2_16_al, 0xffff, 0x02f9, {255, 255, 22, 22, 22, 22, 18}},
33172 {m68k_op_chk2cmp2_16_pcdi, 0xffff, 0x02fa, {255, 255, 23, 23, 23, 23, 23}},
33173 {m68k_op_chk2cmp2_16_pcix, 0xffff, 0x02fb, {255, 255, 23, 23, 23, 23, 23}},
33174 {m68k_op_subi_8_pi7, 0xffff, 0x041f, { 16, 16, 8, 8, 8, 8, 4}},
33175 {m68k_op_subi_8_pd7, 0xffff, 0x0427, { 18, 18, 9, 9, 9, 9, 4}},
33176 {m68k_op_subi_8_aw, 0xffff, 0x0438, { 20, 20, 8, 8, 8, 8, 4}},
33177 {m68k_op_subi_8_al, 0xffff, 0x0439, { 24, 24, 8, 8, 8, 8, 4}},
33178 {m68k_op_subi_16_aw, 0xffff, 0x0478, { 20, 20, 8, 8, 8, 8, 4}},
33179 {m68k_op_subi_16_al, 0xffff, 0x0479, { 24, 24, 8, 8, 8, 8, 4}},
33180 {m68k_op_subi_32_aw, 0xffff, 0x04b8, { 32, 32, 8, 8, 8, 8, 4}},
33181 {m68k_op_subi_32_al, 0xffff, 0x04b9, { 36, 36, 8, 8, 8, 8, 4}},
33182 {m68k_op_chk2cmp2_32_aw, 0xffff, 0x04f8, {255, 255, 22, 22, 22, 22, 18}},
33183 {m68k_op_chk2cmp2_32_al, 0xffff, 0x04f9, {255, 255, 22, 22, 22, 22, 18}},
33184 {m68k_op_chk2cmp2_32_pcdi, 0xffff, 0x04fa, {255, 255, 23, 23, 23, 23, 23}},
33185 {m68k_op_chk2cmp2_32_pcix, 0xffff, 0x04fb, {255, 255, 23, 23, 23, 23, 23}},
33186 {m68k_op_addi_8_pi7, 0xffff, 0x061f, { 16, 16, 8, 8, 8, 8, 4}},
33187 {m68k_op_addi_8_pd7, 0xffff, 0x0627, { 18, 18, 9, 9, 9, 9, 4}},
33188 {m68k_op_addi_8_aw, 0xffff, 0x0638, { 20, 20, 8, 8, 8, 8, 4}},
33189 {m68k_op_addi_8_al, 0xffff, 0x0639, { 24, 24, 8, 8, 8, 8, 4}},
33190 {m68k_op_addi_16_aw, 0xffff, 0x0678, { 20, 20, 8, 8, 8, 8, 4}},
33191 {m68k_op_addi_16_al, 0xffff, 0x0679, { 24, 24, 8, 8, 8, 8, 4}},
33192 {m68k_op_addi_32_aw, 0xffff, 0x06b8, { 32, 32, 8, 8, 8, 8, 4}},
33193 {m68k_op_addi_32_al, 0xffff, 0x06b9, { 36, 36, 8, 8, 8, 8, 4}},
33194 {m68k_op_callm_32_aw, 0xffff, 0x06f8, {255, 255, 64, 64, 64, 64, 60}},
33195 {m68k_op_callm_32_al, 0xffff, 0x06f9, {255, 255, 64, 64, 64, 64, 60}},
33196 {m68k_op_callm_32_pcdi, 0xffff, 0x06fa, {255, 255, 65, 65, 65, 65, 60}},
33197 {m68k_op_callm_32_pcix, 0xffff, 0x06fb, {255, 255, 67, 67, 67, 67, 60}},
33198 {m68k_op_btst_8_s_pi7, 0xffff, 0x081f, { 12, 12, 8, 8, 8, 8, 4}},
33199 {m68k_op_btst_8_s_pd7, 0xffff, 0x0827, { 14, 14, 9, 9, 9, 9, 4}},
33200 {m68k_op_btst_8_s_aw, 0xffff, 0x0838, { 16, 16, 8, 8, 8, 8, 4}},
33201 {m68k_op_btst_8_s_al, 0xffff, 0x0839, { 20, 20, 8, 8, 8, 8, 4}},
33202 {m68k_op_btst_8_s_pcdi, 0xffff, 0x083a, { 16, 16, 9, 9, 9, 9, 4}},
33203 {m68k_op_btst_8_s_pcix, 0xffff, 0x083b, { 18, 18, 11, 11, 11, 11, 4}},
33204 {m68k_op_bchg_8_s_pi7, 0xffff, 0x085f, { 16, 16, 8, 8, 8, 8, 4}},
33205 {m68k_op_bchg_8_s_pd7, 0xffff, 0x0867, { 18, 18, 9, 9, 9, 9, 4}},
33206 {m68k_op_bchg_8_s_aw, 0xffff, 0x0878, { 20, 20, 8, 8, 8, 8, 4}},
33207 {m68k_op_bchg_8_s_al, 0xffff, 0x0879, { 24, 24, 8, 8, 8, 8, 4}},
33208 {m68k_op_bclr_8_s_pi7, 0xffff, 0x089f, { 16, 16, 8, 8, 8, 8, 4}},
33209 {m68k_op_bclr_8_s_pd7, 0xffff, 0x08a7, { 18, 18, 9, 9, 9, 9, 4}},
33210 {m68k_op_bclr_8_s_aw, 0xffff, 0x08b8, { 20, 20, 8, 8, 8, 8, 4}},
33211 {m68k_op_bclr_8_s_al, 0xffff, 0x08b9, { 24, 24, 8, 8, 8, 8, 4}},
33212 {m68k_op_bset_8_s_pi7, 0xffff, 0x08df, { 16, 16, 8, 8, 8, 8, 4}},
33213 {m68k_op_bset_8_s_pd7, 0xffff, 0x08e7, { 18, 18, 9, 9, 9, 9, 4}},
33214 {m68k_op_bset_8_s_aw, 0xffff, 0x08f8, { 20, 20, 8, 8, 8, 8, 4}},
33215 {m68k_op_bset_8_s_al, 0xffff, 0x08f9, { 24, 24, 8, 8, 8, 8, 4}},
33216 {m68k_op_eori_8_pi7, 0xffff, 0x0a1f, { 16, 16, 8, 8, 8, 8, 4}},
33217 {m68k_op_eori_8_pd7, 0xffff, 0x0a27, { 18, 18, 9, 9, 9, 9, 4}},
33218 {m68k_op_eori_8_aw, 0xffff, 0x0a38, { 20, 20, 8, 8, 8, 8, 4}},
33219 {m68k_op_eori_8_al, 0xffff, 0x0a39, { 24, 24, 8, 8, 8, 8, 4}},
33220 {m68k_op_eori_16_toc, 0xffff, 0x0a3c, { 20, 16, 12, 12, 12, 12, 12}},
33221 {m68k_op_eori_16_aw, 0xffff, 0x0a78, { 20, 20, 8, 8, 8, 8, 4}},
33222 {m68k_op_eori_16_al, 0xffff, 0x0a79, { 24, 24, 8, 8, 8, 8, 4}},
33223 {m68k_op_eori_16_tos, 0xffff, 0x0a7c, { 20, 16, 12, 12, 12, 12, 12}},
33224 {m68k_op_eori_32_aw, 0xffff, 0x0ab8, { 32, 32, 8, 8, 8, 8, 4}},
33225 {m68k_op_eori_32_al, 0xffff, 0x0ab9, { 36, 36, 8, 8, 8, 8, 4}},
33226 {m68k_op_cas_8_pi7, 0xffff, 0x0adf, {255, 255, 16, 16, 16, 16, 12}},
33227 {m68k_op_cas_8_pd7, 0xffff, 0x0ae7, {255, 255, 17, 17, 17, 17, 12}},
33228 {m68k_op_cas_8_aw, 0xffff, 0x0af8, {255, 255, 16, 16, 16, 16, 12}},
33229 {m68k_op_cas_8_al, 0xffff, 0x0af9, {255, 255, 16, 16, 16, 16, 12}},
33230 {m68k_op_cmpi_8_pi7, 0xffff, 0x0c1f, { 12, 12, 6, 6, 6, 6, 2}},
33231 {m68k_op_cmpi_8_pd7, 0xffff, 0x0c27, { 14, 14, 7, 7, 7, 7, 2}},
33232 {m68k_op_cmpi_8_aw, 0xffff, 0x0c38, { 16, 16, 6, 6, 6, 6, 2}},
33233 {m68k_op_cmpi_8_al, 0xffff, 0x0c39, { 20, 20, 6, 6, 6, 6, 2}},
33234 {m68k_op_cmpi_8_pcdi, 0xffff, 0x0c3a, {255, 255, 7, 7, 7, 7, 7}},
33235 {m68k_op_cmpi_8_pcix, 0xffff, 0x0c3b, {255, 255, 9, 9, 9, 9, 9}},
33236 {m68k_op_cmpi_16_aw, 0xffff, 0x0c78, { 16, 16, 6, 6, 6, 6, 2}},
33237 {m68k_op_cmpi_16_al, 0xffff, 0x0c79, { 20, 20, 6, 6, 6, 6, 2}},
33238 {m68k_op_cmpi_16_pcdi, 0xffff, 0x0c7a, {255, 255, 7, 7, 7, 7, 7}},
33239 {m68k_op_cmpi_16_pcix, 0xffff, 0x0c7b, {255, 255, 9, 9, 9, 9, 9}},
33240 {m68k_op_cmpi_32_aw, 0xffff, 0x0cb8, { 24, 24, 6, 6, 6, 6, 2}},
33241 {m68k_op_cmpi_32_al, 0xffff, 0x0cb9, { 28, 28, 6, 6, 6, 6, 2}},
33242 {m68k_op_cmpi_32_pcdi, 0xffff, 0x0cba, {255, 255, 7, 7, 7, 7, 7}},
33243 {m68k_op_cmpi_32_pcix, 0xffff, 0x0cbb, {255, 255, 9, 9, 9, 9, 9}},
33244 {m68k_op_cas_16_aw, 0xffff, 0x0cf8, {255, 255, 16, 16, 16, 16, 12}},
33245 {m68k_op_cas_16_al, 0xffff, 0x0cf9, {255, 255, 16, 16, 16, 16, 12}},
33246 {m68k_op_cas2_16, 0xffff, 0x0cfc, {255, 255, 12, 12, 12, 12, 12}},
33247 {m68k_op_moves_8_pi7, 0xffff, 0x0e1f, {255, 18, 9, 9, 9, 9, 5}},
33248 {m68k_op_moves_8_pd7, 0xffff, 0x0e27, {255, 20, 10, 10, 10, 10, 5}},
33249 {m68k_op_moves_8_aw, 0xffff, 0x0e38, {255, 26, 9, 9, 9, 9, 5}},
33250 {m68k_op_moves_8_al, 0xffff, 0x0e39, {255, 30, 9, 9, 9, 9, 5}},
33251 {m68k_op_moves_16_aw, 0xffff, 0x0e78, {255, 26, 9, 9, 9, 9, 5}},
33252 {m68k_op_moves_16_al, 0xffff, 0x0e79, {255, 30, 9, 9, 9, 9, 5}},
33253 {m68k_op_moves_32_aw, 0xffff, 0x0eb8, {255, 32, 9, 9, 9, 9, 5}},
33254 {m68k_op_moves_32_al, 0xffff, 0x0eb9, {255, 36, 9, 9, 9, 9, 5}},
33255 {m68k_op_cas_32_aw, 0xffff, 0x0ef8, {255, 255, 16, 16, 16, 16, 12}},
33256 {m68k_op_cas_32_al, 0xffff, 0x0ef9, {255, 255, 16, 16, 16, 16, 12}},
33257 {m68k_op_cas2_32, 0xffff, 0x0efc, {255, 255, 12, 12, 12, 12, 12}},
33258 {m68k_op_move_8_aw_pi7, 0xffff, 0x11df, { 16, 16, 8, 8, 8, 8, 4}},
33259 {m68k_op_move_8_aw_pd7, 0xffff, 0x11e7, { 18, 18, 9, 9, 9, 9, 4}},
33260 {m68k_op_move_8_aw_aw, 0xffff, 0x11f8, { 20, 20, 8, 8, 8, 8, 4}},
33261 {m68k_op_move_8_aw_al, 0xffff, 0x11f9, { 24, 24, 8, 8, 8, 8, 4}},
33262 {m68k_op_move_8_aw_pcdi, 0xffff, 0x11fa, { 20, 20, 9, 9, 9, 9, 4}},
33263 {m68k_op_move_8_aw_pcix, 0xffff, 0x11fb, { 22, 22, 11, 11, 11, 11, 4}},
33264 {m68k_op_move_8_aw_i, 0xffff, 0x11fc, { 16, 16, 6, 6, 6, 6, 4}},
33265 {m68k_op_move_8_al_pi7, 0xffff, 0x13df, { 20, 20, 10, 10, 10, 10, 6}},
33266 {m68k_op_move_8_al_pd7, 0xffff, 0x13e7, { 22, 22, 11, 11, 11, 11, 6}},
33267 {m68k_op_move_8_al_aw, 0xffff, 0x13f8, { 24, 24, 10, 10, 10, 10, 6}},
33268 {m68k_op_move_8_al_al, 0xffff, 0x13f9, { 28, 28, 10, 10, 10, 10, 6}},
33269 {m68k_op_move_8_al_pcdi, 0xffff, 0x13fa, { 24, 24, 11, 11, 11, 11, 6}},
33270 {m68k_op_move_8_al_pcix, 0xffff, 0x13fb, { 26, 26, 13, 13, 13, 13, 6}},
33271 {m68k_op_move_8_al_i, 0xffff, 0x13fc, { 20, 20, 8, 8, 8, 8, 6}},
33272 {m68k_op_move_8_pi7_pi7, 0xffff, 0x1edf, { 12, 12, 8, 8, 8, 8, 4}},
33273 {m68k_op_move_8_pi7_pd7, 0xffff, 0x1ee7, { 14, 14, 9, 9, 9, 9, 4}},
33274 {m68k_op_move_8_pi7_aw, 0xffff, 0x1ef8, { 16, 16, 8, 8, 8, 8, 4}},
33275 {m68k_op_move_8_pi7_al, 0xffff, 0x1ef9, { 20, 20, 8, 8, 8, 8, 4}},
33276 {m68k_op_move_8_pi7_pcdi, 0xffff, 0x1efa, { 16, 16, 9, 9, 9, 9, 4}},
33277 {m68k_op_move_8_pi7_pcix, 0xffff, 0x1efb, { 18, 18, 11, 11, 11, 11, 4}},
33278 {m68k_op_move_8_pi7_i, 0xffff, 0x1efc, { 12, 12, 6, 6, 6, 6, 4}},
33279 {m68k_op_move_8_pd7_pi7, 0xffff, 0x1f1f, { 12, 12, 9, 9, 9, 9, 5}},
33280 {m68k_op_move_8_pd7_pd7, 0xffff, 0x1f27, { 14, 14, 10, 10, 10, 10, 5}},
33281 {m68k_op_move_8_pd7_aw, 0xffff, 0x1f38, { 16, 16, 9, 9, 9, 9, 5}},
33282 {m68k_op_move_8_pd7_al, 0xffff, 0x1f39, { 20, 20, 9, 9, 9, 9, 5}},
33283 {m68k_op_move_8_pd7_pcdi, 0xffff, 0x1f3a, { 16, 16, 10, 10, 10, 10, 5}},
33284 {m68k_op_move_8_pd7_pcix, 0xffff, 0x1f3b, { 18, 18, 12, 12, 12, 12, 5}},
33285 {m68k_op_move_8_pd7_i, 0xffff, 0x1f3c, { 12, 12, 7, 7, 7, 7, 5}},
33286 {m68k_op_move_32_aw_aw, 0xffff, 0x21f8, { 28, 28, 8, 8, 8, 8, 4}},
33287 {m68k_op_move_32_aw_al, 0xffff, 0x21f9, { 32, 32, 8, 8, 8, 8, 4}},
33288 {m68k_op_move_32_aw_pcdi, 0xffff, 0x21fa, { 28, 28, 9, 9, 9, 9, 4}},
33289 {m68k_op_move_32_aw_pcix, 0xffff, 0x21fb, { 30, 30, 11, 11, 11, 11, 4}},
33290 {m68k_op_move_32_aw_i, 0xffff, 0x21fc, { 24, 24, 8, 8, 8, 8, 4}},
33291 {m68k_op_move_32_al_aw, 0xffff, 0x23f8, { 32, 32, 10, 10, 10, 10, 6}},
33292 {m68k_op_move_32_al_al, 0xffff, 0x23f9, { 36, 36, 10, 10, 10, 10, 6}},
33293 {m68k_op_move_32_al_pcdi, 0xffff, 0x23fa, { 32, 32, 11, 11, 11, 11, 6}},
33294 {m68k_op_move_32_al_pcix, 0xffff, 0x23fb, { 34, 34, 13, 13, 13, 13, 6}},
33295 {m68k_op_move_32_al_i, 0xffff, 0x23fc, { 28, 28, 10, 10, 10, 10, 6}},
33296 {m68k_op_move_16_aw_aw, 0xffff, 0x31f8, { 20, 20, 8, 8, 8, 8, 4}},
33297 {m68k_op_move_16_aw_al, 0xffff, 0x31f9, { 24, 24, 8, 8, 8, 8, 4}},
33298 {m68k_op_move_16_aw_pcdi, 0xffff, 0x31fa, { 20, 20, 9, 9, 9, 9, 4}},
33299 {m68k_op_move_16_aw_pcix, 0xffff, 0x31fb, { 22, 22, 11, 11, 11, 11, 4}},
33300 {m68k_op_move_16_aw_i, 0xffff, 0x31fc, { 16, 16, 6, 6, 6, 6, 4}},
33301 {m68k_op_move_16_al_aw, 0xffff, 0x33f8, { 24, 24, 10, 10, 10, 10, 6}},
33302 {m68k_op_move_16_al_al, 0xffff, 0x33f9, { 28, 28, 10, 10, 10, 10, 6}},
33303 {m68k_op_move_16_al_pcdi, 0xffff, 0x33fa, { 24, 24, 11, 11, 11, 11, 6}},
33304 {m68k_op_move_16_al_pcix, 0xffff, 0x33fb, { 26, 26, 13, 13, 13, 13, 6}},
33305 {m68k_op_move_16_al_i, 0xffff, 0x33fc, { 20, 20, 8, 8, 8, 8, 6}},
33306 {m68k_op_negx_8_pi7, 0xffff, 0x401f, { 12, 12, 8, 8, 8, 8, 4}},
33307 {m68k_op_negx_8_pd7, 0xffff, 0x4027, { 14, 14, 9, 9, 9, 9, 4}},
33308 {m68k_op_negx_8_aw, 0xffff, 0x4038, { 16, 16, 8, 8, 8, 8, 4}},
33309 {m68k_op_negx_8_al, 0xffff, 0x4039, { 20, 20, 8, 8, 8, 8, 4}},
33310 {m68k_op_negx_16_aw, 0xffff, 0x4078, { 16, 16, 8, 8, 8, 8, 4}},
33311 {m68k_op_negx_16_al, 0xffff, 0x4079, { 20, 20, 8, 8, 8, 8, 4}},
33312 {m68k_op_negx_32_aw, 0xffff, 0x40b8, { 24, 24, 8, 8, 8, 8, 4}},
33313 {m68k_op_negx_32_al, 0xffff, 0x40b9, { 28, 28, 8, 8, 8, 8, 4}},
33314 {m68k_op_move_16_frs_aw, 0xffff, 0x40f8, { 16, 16, 12, 12, 12, 12, 8}},
33315 {m68k_op_move_16_frs_al, 0xffff, 0x40f9, { 20, 20, 12, 12, 12, 12, 8}},
33316 {m68k_op_clr_8_pi7, 0xffff, 0x421f, { 12, 8, 8, 8, 8, 8, 4}},
33317 {m68k_op_clr_8_pd7, 0xffff, 0x4227, { 14, 10, 9, 9, 9, 9, 4}},
33318 {m68k_op_clr_8_aw, 0xffff, 0x4238, { 16, 12, 8, 8, 8, 8, 4}},
33319 {m68k_op_clr_8_al, 0xffff, 0x4239, { 20, 14, 8, 8, 8, 8, 4}},
33320 {m68k_op_clr_16_aw, 0xffff, 0x4278, { 16, 12, 8, 8, 8, 8, 4}},
33321 {m68k_op_clr_16_al, 0xffff, 0x4279, { 20, 14, 8, 8, 8, 8, 4}},
33322 {m68k_op_clr_32_aw, 0xffff, 0x42b8, { 24, 16, 8, 8, 8, 8, 4}},
33323 {m68k_op_clr_32_al, 0xffff, 0x42b9, { 28, 20, 8, 8, 8, 8, 4}},
33324 {m68k_op_move_16_frc_aw, 0xffff, 0x42f8, {255, 16, 8, 8, 8, 8, 4}},
33325 {m68k_op_move_16_frc_al, 0xffff, 0x42f9, {255, 20, 8, 8, 8, 8, 4}},
33326 {m68k_op_neg_8_pi7, 0xffff, 0x441f, { 12, 12, 8, 8, 8, 8, 4}},
33327 {m68k_op_neg_8_pd7, 0xffff, 0x4427, { 14, 14, 9, 9, 9, 9, 4}},
33328 {m68k_op_neg_8_aw, 0xffff, 0x4438, { 16, 16, 8, 8, 8, 8, 4}},
33329 {m68k_op_neg_8_al, 0xffff, 0x4439, { 20, 20, 8, 8, 8, 8, 4}},
33330 {m68k_op_neg_16_aw, 0xffff, 0x4478, { 16, 16, 8, 8, 8, 8, 4}},
33331 {m68k_op_neg_16_al, 0xffff, 0x4479, { 20, 20, 8, 8, 8, 8, 4}},
33332 {m68k_op_neg_32_aw, 0xffff, 0x44b8, { 24, 24, 8, 8, 8, 8, 4}},
33333 {m68k_op_neg_32_al, 0xffff, 0x44b9, { 28, 28, 8, 8, 8, 8, 4}},
33334 {m68k_op_move_16_toc_aw, 0xffff, 0x44f8, { 20, 20, 8, 8, 8, 8, 4}},
33335 {m68k_op_move_16_toc_al, 0xffff, 0x44f9, { 24, 24, 8, 8, 8, 8, 4}},
33336 {m68k_op_move_16_toc_pcdi, 0xffff, 0x44fa, { 20, 20, 9, 9, 9, 9, 4}},
33337 {m68k_op_move_16_toc_pcix, 0xffff, 0x44fb, { 22, 22, 11, 11, 11, 11, 4}},
33338 {m68k_op_move_16_toc_i, 0xffff, 0x44fc, { 16, 16, 6, 6, 6, 6, 4}},
33339 {m68k_op_not_8_pi7, 0xffff, 0x461f, { 12, 12, 8, 8, 8, 8, 4}},
33340 {m68k_op_not_8_pd7, 0xffff, 0x4627, { 14, 14, 9, 9, 9, 9, 4}},
33341 {m68k_op_not_8_aw, 0xffff, 0x4638, { 16, 16, 8, 8, 8, 8, 4}},
33342 {m68k_op_not_8_al, 0xffff, 0x4639, { 20, 20, 8, 8, 8, 8, 4}},
33343 {m68k_op_not_16_aw, 0xffff, 0x4678, { 16, 16, 8, 8, 8, 8, 4}},
33344 {m68k_op_not_16_al, 0xffff, 0x4679, { 20, 20, 8, 8, 8, 8, 4}},
33345 {m68k_op_not_32_aw, 0xffff, 0x46b8, { 24, 24, 8, 8, 8, 8, 4}},
33346 {m68k_op_not_32_al, 0xffff, 0x46b9, { 28, 28, 8, 8, 8, 8, 4}},
33347 {m68k_op_move_16_tos_aw, 0xffff, 0x46f8, { 20, 20, 12, 12, 12, 12, 8}},
33348 {m68k_op_move_16_tos_al, 0xffff, 0x46f9, { 24, 24, 12, 12, 12, 12, 8}},
33349 {m68k_op_move_16_tos_pcdi, 0xffff, 0x46fa, { 20, 20, 13, 13, 13, 13, 8}},
33350 {m68k_op_move_16_tos_pcix, 0xffff, 0x46fb, { 22, 22, 15, 15, 15, 15, 8}},
33351 {m68k_op_move_16_tos_i, 0xffff, 0x46fc, { 16, 16, 10, 10, 10, 10, 8}},
33352 {m68k_op_link_32_a7, 0xffff, 0x480f, {255, 255, 6, 6, 6, 6, 6}},
33353 {m68k_op_nbcd_8_pi7, 0xffff, 0x481f, { 12, 12, 10, 10, 10, 10, 6}},
33354 {m68k_op_nbcd_8_pd7, 0xffff, 0x4827, { 14, 14, 11, 11, 11, 11, 6}},
33355 {m68k_op_nbcd_8_aw, 0xffff, 0x4838, { 16, 16, 10, 10, 10, 10, 6}},
33356 {m68k_op_nbcd_8_al, 0xffff, 0x4839, { 20, 20, 10, 10, 10, 10, 6}},
33357 {m68k_op_pea_32_aw, 0xffff, 0x4878, { 16, 16, 9, 9, 9, 9, 5}},
33358 {m68k_op_pea_32_al, 0xffff, 0x4879, { 20, 20, 9, 9, 9, 9, 5}},
33359 {m68k_op_pea_32_pcdi, 0xffff, 0x487a, { 16, 16, 10, 10, 10, 10, 5}},
33360 {m68k_op_pea_32_pcix, 0xffff, 0x487b, { 20, 20, 12, 12, 12, 12, 5}},
33361 {m68k_op_movem_16_re_aw, 0xffff, 0x48b8, { 12, 12, 8, 8, 8, 8, 4}},
33362 {m68k_op_movem_16_re_al, 0xffff, 0x48b9, { 16, 16, 8, 8, 8, 8, 4}},
33363 {m68k_op_movem_32_re_aw, 0xffff, 0x48f8, { 12, 12, 8, 8, 8, 8, 4}},
33364 {m68k_op_movem_32_re_al, 0xffff, 0x48f9, { 16, 16, 8, 8, 8, 8, 4}},
33365 {m68k_op_tst_8_pi7, 0xffff, 0x4a1f, { 8, 8, 6, 6, 6, 6, 2}},
33366 {m68k_op_tst_8_pd7, 0xffff, 0x4a27, { 10, 10, 7, 7, 7, 7, 2}},
33367 {m68k_op_tst_8_aw, 0xffff, 0x4a38, { 12, 12, 6, 6, 6, 6, 2}},
33368 {m68k_op_tst_8_al, 0xffff, 0x4a39, { 16, 16, 6, 6, 6, 6, 2}},
33369 {m68k_op_tst_8_pcdi, 0xffff, 0x4a3a, {255, 255, 7, 7, 7, 7, 7}},
33370 {m68k_op_tst_8_pcix, 0xffff, 0x4a3b, {255, 255, 9, 9, 9, 9, 9}},
33371 {m68k_op_tst_8_i, 0xffff, 0x4a3c, {255, 255, 6, 6, 6, 6, 6}},
33372 {m68k_op_tst_16_aw, 0xffff, 0x4a78, { 12, 12, 6, 6, 6, 6, 2}},
33373 {m68k_op_tst_16_al, 0xffff, 0x4a79, { 16, 16, 6, 6, 6, 6, 2}},
33374 {m68k_op_tst_16_pcdi, 0xffff, 0x4a7a, {255, 255, 7, 7, 7, 7, 7}},
33375 {m68k_op_tst_16_pcix, 0xffff, 0x4a7b, {255, 255, 9, 9, 9, 9, 9}},
33376 {m68k_op_tst_16_i, 0xffff, 0x4a7c, {255, 255, 6, 6, 6, 6, 6}},
33377 {m68k_op_tst_32_aw, 0xffff, 0x4ab8, { 16, 16, 6, 6, 6, 6, 2}},
33378 {m68k_op_tst_32_al, 0xffff, 0x4ab9, { 20, 20, 6, 6, 6, 6, 2}},
33379 {m68k_op_tst_32_pcdi, 0xffff, 0x4aba, {255, 255, 7, 7, 7, 7, 7}},
33380 {m68k_op_tst_32_pcix, 0xffff, 0x4abb, {255, 255, 9, 9, 9, 9, 9}},
33381 {m68k_op_tst_32_i, 0xffff, 0x4abc, {255, 255, 6, 6, 6, 6, 6}},
33382 {m68k_op_tas_8_pi7, 0xffff, 0x4adf, { 18, 18, 16, 16, 16, 16, 12}},
33383 {m68k_op_tas_8_pd7, 0xffff, 0x4ae7, { 20, 20, 17, 17, 17, 17, 12}},
33384 {m68k_op_tas_8_aw, 0xffff, 0x4af8, { 22, 22, 16, 16, 16, 16, 12}},
33385 {m68k_op_tas_8_al, 0xffff, 0x4af9, { 26, 26, 16, 16, 16, 16, 12}},
33386 {m68k_op_illegal, 0xffff, 0x4afc, { 4, 4, 4, 4, 4, 4, 4}},
33387 {m68k_op_mull_32_aw, 0xffff, 0x4c38, {255, 255, 47, 47, 47, 47, 43}},
33388 {m68k_op_mull_32_al, 0xffff, 0x4c39, {255, 255, 47, 47, 47, 47, 43}},
33389 {m68k_op_mull_32_pcdi, 0xffff, 0x4c3a, {255, 255, 48, 48, 48, 48, 43}},
33390 {m68k_op_mull_32_pcix, 0xffff, 0x4c3b, {255, 255, 50, 50, 50, 50, 43}},
33391 {m68k_op_mull_32_i, 0xffff, 0x4c3c, {255, 255, 47, 47, 47, 47, 43}},
33392 {m68k_op_divl_32_aw, 0xffff, 0x4c78, {255, 255, 88, 88, 88, 88, 84}},
33393 {m68k_op_divl_32_al, 0xffff, 0x4c79, {255, 255, 88, 88, 88, 88, 84}},
33394 {m68k_op_divl_32_pcdi, 0xffff, 0x4c7a, {255, 255, 89, 89, 89, 89, 84}},
33395 {m68k_op_divl_32_pcix, 0xffff, 0x4c7b, {255, 255, 91, 91, 91, 91, 84}},
33396 {m68k_op_divl_32_i, 0xffff, 0x4c7c, {255, 255, 88, 88, 88, 88, 84}},
33397 {m68k_op_movem_16_er_aw, 0xffff, 0x4cb8, { 16, 16, 12, 12, 12, 12, 8}},
33398 {m68k_op_movem_16_er_al, 0xffff, 0x4cb9, { 20, 20, 12, 12, 12, 12, 8}},
33399 {m68k_op_movem_16_er_pcdi, 0xffff, 0x4cba, { 16, 16, 9, 9, 9, 9, 9}},
33400 {m68k_op_movem_16_er_pcix, 0xffff, 0x4cbb, { 18, 18, 11, 11, 11, 11, 11}},
33401 {m68k_op_movem_32_er_aw, 0xffff, 0x4cf8, { 16, 16, 12, 12, 12, 12, 8}},
33402 {m68k_op_movem_32_er_al, 0xffff, 0x4cf9, { 20, 20, 12, 12, 12, 12, 8}},
33403 {m68k_op_movem_32_er_pcdi, 0xffff, 0x4cfa, { 16, 16, 9, 9, 9, 9, 9}},
33404 {m68k_op_movem_32_er_pcix, 0xffff, 0x4cfb, { 18, 18, 11, 11, 11, 11, 11}},
33405 {m68k_op_link_16_a7, 0xffff, 0x4e57, { 16, 16, 5, 5, 5, 5, 5}},
33406 {m68k_op_unlk_32_a7, 0xffff, 0x4e5f, { 12, 12, 6, 6, 6, 6, 6}},
33407 {m68k_op_reset, 0xffff, 0x4e70, { 0, 0, 0, 0, 0, 0, 0}},
33408 {m68k_op_nop, 0xffff, 0x4e71, { 4, 4, 2, 2, 2, 2, 2}},
33409 {m68k_op_stop, 0xffff, 0x4e72, { 4, 4, 8, 8, 8, 8, 8}},
33410 {m68k_op_rte_32, 0xffff, 0x4e73, { 20, 24, 20, 20, 20, 20, 20}},
33411 {m68k_op_rtd_32, 0xffff, 0x4e74, {255, 16, 10, 10, 10, 10, 10}},
33412 {m68k_op_rts_32, 0xffff, 0x4e75, { 16, 16, 10, 10, 10, 10, 10}},
33413 {m68k_op_trapv, 0xffff, 0x4e76, { 4, 4, 4, 4, 4, 4, 4}},
33414 {m68k_op_rtr_32, 0xffff, 0x4e77, { 20, 20, 14, 14, 14, 14, 14}},
33415 {m68k_op_movec_32_cr, 0xffff, 0x4e7a, {255, 12, 6, 6, 6, 6, 6}},
33416 {m68k_op_movec_32_rc, 0xffff, 0x4e7b, {255, 10, 12, 12, 12, 12, 12}},
33417 {m68k_op_jsr_32_aw, 0xffff, 0x4eb8, { 18, 18, 4, 4, 4, 4, 0}},
33418 {m68k_op_jsr_32_al, 0xffff, 0x4eb9, { 20, 20, 4, 4, 4, 4, 0}},
33419 {m68k_op_jsr_32_pcdi, 0xffff, 0x4eba, { 18, 18, 5, 5, 5, 5, 0}},
33420 {m68k_op_jsr_32_pcix, 0xffff, 0x4ebb, { 22, 22, 7, 7, 7, 7, 0}},
33421 {m68k_op_jmp_32_aw, 0xffff, 0x4ef8, { 10, 10, 4, 4, 4, 4, 0}},
33422 {m68k_op_jmp_32_al, 0xffff, 0x4ef9, { 12, 12, 4, 4, 4, 4, 0}},
33423 {m68k_op_jmp_32_pcdi, 0xffff, 0x4efa, { 10, 10, 5, 5, 5, 5, 0}},
33424 {m68k_op_jmp_32_pcix, 0xffff, 0x4efb, { 14, 14, 7, 7, 7, 7, 0}},
33425 {m68k_op_st_8_pi7, 0xffff, 0x50df, { 12, 12, 10, 10, 10, 10, 6}},
33426 {m68k_op_st_8_pd7, 0xffff, 0x50e7, { 14, 14, 11, 11, 11, 11, 6}},
33427 {m68k_op_st_8_aw, 0xffff, 0x50f8, { 16, 16, 10, 10, 10, 10, 6}},
33428 {m68k_op_st_8_al, 0xffff, 0x50f9, { 20, 20, 10, 10, 10, 10, 6}},
33429 {m68k_op_trapt_16, 0xffff, 0x50fa, {255, 255, 6, 6, 6, 6, 6}},
33430 {m68k_op_trapt_32, 0xffff, 0x50fb, {255, 255, 8, 8, 8, 8, 8}},
33431 {m68k_op_trapt, 0xffff, 0x50fc, {255, 255, 4, 4, 4, 4, 4}},
33432 {m68k_op_sf_8_pi7, 0xffff, 0x51df, { 12, 12, 10, 10, 10, 10, 6}},
33433 {m68k_op_sf_8_pd7, 0xffff, 0x51e7, { 14, 14, 11, 11, 11, 11, 6}},
33434 {m68k_op_sf_8_aw, 0xffff, 0x51f8, { 16, 16, 10, 10, 10, 10, 6}},
33435 {m68k_op_sf_8_al, 0xffff, 0x51f9, { 20, 20, 10, 10, 10, 10, 6}},
33436 {m68k_op_trapf_16, 0xffff, 0x51fa, {255, 255, 6, 6, 6, 6, 6}},
33437 {m68k_op_trapf_32, 0xffff, 0x51fb, {255, 255, 8, 8, 8, 8, 8}},
33438 {m68k_op_trapf, 0xffff, 0x51fc, {255, 255, 4, 4, 4, 4, 4}},
33439 {m68k_op_shi_8_pi7, 0xffff, 0x52df, { 12, 12, 10, 10, 10, 10, 6}},
33440 {m68k_op_shi_8_pd7, 0xffff, 0x52e7, { 14, 14, 11, 11, 11, 11, 6}},
33441 {m68k_op_shi_8_aw, 0xffff, 0x52f8, { 16, 16, 10, 10, 10, 10, 6}},
33442 {m68k_op_shi_8_al, 0xffff, 0x52f9, { 20, 20, 10, 10, 10, 10, 6}},
33443 {m68k_op_traphi_16, 0xffff, 0x52fa, {255, 255, 6, 6, 6, 6, 6}},
33444 {m68k_op_traphi_32, 0xffff, 0x52fb, {255, 255, 8, 8, 8, 8, 8}},
33445 {m68k_op_traphi, 0xffff, 0x52fc, {255, 255, 4, 4, 4, 4, 4}},
33446 {m68k_op_sls_8_pi7, 0xffff, 0x53df, { 12, 12, 10, 10, 10, 10, 6}},
33447 {m68k_op_sls_8_pd7, 0xffff, 0x53e7, { 14, 14, 11, 11, 11, 11, 6}},
33448 {m68k_op_sls_8_aw, 0xffff, 0x53f8, { 16, 16, 10, 10, 10, 10, 6}},
33449 {m68k_op_sls_8_al, 0xffff, 0x53f9, { 20, 20, 10, 10, 10, 10, 6}},
33450 {m68k_op_trapls_16, 0xffff, 0x53fa, {255, 255, 6, 6, 6, 6, 6}},
33451 {m68k_op_trapls_32, 0xffff, 0x53fb, {255, 255, 8, 8, 8, 8, 8}},
33452 {m68k_op_trapls, 0xffff, 0x53fc, {255, 255, 4, 4, 4, 4, 4}},
33453 {m68k_op_scc_8_pi7, 0xffff, 0x54df, { 12, 12, 10, 10, 10, 10, 6}},
33454 {m68k_op_scc_8_pd7, 0xffff, 0x54e7, { 14, 14, 11, 11, 11, 11, 6}},
33455 {m68k_op_scc_8_aw, 0xffff, 0x54f8, { 16, 16, 10, 10, 10, 10, 6}},
33456 {m68k_op_scc_8_al, 0xffff, 0x54f9, { 20, 20, 10, 10, 10, 10, 6}},
33457 {m68k_op_trapcc_16, 0xffff, 0x54fa, {255, 255, 6, 6, 6, 6, 6}},
33458 {m68k_op_trapcc_32, 0xffff, 0x54fb, {255, 255, 8, 8, 8, 8, 8}},
33459 {m68k_op_trapcc, 0xffff, 0x54fc, {255, 255, 4, 4, 4, 4, 4}},
33460 {m68k_op_scs_8_pi7, 0xffff, 0x55df, { 12, 12, 10, 10, 10, 10, 6}},
33461 {m68k_op_scs_8_pd7, 0xffff, 0x55e7, { 14, 14, 11, 11, 11, 11, 6}},
33462 {m68k_op_scs_8_aw, 0xffff, 0x55f8, { 16, 16, 10, 10, 10, 10, 6}},
33463 {m68k_op_scs_8_al, 0xffff, 0x55f9, { 20, 20, 10, 10, 10, 10, 6}},
33464 {m68k_op_trapcs_16, 0xffff, 0x55fa, {255, 255, 6, 6, 6, 6, 6}},
33465 {m68k_op_trapcs_32, 0xffff, 0x55fb, {255, 255, 8, 8, 8, 8, 8}},
33466 {m68k_op_trapcs, 0xffff, 0x55fc, {255, 255, 4, 4, 4, 4, 4}},
33467 {m68k_op_sne_8_pi7, 0xffff, 0x56df, { 12, 12, 10, 10, 10, 10, 6}},
33468 {m68k_op_sne_8_pd7, 0xffff, 0x56e7, { 14, 14, 11, 11, 11, 11, 6}},
33469 {m68k_op_sne_8_aw, 0xffff, 0x56f8, { 16, 16, 10, 10, 10, 10, 6}},
33470 {m68k_op_sne_8_al, 0xffff, 0x56f9, { 20, 20, 10, 10, 10, 10, 6}},
33471 {m68k_op_trapne_16, 0xffff, 0x56fa, {255, 255, 6, 6, 6, 6, 6}},
33472 {m68k_op_trapne_32, 0xffff, 0x56fb, {255, 255, 8, 8, 8, 8, 8}},
33473 {m68k_op_trapne, 0xffff, 0x56fc, {255, 255, 4, 4, 4, 4, 4}},
33474 {m68k_op_seq_8_pi7, 0xffff, 0x57df, { 12, 12, 10, 10, 10, 10, 6}},
33475 {m68k_op_seq_8_pd7, 0xffff, 0x57e7, { 14, 14, 11, 11, 11, 11, 6}},
33476 {m68k_op_seq_8_aw, 0xffff, 0x57f8, { 16, 16, 10, 10, 10, 10, 6}},
33477 {m68k_op_seq_8_al, 0xffff, 0x57f9, { 20, 20, 10, 10, 10, 10, 6}},
33478 {m68k_op_trapeq_16, 0xffff, 0x57fa, {255, 255, 6, 6, 6, 6, 6}},
33479 {m68k_op_trapeq_32, 0xffff, 0x57fb, {255, 255, 8, 8, 8, 8, 8}},
33480 {m68k_op_trapeq, 0xffff, 0x57fc, {255, 255, 4, 4, 4, 4, 4}},
33481 {m68k_op_svc_8_pi7, 0xffff, 0x58df, { 12, 12, 10, 10, 10, 10, 6}},
33482 {m68k_op_svc_8_pd7, 0xffff, 0x58e7, { 14, 14, 11, 11, 11, 11, 6}},
33483 {m68k_op_svc_8_aw, 0xffff, 0x58f8, { 16, 16, 10, 10, 10, 10, 6}},
33484 {m68k_op_svc_8_al, 0xffff, 0x58f9, { 20, 20, 10, 10, 10, 10, 6}},
33485 {m68k_op_trapvc_16, 0xffff, 0x58fa, {255, 255, 6, 6, 6, 6, 6}},
33486 {m68k_op_trapvc_32, 0xffff, 0x58fb, {255, 255, 8, 8, 8, 8, 8}},
33487 {m68k_op_trapvc, 0xffff, 0x58fc, {255, 255, 4, 4, 4, 4, 4}},
33488 {m68k_op_svs_8_pi7, 0xffff, 0x59df, { 12, 12, 10, 10, 10, 10, 6}},
33489 {m68k_op_svs_8_pd7, 0xffff, 0x59e7, { 14, 14, 11, 11, 11, 11, 6}},
33490 {m68k_op_svs_8_aw, 0xffff, 0x59f8, { 16, 16, 10, 10, 10, 10, 6}},
33491 {m68k_op_svs_8_al, 0xffff, 0x59f9, { 20, 20, 10, 10, 10, 10, 6}},
33492 {m68k_op_trapvs_16, 0xffff, 0x59fa, {255, 255, 6, 6, 6, 6, 6}},
33493 {m68k_op_trapvs_32, 0xffff, 0x59fb, {255, 255, 8, 8, 8, 8, 8}},
33494 {m68k_op_trapvs, 0xffff, 0x59fc, {255, 255, 4, 4, 4, 4, 4}},
33495 {m68k_op_spl_8_pi7, 0xffff, 0x5adf, { 12, 12, 10, 10, 10, 10, 6}},
33496 {m68k_op_spl_8_pd7, 0xffff, 0x5ae7, { 14, 14, 11, 11, 11, 11, 6}},
33497 {m68k_op_spl_8_aw, 0xffff, 0x5af8, { 16, 16, 10, 10, 10, 10, 6}},
33498 {m68k_op_spl_8_al, 0xffff, 0x5af9, { 20, 20, 10, 10, 10, 10, 6}},
33499 {m68k_op_trappl_16, 0xffff, 0x5afa, {255, 255, 6, 6, 6, 6, 6}},
33500 {m68k_op_trappl_32, 0xffff, 0x5afb, {255, 255, 8, 8, 8, 8, 8}},
33501 {m68k_op_trappl, 0xffff, 0x5afc, {255, 255, 4, 4, 4, 4, 4}},
33502 {m68k_op_smi_8_pi7, 0xffff, 0x5bdf, { 12, 12, 10, 10, 10, 10, 6}},
33503 {m68k_op_smi_8_pd7, 0xffff, 0x5be7, { 14, 14, 11, 11, 11, 11, 6}},
33504 {m68k_op_smi_8_aw, 0xffff, 0x5bf8, { 16, 16, 10, 10, 10, 10, 6}},
33505 {m68k_op_smi_8_al, 0xffff, 0x5bf9, { 20, 20, 10, 10, 10, 10, 6}},
33506 {m68k_op_trapmi_16, 0xffff, 0x5bfa, {255, 255, 6, 6, 6, 6, 6}},
33507 {m68k_op_trapmi_32, 0xffff, 0x5bfb, {255, 255, 8, 8, 8, 8, 8}},
33508 {m68k_op_trapmi, 0xffff, 0x5bfc, {255, 255, 4, 4, 4, 4, 4}},
33509 {m68k_op_sge_8_pi7, 0xffff, 0x5cdf, { 12, 12, 10, 10, 10, 10, 6}},
33510 {m68k_op_sge_8_pd7, 0xffff, 0x5ce7, { 14, 14, 11, 11, 11, 11, 6}},
33511 {m68k_op_sge_8_aw, 0xffff, 0x5cf8, { 16, 16, 10, 10, 10, 10, 6}},
33512 {m68k_op_sge_8_al, 0xffff, 0x5cf9, { 20, 20, 10, 10, 10, 10, 6}},
33513 {m68k_op_trapge_16, 0xffff, 0x5cfa, {255, 255, 6, 6, 6, 6, 6}},
33514 {m68k_op_trapge_32, 0xffff, 0x5cfb, {255, 255, 8, 8, 8, 8, 8}},
33515 {m68k_op_trapge, 0xffff, 0x5cfc, {255, 255, 4, 4, 4, 4, 4}},
33516 {m68k_op_slt_8_pi7, 0xffff, 0x5ddf, { 12, 12, 10, 10, 10, 10, 6}},
33517 {m68k_op_slt_8_pd7, 0xffff, 0x5de7, { 14, 14, 11, 11, 11, 11, 6}},
33518 {m68k_op_slt_8_aw, 0xffff, 0x5df8, { 16, 16, 10, 10, 10, 10, 6}},
33519 {m68k_op_slt_8_al, 0xffff, 0x5df9, { 20, 20, 10, 10, 10, 10, 6}},
33520 {m68k_op_traplt_16, 0xffff, 0x5dfa, {255, 255, 6, 6, 6, 6, 6}},
33521 {m68k_op_traplt_32, 0xffff, 0x5dfb, {255, 255, 8, 8, 8, 8, 8}},
33522 {m68k_op_traplt, 0xffff, 0x5dfc, {255, 255, 4, 4, 4, 4, 4}},
33523 {m68k_op_sgt_8_pi7, 0xffff, 0x5edf, { 12, 12, 10, 10, 10, 10, 6}},
33524 {m68k_op_sgt_8_pd7, 0xffff, 0x5ee7, { 14, 14, 11, 11, 11, 11, 6}},
33525 {m68k_op_sgt_8_aw, 0xffff, 0x5ef8, { 16, 16, 10, 10, 10, 10, 6}},
33526 {m68k_op_sgt_8_al, 0xffff, 0x5ef9, { 20, 20, 10, 10, 10, 10, 6}},
33527 {m68k_op_trapgt_16, 0xffff, 0x5efa, {255, 255, 6, 6, 6, 6, 6}},
33528 {m68k_op_trapgt_32, 0xffff, 0x5efb, {255, 255, 8, 8, 8, 8, 8}},
33529 {m68k_op_trapgt, 0xffff, 0x5efc, {255, 255, 4, 4, 4, 4, 4}},
33530 {m68k_op_sle_8_pi7, 0xffff, 0x5fdf, { 12, 12, 10, 10, 10, 10, 6}},
33531 {m68k_op_sle_8_pd7, 0xffff, 0x5fe7, { 14, 14, 11, 11, 11, 11, 6}},
33532 {m68k_op_sle_8_aw, 0xffff, 0x5ff8, { 16, 16, 10, 10, 10, 10, 6}},
33533 {m68k_op_sle_8_al, 0xffff, 0x5ff9, { 20, 20, 10, 10, 10, 10, 6}},
33534 {m68k_op_traple_16, 0xffff, 0x5ffa, {255, 255, 6, 6, 6, 6, 6}},
33535 {m68k_op_traple_32, 0xffff, 0x5ffb, {255, 255, 8, 8, 8, 8, 8}},
33536 {m68k_op_traple, 0xffff, 0x5ffc, {255, 255, 4, 4, 4, 4, 4}},
33537 {m68k_op_bra_16, 0xffff, 0x6000, { 10, 10, 10, 10, 10, 10, 10}},
33538 {m68k_op_bra_32, 0xffff, 0x60ff, { 10, 10, 10, 10, 10, 10, 10}},
33539 {m68k_op_bsr_16, 0xffff, 0x6100, { 18, 18, 7, 7, 7, 7, 7}},
33540 {m68k_op_bsr_32, 0xffff, 0x61ff, { 18, 18, 7, 7, 7, 7, 7}},
33541 {m68k_op_bhi_16, 0xffff, 0x6200, { 10, 10, 6, 6, 6, 6, 6}},
33542 {m68k_op_bhi_32, 0xffff, 0x62ff, { 10, 10, 6, 6, 6, 6, 6}},
33543 {m68k_op_bls_16, 0xffff, 0x6300, { 10, 10, 6, 6, 6, 6, 6}},
33544 {m68k_op_bls_32, 0xffff, 0x63ff, { 10, 10, 6, 6, 6, 6, 6}},
33545 {m68k_op_bcc_16, 0xffff, 0x6400, { 10, 10, 6, 6, 6, 6, 6}},
33546 {m68k_op_bcc_32, 0xffff, 0x64ff, { 10, 10, 6, 6, 6, 6, 6}},
33547 {m68k_op_bcs_16, 0xffff, 0x6500, { 10, 10, 6, 6, 6, 6, 6}},
33548 {m68k_op_bcs_32, 0xffff, 0x65ff, { 10, 10, 6, 6, 6, 6, 6}},
33549 {m68k_op_bne_16, 0xffff, 0x6600, { 10, 10, 6, 6, 6, 6, 6}},
33550 {m68k_op_bne_32, 0xffff, 0x66ff, { 10, 10, 6, 6, 6, 6, 6}},
33551 {m68k_op_beq_16, 0xffff, 0x6700, { 10, 10, 6, 6, 6, 6, 6}},
33552 {m68k_op_beq_32, 0xffff, 0x67ff, { 10, 10, 6, 6, 6, 6, 6}},
33553 {m68k_op_bvc_16, 0xffff, 0x6800, { 10, 10, 6, 6, 6, 6, 6}},
33554 {m68k_op_bvc_32, 0xffff, 0x68ff, { 10, 10, 6, 6, 6, 6, 6}},
33555 {m68k_op_bvs_16, 0xffff, 0x6900, { 10, 10, 6, 6, 6, 6, 6}},
33556 {m68k_op_bvs_32, 0xffff, 0x69ff, { 10, 10, 6, 6, 6, 6, 6}},
33557 {m68k_op_bpl_16, 0xffff, 0x6a00, { 10, 10, 6, 6, 6, 6, 6}},
33558 {m68k_op_bpl_32, 0xffff, 0x6aff, { 10, 10, 6, 6, 6, 6, 6}},
33559 {m68k_op_bmi_16, 0xffff, 0x6b00, { 10, 10, 6, 6, 6, 6, 6}},
33560 {m68k_op_bmi_32, 0xffff, 0x6bff, { 10, 10, 6, 6, 6, 6, 6}},
33561 {m68k_op_bge_16, 0xffff, 0x6c00, { 10, 10, 6, 6, 6, 6, 6}},
33562 {m68k_op_bge_32, 0xffff, 0x6cff, { 10, 10, 6, 6, 6, 6, 6}},
33563 {m68k_op_blt_16, 0xffff, 0x6d00, { 10, 10, 6, 6, 6, 6, 6}},
33564 {m68k_op_blt_32, 0xffff, 0x6dff, { 10, 10, 6, 6, 6, 6, 6}},
33565 {m68k_op_bgt_16, 0xffff, 0x6e00, { 10, 10, 6, 6, 6, 6, 6}},
33566 {m68k_op_bgt_32, 0xffff, 0x6eff, { 10, 10, 6, 6, 6, 6, 6}},
33567 {m68k_op_ble_16, 0xffff, 0x6f00, { 10, 10, 6, 6, 6, 6, 6}},
33568 {m68k_op_ble_32, 0xffff, 0x6fff, { 10, 10, 6, 6, 6, 6, 6}},
33569 {m68k_op_sbcd_8_mm_axy7, 0xffff, 0x8f0f, { 18, 18, 16, 16, 16, 16, 16}},
33570 {m68k_op_pack_16_mm_axy7, 0xffff, 0x8f4f, {255, 255, 13, 13, 13, 13, 13}},
33571 {m68k_op_unpk_16_mm_axy7, 0xffff, 0x8f8f, {255, 255, 13, 13, 13, 13, 13}},
33572 {m68k_op_subx_8_mm_axy7, 0xffff, 0x9f0f, { 18, 18, 12, 12, 12, 12, 12}},
33573 {m68k_op_cmpm_8_axy7, 0xffff, 0xbf0f, { 12, 12, 9, 9, 9, 9, 9}},
33574 {m68k_op_abcd_8_mm_axy7, 0xffff, 0xcf0f, { 18, 18, 16, 16, 16, 16, 16}},
33575 {m68k_op_addx_8_mm_axy7, 0xffff, 0xdf0f, { 18, 18, 12, 12, 12, 12, 12}},
33576 {m68k_op_asr_16_aw, 0xffff, 0xe0f8, { 16, 16, 9, 9, 9, 9, 5}},
33577 {m68k_op_asr_16_al, 0xffff, 0xe0f9, { 20, 20, 9, 9, 9, 9, 5}},
33578 {m68k_op_asl_16_aw, 0xffff, 0xe1f8, { 16, 16, 10, 10, 10, 10, 6}},
33579 {m68k_op_asl_16_al, 0xffff, 0xe1f9, { 20, 20, 10, 10, 10, 10, 6}},
33580 {m68k_op_lsr_16_aw, 0xffff, 0xe2f8, { 16, 16, 9, 9, 9, 9, 5}},
33581 {m68k_op_lsr_16_al, 0xffff, 0xe2f9, { 20, 20, 9, 9, 9, 9, 5}},
33582 {m68k_op_lsl_16_aw, 0xffff, 0xe3f8, { 16, 16, 9, 9, 9, 9, 5}},
33583 {m68k_op_lsl_16_al, 0xffff, 0xe3f9, { 20, 20, 9, 9, 9, 9, 5}},
33584 {m68k_op_roxr_16_aw, 0xffff, 0xe4f8, { 16, 16, 9, 9, 9, 9, 5}},
33585 {m68k_op_roxr_16_al, 0xffff, 0xe4f9, { 20, 20, 9, 9, 9, 9, 5}},
33586 {m68k_op_roxl_16_aw, 0xffff, 0xe5f8, { 16, 16, 9, 9, 9, 9, 5}},
33587 {m68k_op_roxl_16_al, 0xffff, 0xe5f9, { 20, 20, 9, 9, 9, 9, 5}},
33588 {m68k_op_ror_16_aw, 0xffff, 0xe6f8, { 16, 16, 11, 11, 11, 11, 7}},
33589 {m68k_op_ror_16_al, 0xffff, 0xe6f9, { 20, 20, 11, 11, 11, 11, 7}},
33590 {m68k_op_rol_16_aw, 0xffff, 0xe7f8, { 16, 16, 11, 11, 11, 11, 7}},
33591 {m68k_op_rol_16_al, 0xffff, 0xe7f9, { 20, 20, 11, 11, 11, 11, 7}},
33592 {m68k_op_bftst_32_aw, 0xffff, 0xe8f8, {255, 255, 17, 17, 17, 17, 13}},
33593 {m68k_op_bftst_32_al, 0xffff, 0xe8f9, {255, 255, 17, 17, 17, 17, 13}},
33594 {m68k_op_bftst_32_pcdi, 0xffff, 0xe8fa, {255, 255, 18, 18, 18, 18, 13}},
33595 {m68k_op_bftst_32_pcix, 0xffff, 0xe8fb, {255, 255, 20, 20, 20, 20, 13}},
33596 {m68k_op_bfextu_32_aw, 0xffff, 0xe9f8, {255, 255, 19, 19, 19, 19, 15}},
33597 {m68k_op_bfextu_32_al, 0xffff, 0xe9f9, {255, 255, 19, 19, 19, 19, 15}},
33598 {m68k_op_bfextu_32_pcdi, 0xffff, 0xe9fa, {255, 255, 20, 20, 20, 20, 15}},
33599 {m68k_op_bfextu_32_pcix, 0xffff, 0xe9fb, {255, 255, 22, 22, 22, 22, 15}},
33600 {m68k_op_bfchg_32_aw, 0xffff, 0xeaf8, {255, 255, 24, 24, 24, 24, 20}},
33601 {m68k_op_bfchg_32_al, 0xffff, 0xeaf9, {255, 255, 24, 24, 24, 24, 20}},
33602 {m68k_op_bfexts_32_aw, 0xffff, 0xebf8, {255, 255, 19, 19, 19, 19, 15}},
33603 {m68k_op_bfexts_32_al, 0xffff, 0xebf9, {255, 255, 19, 19, 19, 19, 15}},
33604 {m68k_op_bfexts_32_pcdi, 0xffff, 0xebfa, {255, 255, 20, 20, 20, 20, 15}},
33605 {m68k_op_bfexts_32_pcix, 0xffff, 0xebfb, {255, 255, 22, 22, 22, 22, 15}},
33606 {m68k_op_bfclr_32_aw, 0xffff, 0xecf8, {255, 255, 24, 24, 24, 24, 20}},
33607 {m68k_op_bfclr_32_al, 0xffff, 0xecf9, {255, 255, 24, 24, 24, 24, 20}},
33608 {m68k_op_bfffo_32_aw, 0xffff, 0xedf8, {255, 255, 32, 32, 32, 32, 28}},
33609 {m68k_op_bfffo_32_al, 0xffff, 0xedf9, {255, 255, 32, 32, 32, 32, 28}},
33610 {m68k_op_bfffo_32_pcdi, 0xffff, 0xedfa, {255, 255, 33, 33, 33, 33, 28}},
33611 {m68k_op_bfffo_32_pcix, 0xffff, 0xedfb, {255, 255, 35, 35, 35, 35, 28}},
33612 {m68k_op_bfset_32_aw, 0xffff, 0xeef8, {255, 255, 24, 24, 24, 24, 20}},
33613 {m68k_op_bfset_32_al, 0xffff, 0xeef9, {255, 255, 24, 24, 24, 24, 20}},
33614 {m68k_op_bfins_32_aw, 0xffff, 0xeff8, {255, 255, 21, 21, 21, 21, 17}},
33615 {m68k_op_bfins_32_al, 0xffff, 0xeff9, {255, 255, 21, 21, 21, 21, 17}},
33616 {NULL, 0, 0, {0, 0, 0, 0, 0}}
33617 };
33618
33619
33620 /* Build the opcode handler jump table */
33621
33622 static void m68ki_set_one(unsigned short opcode, const opcode_handler_struct *s)
33623 {
33624 for(int i=0; i<NUM_CPU_TYPES; i++)
33625 if(s->cycles[i] != 0xff) {
33626 m68ki_cycles[i][opcode] = s->cycles[i];
33627 m68ki_instruction_jump_table[i][opcode] = s->opcode_handler;
33628 }
33629 }
33630
33631 void m68ki_build_opcode_table(void)
33632 {
33633 const opcode_handler_struct *ostruct;
33634 int i;
33635 int j;
33636 int k;
33637
33638 for(i = 0; i < 0x10000; i++)
33639 {
33640 /* default to illegal */
33641 for(k=0;k<NUM_CPU_TYPES;k++)
33642 {
33643 m68ki_instruction_jump_table[k][i] = m68k_op_illegal;
33644 m68ki_cycles[k][i] = 0;
33645 }
33646 }
33647
33648 ostruct = m68k_opcode_handler_table;
33649 while(ostruct->mask != 0xff00)
33650 {
33651 for(i = 0;i < 0x10000;i++)
33652 {
33653 if((i & ostruct->mask) == ostruct->match)
33654 m68ki_set_one(i, ostruct);
33655 }
33656 ostruct++;
33657 }
33658 while(ostruct->mask == 0xff00)
33659 {
33660 for(i = 0;i <= 0xff;i++)
33661 m68ki_set_one(ostruct->match | i, ostruct);
33662 ostruct++;
33663 }
33664 while(ostruct->mask == 0xff20)
33665 {
33666 for(i = 0;i < 4;i++)
33667 {
33668 for(j = 0;j < 32;j++)
33669 {
33670 m68ki_set_one(ostruct->match | (i << 6) | j, ostruct);
33671 }
33672 }
33673 ostruct++;
33674 }
33675 while(ostruct->mask == 0xf1f8)
33676 {
33677 for(i = 0;i < 8;i++)
33678 {
33679 for(j = 0;j < 8;j++)
33680 m68ki_set_one(ostruct->match | (i << 9) | j, ostruct);
33681 }
33682 ostruct++;
33683 }
33684 while(ostruct->mask == 0xffd8)
33685 {
33686 for(i = 0;i < 2;i++)
33687 {
33688 for(j = 0;j < 8;j++)
33689 {
33690 m68ki_set_one(ostruct->match | (i << 5) | j, ostruct);
33691 }
33692 }
33693 ostruct++;
33694 }
33695 while(ostruct->mask == 0xfff0)
33696 {
33697 for(i = 0;i <= 0x0f;i++)
33698 m68ki_set_one(ostruct->match | i, ostruct);
33699 ostruct++;
33700 }
33701 while(ostruct->mask == 0xf1ff)
33702 {
33703 for(i = 0;i <= 0x07;i++)
33704 m68ki_set_one(ostruct->match | (i << 9), ostruct);
33705 ostruct++;
33706 }
33707 while(ostruct->mask == 0xfff8)
33708 {
33709 for(i = 0;i <= 0x07;i++)
33710 m68ki_set_one(ostruct->match | i, ostruct);
33711 ostruct++;
33712 }
33713 while(ostruct->mask == 0xffff)
33714 {
33715 m68ki_set_one(ostruct->match, ostruct);
33716 ostruct++;
33717 }
33718
33719 // if we fell all the way through with a non-zero mask, the opcode table wasn't built properly
33720 if (ostruct->mask != 0)
33721 {
33722 fatal_error("m68ki_build_opcode_table: unhandled opcode mask %x (match %x), m68k core will not function!\n", ostruct->mask, ostruct->match);
33723 }
33724 }
33725
33726
33727 /* ======================================================================== */
33728 /* ============================== END OF FILE ============================= */
33729 /* ======================================================================== */
33730
33731