|
|
1.1 root 1: #include "config.h"
2: #include "amiga.h"
3: #include "options.h"
4: #include <stdlib.h>
5: #include "memory.h"
6: #include "custom.h"
7: #include "newcpu.h"
8: #include "cputbl.h"
9: void op_c000(UWORD opcode)
10: {
11: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
12: ULONG dstreg = (opcode & 3584) >> 9;
13: {{ BYTE src = regs.d[srcreg];
14: { BYTE dst = regs.d[dstreg];
15: src &= dst;
16: regs.v = regs.c = 0;
17: regs.z = ((BYTE)(src)) == 0;
18: regs.n = ((BYTE)(src)) < 0;
19: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
20: }}}}
21: void op_c010(UWORD opcode)
22: {
23: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
24: ULONG dstreg = (opcode & 3584) >> 9;
25: {{ CPTR srca = regs.a[srcreg];
26: BYTE src = get_byte(srca);
27: { BYTE dst = regs.d[dstreg];
28: src &= dst;
29: regs.v = regs.c = 0;
30: regs.z = ((BYTE)(src)) == 0;
31: regs.n = ((BYTE)(src)) < 0;
32: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
33: }}}}
34: void op_c018(UWORD opcode)
35: {
36: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
37: ULONG dstreg = (opcode & 3584) >> 9;
38: {{ CPTR srca = regs.a[srcreg];
39: BYTE src = get_byte(srca);
40: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
41: { BYTE dst = regs.d[dstreg];
42: src &= dst;
43: regs.v = regs.c = 0;
44: regs.z = ((BYTE)(src)) == 0;
45: regs.n = ((BYTE)(src)) < 0;
46: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
47: }}}}}
48: void op_c020(UWORD opcode)
49: {
50: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
51: ULONG dstreg = (opcode & 3584) >> 9;
52: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
53: { CPTR srca = regs.a[srcreg];
54: BYTE src = get_byte(srca);
55: { BYTE dst = regs.d[dstreg];
56: src &= dst;
57: regs.v = regs.c = 0;
58: regs.z = ((BYTE)(src)) == 0;
59: regs.n = ((BYTE)(src)) < 0;
60: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
61: }}}}}
62: void op_c028(UWORD opcode)
63: {
64: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
65: ULONG dstreg = (opcode & 3584) >> 9;
66: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
67: BYTE src = get_byte(srca);
68: { BYTE dst = regs.d[dstreg];
69: src &= dst;
70: regs.v = regs.c = 0;
71: regs.z = ((BYTE)(src)) == 0;
72: regs.n = ((BYTE)(src)) < 0;
73: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
74: }}}}
75: void op_c030(UWORD opcode)
76: {
77: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
78: ULONG dstreg = (opcode & 3584) >> 9;
79: {{ CPTR srca = regs.a[srcreg];
80: UWORD srcdp = nextiword();
81: srca += (LONG)(BYTE)(srcdp & 0xFF);
82: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
83: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
84: srca += srcdpr;
85: { BYTE src = get_byte(srca);
86: { BYTE dst = regs.d[dstreg];
87: src &= dst;
88: regs.v = regs.c = 0;
89: regs.z = ((BYTE)(src)) == 0;
90: regs.n = ((BYTE)(src)) < 0;
91: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
92: }}}}}}
93: void op_c038(UWORD opcode)
94: {
95: ULONG dstreg = (opcode & 3584) >> 9;
96: {{ CPTR srca = (LONG)(WORD)nextiword();
97: BYTE src = get_byte(srca);
98: { BYTE dst = regs.d[dstreg];
99: src &= dst;
100: regs.v = regs.c = 0;
101: regs.z = ((BYTE)(src)) == 0;
102: regs.n = ((BYTE)(src)) < 0;
103: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
104: }}}}
105: void op_c039(UWORD opcode)
106: {
107: ULONG dstreg = (opcode & 3584) >> 9;
108: {{ CPTR srca = nextilong();
109: BYTE src = get_byte(srca);
110: { BYTE dst = regs.d[dstreg];
111: src &= dst;
112: regs.v = regs.c = 0;
113: regs.z = ((BYTE)(src)) == 0;
114: regs.n = ((BYTE)(src)) < 0;
115: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
116: }}}}
117: void op_c03a(UWORD opcode)
118: {
119: ULONG dstreg = (opcode & 3584) >> 9;
120: {{ CPTR srca = m68k_getpc();
121: srca += (LONG)(WORD)nextiword();
122: { BYTE src = get_byte(srca);
123: { BYTE dst = regs.d[dstreg];
124: src &= dst;
125: regs.v = regs.c = 0;
126: regs.z = ((BYTE)(src)) == 0;
127: regs.n = ((BYTE)(src)) < 0;
128: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
129: }}}}}
130: void op_c03b(UWORD opcode)
131: {
132: ULONG dstreg = (opcode & 3584) >> 9;
133: {{ CPTR srca = m68k_getpc();
134: UWORD srcdp = nextiword();
135: srca += (LONG)(BYTE)(srcdp & 0xFF);
136: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
137: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
138: srca += srcdpr;
139: { BYTE src = get_byte(srca);
140: { BYTE dst = regs.d[dstreg];
141: src &= dst;
142: regs.v = regs.c = 0;
143: regs.z = ((BYTE)(src)) == 0;
144: regs.n = ((BYTE)(src)) < 0;
145: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
146: }}}}}}
147: void op_c03c(UWORD opcode)
148: {
149: ULONG dstreg = (opcode & 3584) >> 9;
150: {{ BYTE src = nextiword();
151: { BYTE dst = regs.d[dstreg];
152: src &= dst;
153: regs.v = regs.c = 0;
154: regs.z = ((BYTE)(src)) == 0;
155: regs.n = ((BYTE)(src)) < 0;
156: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff;
157: }}}}
158: void op_c040(UWORD opcode)
159: {
160: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
161: ULONG dstreg = (opcode & 3584) >> 9;
162: {{ WORD src = regs.d[srcreg];
163: { WORD dst = regs.d[dstreg];
164: src &= dst;
165: regs.v = regs.c = 0;
166: regs.z = ((WORD)(src)) == 0;
167: regs.n = ((WORD)(src)) < 0;
168: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
169: }}}}
170: void op_c050(UWORD opcode)
171: {
172: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
173: ULONG dstreg = (opcode & 3584) >> 9;
174: {{ CPTR srca = regs.a[srcreg];
175: WORD src = get_word(srca);
176: { WORD dst = regs.d[dstreg];
177: src &= dst;
178: regs.v = regs.c = 0;
179: regs.z = ((WORD)(src)) == 0;
180: regs.n = ((WORD)(src)) < 0;
181: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
182: }}}}
183: void op_c058(UWORD opcode)
184: {
185: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
186: ULONG dstreg = (opcode & 3584) >> 9;
187: {{ CPTR srca = regs.a[srcreg];
188: WORD src = get_word(srca);
189: { regs.a[srcreg] += 2;
190: { WORD dst = regs.d[dstreg];
191: src &= dst;
192: regs.v = regs.c = 0;
193: regs.z = ((WORD)(src)) == 0;
194: regs.n = ((WORD)(src)) < 0;
195: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
196: }}}}}
197: void op_c060(UWORD opcode)
198: {
199: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
200: ULONG dstreg = (opcode & 3584) >> 9;
201: {{ regs.a[srcreg] -= 2;
202: { CPTR srca = regs.a[srcreg];
203: WORD src = get_word(srca);
204: { WORD dst = regs.d[dstreg];
205: src &= dst;
206: regs.v = regs.c = 0;
207: regs.z = ((WORD)(src)) == 0;
208: regs.n = ((WORD)(src)) < 0;
209: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
210: }}}}}
211: void op_c068(UWORD opcode)
212: {
213: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
214: ULONG dstreg = (opcode & 3584) >> 9;
215: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
216: WORD src = get_word(srca);
217: { WORD dst = regs.d[dstreg];
218: src &= dst;
219: regs.v = regs.c = 0;
220: regs.z = ((WORD)(src)) == 0;
221: regs.n = ((WORD)(src)) < 0;
222: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
223: }}}}
224: void op_c070(UWORD opcode)
225: {
226: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
227: ULONG dstreg = (opcode & 3584) >> 9;
228: {{ CPTR srca = regs.a[srcreg];
229: UWORD srcdp = nextiword();
230: srca += (LONG)(BYTE)(srcdp & 0xFF);
231: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
232: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
233: srca += srcdpr;
234: { WORD src = get_word(srca);
235: { WORD dst = regs.d[dstreg];
236: src &= dst;
237: regs.v = regs.c = 0;
238: regs.z = ((WORD)(src)) == 0;
239: regs.n = ((WORD)(src)) < 0;
240: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
241: }}}}}}
242: void op_c078(UWORD opcode)
243: {
244: ULONG dstreg = (opcode & 3584) >> 9;
245: {{ CPTR srca = (LONG)(WORD)nextiword();
246: WORD src = get_word(srca);
247: { WORD dst = regs.d[dstreg];
248: src &= dst;
249: regs.v = regs.c = 0;
250: regs.z = ((WORD)(src)) == 0;
251: regs.n = ((WORD)(src)) < 0;
252: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
253: }}}}
254: void op_c079(UWORD opcode)
255: {
256: ULONG dstreg = (opcode & 3584) >> 9;
257: {{ CPTR srca = nextilong();
258: WORD src = get_word(srca);
259: { WORD dst = regs.d[dstreg];
260: src &= dst;
261: regs.v = regs.c = 0;
262: regs.z = ((WORD)(src)) == 0;
263: regs.n = ((WORD)(src)) < 0;
264: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
265: }}}}
266: void op_c07a(UWORD opcode)
267: {
268: ULONG dstreg = (opcode & 3584) >> 9;
269: {{ CPTR srca = m68k_getpc();
270: srca += (LONG)(WORD)nextiword();
271: { WORD src = get_word(srca);
272: { WORD dst = regs.d[dstreg];
273: src &= dst;
274: regs.v = regs.c = 0;
275: regs.z = ((WORD)(src)) == 0;
276: regs.n = ((WORD)(src)) < 0;
277: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
278: }}}}}
279: void op_c07b(UWORD opcode)
280: {
281: ULONG dstreg = (opcode & 3584) >> 9;
282: {{ CPTR srca = m68k_getpc();
283: UWORD srcdp = nextiword();
284: srca += (LONG)(BYTE)(srcdp & 0xFF);
285: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
286: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
287: srca += srcdpr;
288: { WORD src = get_word(srca);
289: { WORD dst = regs.d[dstreg];
290: src &= dst;
291: regs.v = regs.c = 0;
292: regs.z = ((WORD)(src)) == 0;
293: regs.n = ((WORD)(src)) < 0;
294: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
295: }}}}}}
296: void op_c07c(UWORD opcode)
297: {
298: ULONG dstreg = (opcode & 3584) >> 9;
299: {{ WORD src = nextiword();
300: { WORD dst = regs.d[dstreg];
301: src &= dst;
302: regs.v = regs.c = 0;
303: regs.z = ((WORD)(src)) == 0;
304: regs.n = ((WORD)(src)) < 0;
305: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff;
306: }}}}
307: void op_c080(UWORD opcode)
308: {
309: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
310: ULONG dstreg = (opcode & 3584) >> 9;
311: {{ LONG src = regs.d[srcreg];
312: { LONG dst = regs.d[dstreg];
313: src &= dst;
314: regs.v = regs.c = 0;
315: regs.z = ((LONG)(src)) == 0;
316: regs.n = ((LONG)(src)) < 0;
317: regs.d[dstreg] = (src);
318: }}}}
319: void op_c090(UWORD opcode)
320: {
321: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
322: ULONG dstreg = (opcode & 3584) >> 9;
323: {{ CPTR srca = regs.a[srcreg];
324: LONG src = get_long(srca);
325: { LONG dst = regs.d[dstreg];
326: src &= dst;
327: regs.v = regs.c = 0;
328: regs.z = ((LONG)(src)) == 0;
329: regs.n = ((LONG)(src)) < 0;
330: regs.d[dstreg] = (src);
331: }}}}
332: void op_c098(UWORD opcode)
333: {
334: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
335: ULONG dstreg = (opcode & 3584) >> 9;
336: {{ CPTR srca = regs.a[srcreg];
337: LONG src = get_long(srca);
338: { regs.a[srcreg] += 4;
339: { LONG dst = regs.d[dstreg];
340: src &= dst;
341: regs.v = regs.c = 0;
342: regs.z = ((LONG)(src)) == 0;
343: regs.n = ((LONG)(src)) < 0;
344: regs.d[dstreg] = (src);
345: }}}}}
346: void op_c0a0(UWORD opcode)
347: {
348: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
349: ULONG dstreg = (opcode & 3584) >> 9;
350: {{ regs.a[srcreg] -= 4;
351: { CPTR srca = regs.a[srcreg];
352: LONG src = get_long(srca);
353: { LONG dst = regs.d[dstreg];
354: src &= dst;
355: regs.v = regs.c = 0;
356: regs.z = ((LONG)(src)) == 0;
357: regs.n = ((LONG)(src)) < 0;
358: regs.d[dstreg] = (src);
359: }}}}}
360: void op_c0a8(UWORD opcode)
361: {
362: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
363: ULONG dstreg = (opcode & 3584) >> 9;
364: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
365: LONG src = get_long(srca);
366: { LONG dst = regs.d[dstreg];
367: src &= dst;
368: regs.v = regs.c = 0;
369: regs.z = ((LONG)(src)) == 0;
370: regs.n = ((LONG)(src)) < 0;
371: regs.d[dstreg] = (src);
372: }}}}
373: void op_c0b0(UWORD opcode)
374: {
375: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
376: ULONG dstreg = (opcode & 3584) >> 9;
377: {{ CPTR srca = regs.a[srcreg];
378: UWORD srcdp = nextiword();
379: srca += (LONG)(BYTE)(srcdp & 0xFF);
380: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
381: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
382: srca += srcdpr;
383: { LONG src = get_long(srca);
384: { LONG dst = regs.d[dstreg];
385: src &= dst;
386: regs.v = regs.c = 0;
387: regs.z = ((LONG)(src)) == 0;
388: regs.n = ((LONG)(src)) < 0;
389: regs.d[dstreg] = (src);
390: }}}}}}
391: void op_c0b8(UWORD opcode)
392: {
393: ULONG dstreg = (opcode & 3584) >> 9;
394: {{ CPTR srca = (LONG)(WORD)nextiword();
395: LONG src = get_long(srca);
396: { LONG dst = regs.d[dstreg];
397: src &= dst;
398: regs.v = regs.c = 0;
399: regs.z = ((LONG)(src)) == 0;
400: regs.n = ((LONG)(src)) < 0;
401: regs.d[dstreg] = (src);
402: }}}}
403: void op_c0b9(UWORD opcode)
404: {
405: ULONG dstreg = (opcode & 3584) >> 9;
406: {{ CPTR srca = nextilong();
407: LONG src = get_long(srca);
408: { LONG dst = regs.d[dstreg];
409: src &= dst;
410: regs.v = regs.c = 0;
411: regs.z = ((LONG)(src)) == 0;
412: regs.n = ((LONG)(src)) < 0;
413: regs.d[dstreg] = (src);
414: }}}}
415: void op_c0ba(UWORD opcode)
416: {
417: ULONG dstreg = (opcode & 3584) >> 9;
418: {{ CPTR srca = m68k_getpc();
419: srca += (LONG)(WORD)nextiword();
420: { LONG src = get_long(srca);
421: { LONG dst = regs.d[dstreg];
422: src &= dst;
423: regs.v = regs.c = 0;
424: regs.z = ((LONG)(src)) == 0;
425: regs.n = ((LONG)(src)) < 0;
426: regs.d[dstreg] = (src);
427: }}}}}
428: void op_c0bb(UWORD opcode)
429: {
430: ULONG dstreg = (opcode & 3584) >> 9;
431: {{ CPTR srca = m68k_getpc();
432: UWORD srcdp = nextiword();
433: srca += (LONG)(BYTE)(srcdp & 0xFF);
434: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
435: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
436: srca += srcdpr;
437: { LONG src = get_long(srca);
438: { LONG dst = regs.d[dstreg];
439: src &= dst;
440: regs.v = regs.c = 0;
441: regs.z = ((LONG)(src)) == 0;
442: regs.n = ((LONG)(src)) < 0;
443: regs.d[dstreg] = (src);
444: }}}}}}
445: void op_c0bc(UWORD opcode)
446: {
447: ULONG dstreg = (opcode & 3584) >> 9;
448: {{ LONG src = nextilong();
449: { LONG dst = regs.d[dstreg];
450: src &= dst;
451: regs.v = regs.c = 0;
452: regs.z = ((LONG)(src)) == 0;
453: regs.n = ((LONG)(src)) < 0;
454: regs.d[dstreg] = (src);
455: }}}}
456: void op_c0c0(UWORD opcode)
457: {
458: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
459: ULONG dstreg = (opcode & 3584) >> 9;
460: {{ WORD src = regs.d[srcreg];
461: { WORD dst = regs.d[dstreg];
462: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
463: regs.v = regs.c = 0;
464: regs.z = ((LONG)(newv)) == 0;
465: regs.n = ((LONG)(newv)) < 0;
466: regs.d[dstreg] = (newv);
467: }}}}}
468: void op_c0d0(UWORD opcode)
469: {
470: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
471: ULONG dstreg = (opcode & 3584) >> 9;
472: {{ CPTR srca = regs.a[srcreg];
473: WORD src = get_word(srca);
474: { WORD dst = regs.d[dstreg];
475: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
476: regs.v = regs.c = 0;
477: regs.z = ((LONG)(newv)) == 0;
478: regs.n = ((LONG)(newv)) < 0;
479: regs.d[dstreg] = (newv);
480: }}}}}
481: void op_c0d8(UWORD opcode)
482: {
483: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
484: ULONG dstreg = (opcode & 3584) >> 9;
485: {{ CPTR srca = regs.a[srcreg];
486: WORD src = get_word(srca);
487: { regs.a[srcreg] += 2;
488: { WORD dst = regs.d[dstreg];
489: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
490: regs.v = regs.c = 0;
491: regs.z = ((LONG)(newv)) == 0;
492: regs.n = ((LONG)(newv)) < 0;
493: regs.d[dstreg] = (newv);
494: }}}}}}
495: void op_c0e0(UWORD opcode)
496: {
497: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
498: ULONG dstreg = (opcode & 3584) >> 9;
499: {{ regs.a[srcreg] -= 2;
500: { CPTR srca = regs.a[srcreg];
501: WORD src = get_word(srca);
502: { WORD dst = regs.d[dstreg];
503: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
504: regs.v = regs.c = 0;
505: regs.z = ((LONG)(newv)) == 0;
506: regs.n = ((LONG)(newv)) < 0;
507: regs.d[dstreg] = (newv);
508: }}}}}}
509: void op_c0e8(UWORD opcode)
510: {
511: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
512: ULONG dstreg = (opcode & 3584) >> 9;
513: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
514: WORD src = get_word(srca);
515: { WORD dst = regs.d[dstreg];
516: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
517: regs.v = regs.c = 0;
518: regs.z = ((LONG)(newv)) == 0;
519: regs.n = ((LONG)(newv)) < 0;
520: regs.d[dstreg] = (newv);
521: }}}}}
522: void op_c0f0(UWORD opcode)
523: {
524: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
525: ULONG dstreg = (opcode & 3584) >> 9;
526: {{ CPTR srca = regs.a[srcreg];
527: UWORD srcdp = nextiword();
528: srca += (LONG)(BYTE)(srcdp & 0xFF);
529: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
530: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
531: srca += srcdpr;
532: { WORD src = get_word(srca);
533: { WORD dst = regs.d[dstreg];
534: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
535: regs.v = regs.c = 0;
536: regs.z = ((LONG)(newv)) == 0;
537: regs.n = ((LONG)(newv)) < 0;
538: regs.d[dstreg] = (newv);
539: }}}}}}}
540: void op_c0f8(UWORD opcode)
541: {
542: ULONG dstreg = (opcode & 3584) >> 9;
543: {{ CPTR srca = (LONG)(WORD)nextiword();
544: WORD src = get_word(srca);
545: { WORD dst = regs.d[dstreg];
546: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
547: regs.v = regs.c = 0;
548: regs.z = ((LONG)(newv)) == 0;
549: regs.n = ((LONG)(newv)) < 0;
550: regs.d[dstreg] = (newv);
551: }}}}}
552: void op_c0f9(UWORD opcode)
553: {
554: ULONG dstreg = (opcode & 3584) >> 9;
555: {{ CPTR srca = nextilong();
556: WORD src = get_word(srca);
557: { WORD dst = regs.d[dstreg];
558: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
559: regs.v = regs.c = 0;
560: regs.z = ((LONG)(newv)) == 0;
561: regs.n = ((LONG)(newv)) < 0;
562: regs.d[dstreg] = (newv);
563: }}}}}
564: void op_c0fa(UWORD opcode)
565: {
566: ULONG dstreg = (opcode & 3584) >> 9;
567: {{ CPTR srca = m68k_getpc();
568: srca += (LONG)(WORD)nextiword();
569: { WORD src = get_word(srca);
570: { WORD dst = regs.d[dstreg];
571: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
572: regs.v = regs.c = 0;
573: regs.z = ((LONG)(newv)) == 0;
574: regs.n = ((LONG)(newv)) < 0;
575: regs.d[dstreg] = (newv);
576: }}}}}}
577: void op_c0fb(UWORD opcode)
578: {
579: ULONG dstreg = (opcode & 3584) >> 9;
580: {{ CPTR srca = m68k_getpc();
581: UWORD srcdp = nextiword();
582: srca += (LONG)(BYTE)(srcdp & 0xFF);
583: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
584: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
585: srca += srcdpr;
586: { WORD src = get_word(srca);
587: { WORD dst = regs.d[dstreg];
588: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
589: regs.v = regs.c = 0;
590: regs.z = ((LONG)(newv)) == 0;
591: regs.n = ((LONG)(newv)) < 0;
592: regs.d[dstreg] = (newv);
593: }}}}}}}
594: void op_c0fc(UWORD opcode)
595: {
596: ULONG dstreg = (opcode & 3584) >> 9;
597: {{ WORD src = nextiword();
598: { WORD dst = regs.d[dstreg];
599: { ULONG newv = (ULONG)(UWORD)dst * (ULONG)(UWORD)src;
600: regs.v = regs.c = 0;
601: regs.z = ((LONG)(newv)) == 0;
602: regs.n = ((LONG)(newv)) < 0;
603: regs.d[dstreg] = (newv);
604: }}}}}
605: void op_c100(UWORD opcode)
606: {
607: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
608: ULONG dstreg = (opcode & 3584) >> 9;
609: {{ BYTE src = regs.d[srcreg];
610: { BYTE dst = regs.d[dstreg];
611: { UWORD newv = src + dst + regs.x;
612: if ((newv & 0xF) > 9) newv+=6;
613: regs.c = regs.x = (newv & 0x1F0) > 0x90;
614: if (regs.c) newv += 0x60;
615: if (newv != 0) regs.z = 0;
616: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
617: }}}}}
618: void op_c108(UWORD opcode)
619: {
620: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
621: ULONG dstreg = (opcode & 3584) >> 9;
622: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
623: { CPTR srca = regs.a[srcreg];
624: BYTE src = get_byte(srca);
625: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
626: { CPTR dsta = regs.a[dstreg];
627: BYTE dst = get_byte(dsta);
628: { UWORD newv = src + dst + regs.x;
629: if ((newv & 0xF) > 9) newv+=6;
630: regs.c = regs.x = (newv & 0x1F0) > 0x90;
631: if (regs.c) newv += 0x60;
632: if (newv != 0) regs.z = 0;
633: put_byte(dsta,newv);
634: }}}}}}}
635: void op_c110(UWORD opcode)
636: {
637: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
638: ULONG dstreg = (opcode & 7) >> 0;
639: {{ BYTE src = regs.d[srcreg];
640: { CPTR dsta = regs.a[dstreg];
641: BYTE dst = get_byte(dsta);
642: src &= dst;
643: regs.v = regs.c = 0;
644: regs.z = ((BYTE)(src)) == 0;
645: regs.n = ((BYTE)(src)) < 0;
646: put_byte(dsta,src);
647: }}}}
648: void op_c118(UWORD opcode)
649: {
650: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
651: ULONG dstreg = (opcode & 7) >> 0;
652: {{ BYTE src = regs.d[srcreg];
653: { CPTR dsta = regs.a[dstreg];
654: BYTE dst = get_byte(dsta);
655: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
656: src &= dst;
657: regs.v = regs.c = 0;
658: regs.z = ((BYTE)(src)) == 0;
659: regs.n = ((BYTE)(src)) < 0;
660: put_byte(dsta,src);
661: }}}}}
662: void op_c120(UWORD opcode)
663: {
664: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
665: ULONG dstreg = (opcode & 7) >> 0;
666: {{ BYTE src = regs.d[srcreg];
667: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
668: { CPTR dsta = regs.a[dstreg];
669: BYTE dst = get_byte(dsta);
670: src &= dst;
671: regs.v = regs.c = 0;
672: regs.z = ((BYTE)(src)) == 0;
673: regs.n = ((BYTE)(src)) < 0;
674: put_byte(dsta,src);
675: }}}}}
676: void op_c128(UWORD opcode)
677: {
678: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
679: ULONG dstreg = (opcode & 7) >> 0;
680: {{ BYTE src = regs.d[srcreg];
681: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
682: BYTE dst = get_byte(dsta);
683: src &= dst;
684: regs.v = regs.c = 0;
685: regs.z = ((BYTE)(src)) == 0;
686: regs.n = ((BYTE)(src)) < 0;
687: put_byte(dsta,src);
688: }}}}
689: void op_c130(UWORD opcode)
690: {
691: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
692: ULONG dstreg = (opcode & 7) >> 0;
693: {{ BYTE src = regs.d[srcreg];
694: { CPTR dsta = regs.a[dstreg];
695: UWORD dstdp = nextiword();
696: dsta += (LONG)(BYTE)(dstdp & 0xFF);
697: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
698: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
699: dsta += dstdpr;
700: { BYTE dst = get_byte(dsta);
701: src &= dst;
702: regs.v = regs.c = 0;
703: regs.z = ((BYTE)(src)) == 0;
704: regs.n = ((BYTE)(src)) < 0;
705: put_byte(dsta,src);
706: }}}}}}
707: void op_c138(UWORD opcode)
708: {
709: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
710: {{ BYTE src = regs.d[srcreg];
711: { CPTR dsta = (LONG)(WORD)nextiword();
712: BYTE dst = get_byte(dsta);
713: src &= dst;
714: regs.v = regs.c = 0;
715: regs.z = ((BYTE)(src)) == 0;
716: regs.n = ((BYTE)(src)) < 0;
717: put_byte(dsta,src);
718: }}}}
719: void op_c139(UWORD opcode)
720: {
721: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
722: {{ BYTE src = regs.d[srcreg];
723: { CPTR dsta = nextilong();
724: BYTE dst = get_byte(dsta);
725: src &= dst;
726: regs.v = regs.c = 0;
727: regs.z = ((BYTE)(src)) == 0;
728: regs.n = ((BYTE)(src)) < 0;
729: put_byte(dsta,src);
730: }}}}
731: void op_c140(UWORD opcode)
732: {
733: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
734: ULONG dstreg = (opcode & 7) >> 0;
735: {{ LONG src = regs.d[srcreg];
736: { LONG dst = regs.d[dstreg];
737: regs.d[srcreg] = (dst);
738: regs.d[dstreg] = (src);
739: }}}}
740: void op_c148(UWORD opcode)
741: {
742: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
743: ULONG dstreg = (opcode & 7) >> 0;
744: {{ LONG src = regs.a[srcreg];
745: { LONG dst = regs.a[dstreg];
746: regs.a[srcreg] = (dst);
747: regs.a[dstreg] = (src);
748: }}}}
749: void op_c150(UWORD opcode)
750: {
751: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
752: ULONG dstreg = (opcode & 7) >> 0;
753: {{ WORD src = regs.d[srcreg];
754: { CPTR dsta = regs.a[dstreg];
755: WORD dst = get_word(dsta);
756: src &= dst;
757: regs.v = regs.c = 0;
758: regs.z = ((WORD)(src)) == 0;
759: regs.n = ((WORD)(src)) < 0;
760: put_word(dsta,src);
761: }}}}
762: void op_c158(UWORD opcode)
763: {
764: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
765: ULONG dstreg = (opcode & 7) >> 0;
766: {{ WORD src = regs.d[srcreg];
767: { CPTR dsta = regs.a[dstreg];
768: WORD dst = get_word(dsta);
769: { regs.a[dstreg] += 2;
770: src &= dst;
771: regs.v = regs.c = 0;
772: regs.z = ((WORD)(src)) == 0;
773: regs.n = ((WORD)(src)) < 0;
774: put_word(dsta,src);
775: }}}}}
776: void op_c160(UWORD opcode)
777: {
778: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
779: ULONG dstreg = (opcode & 7) >> 0;
780: {{ WORD src = regs.d[srcreg];
781: { regs.a[dstreg] -= 2;
782: { CPTR dsta = regs.a[dstreg];
783: WORD dst = get_word(dsta);
784: src &= dst;
785: regs.v = regs.c = 0;
786: regs.z = ((WORD)(src)) == 0;
787: regs.n = ((WORD)(src)) < 0;
788: put_word(dsta,src);
789: }}}}}
790: void op_c168(UWORD opcode)
791: {
792: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
793: ULONG dstreg = (opcode & 7) >> 0;
794: {{ WORD src = regs.d[srcreg];
795: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
796: WORD dst = get_word(dsta);
797: src &= dst;
798: regs.v = regs.c = 0;
799: regs.z = ((WORD)(src)) == 0;
800: regs.n = ((WORD)(src)) < 0;
801: put_word(dsta,src);
802: }}}}
803: void op_c170(UWORD opcode)
804: {
805: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
806: ULONG dstreg = (opcode & 7) >> 0;
807: {{ WORD src = regs.d[srcreg];
808: { CPTR dsta = regs.a[dstreg];
809: UWORD dstdp = nextiword();
810: dsta += (LONG)(BYTE)(dstdp & 0xFF);
811: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
812: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
813: dsta += dstdpr;
814: { WORD dst = get_word(dsta);
815: src &= dst;
816: regs.v = regs.c = 0;
817: regs.z = ((WORD)(src)) == 0;
818: regs.n = ((WORD)(src)) < 0;
819: put_word(dsta,src);
820: }}}}}}
821: void op_c178(UWORD opcode)
822: {
823: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
824: {{ WORD src = regs.d[srcreg];
825: { CPTR dsta = (LONG)(WORD)nextiword();
826: WORD dst = get_word(dsta);
827: src &= dst;
828: regs.v = regs.c = 0;
829: regs.z = ((WORD)(src)) == 0;
830: regs.n = ((WORD)(src)) < 0;
831: put_word(dsta,src);
832: }}}}
833: void op_c179(UWORD opcode)
834: {
835: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
836: {{ WORD src = regs.d[srcreg];
837: { CPTR dsta = nextilong();
838: WORD dst = get_word(dsta);
839: src &= dst;
840: regs.v = regs.c = 0;
841: regs.z = ((WORD)(src)) == 0;
842: regs.n = ((WORD)(src)) < 0;
843: put_word(dsta,src);
844: }}}}
845: void op_c188(UWORD opcode)
846: {
847: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
848: ULONG dstreg = (opcode & 7) >> 0;
849: {{ LONG src = regs.d[srcreg];
850: { LONG dst = regs.a[dstreg];
851: regs.d[srcreg] = (dst);
852: regs.a[dstreg] = (src);
853: }}}}
854: void op_c190(UWORD opcode)
855: {
856: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
857: ULONG dstreg = (opcode & 7) >> 0;
858: {{ LONG src = regs.d[srcreg];
859: { CPTR dsta = regs.a[dstreg];
860: LONG dst = get_long(dsta);
861: src &= dst;
862: regs.v = regs.c = 0;
863: regs.z = ((LONG)(src)) == 0;
864: regs.n = ((LONG)(src)) < 0;
865: put_long(dsta,src);
866: }}}}
867: void op_c198(UWORD opcode)
868: {
869: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
870: ULONG dstreg = (opcode & 7) >> 0;
871: {{ LONG src = regs.d[srcreg];
872: { CPTR dsta = regs.a[dstreg];
873: LONG dst = get_long(dsta);
874: { regs.a[dstreg] += 4;
875: src &= dst;
876: regs.v = regs.c = 0;
877: regs.z = ((LONG)(src)) == 0;
878: regs.n = ((LONG)(src)) < 0;
879: put_long(dsta,src);
880: }}}}}
881: void op_c1a0(UWORD opcode)
882: {
883: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
884: ULONG dstreg = (opcode & 7) >> 0;
885: {{ LONG src = regs.d[srcreg];
886: { regs.a[dstreg] -= 4;
887: { CPTR dsta = regs.a[dstreg];
888: LONG dst = get_long(dsta);
889: src &= dst;
890: regs.v = regs.c = 0;
891: regs.z = ((LONG)(src)) == 0;
892: regs.n = ((LONG)(src)) < 0;
893: put_long(dsta,src);
894: }}}}}
895: void op_c1a8(UWORD opcode)
896: {
897: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
898: ULONG dstreg = (opcode & 7) >> 0;
899: {{ LONG src = regs.d[srcreg];
900: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
901: LONG dst = get_long(dsta);
902: src &= dst;
903: regs.v = regs.c = 0;
904: regs.z = ((LONG)(src)) == 0;
905: regs.n = ((LONG)(src)) < 0;
906: put_long(dsta,src);
907: }}}}
908: void op_c1b0(UWORD opcode)
909: {
910: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
911: ULONG dstreg = (opcode & 7) >> 0;
912: {{ LONG src = regs.d[srcreg];
913: { CPTR dsta = regs.a[dstreg];
914: UWORD dstdp = nextiword();
915: dsta += (LONG)(BYTE)(dstdp & 0xFF);
916: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
917: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
918: dsta += dstdpr;
919: { LONG dst = get_long(dsta);
920: src &= dst;
921: regs.v = regs.c = 0;
922: regs.z = ((LONG)(src)) == 0;
923: regs.n = ((LONG)(src)) < 0;
924: put_long(dsta,src);
925: }}}}}}
926: void op_c1b8(UWORD opcode)
927: {
928: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
929: {{ LONG src = regs.d[srcreg];
930: { CPTR dsta = (LONG)(WORD)nextiword();
931: LONG dst = get_long(dsta);
932: src &= dst;
933: regs.v = regs.c = 0;
934: regs.z = ((LONG)(src)) == 0;
935: regs.n = ((LONG)(src)) < 0;
936: put_long(dsta,src);
937: }}}}
938: void op_c1b9(UWORD opcode)
939: {
940: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
941: {{ LONG src = regs.d[srcreg];
942: { CPTR dsta = nextilong();
943: LONG dst = get_long(dsta);
944: src &= dst;
945: regs.v = regs.c = 0;
946: regs.z = ((LONG)(src)) == 0;
947: regs.n = ((LONG)(src)) < 0;
948: put_long(dsta,src);
949: }}}}
950: void op_c1c0(UWORD opcode)
951: {
952: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
953: ULONG dstreg = (opcode & 3584) >> 9;
954: {{ WORD src = regs.d[srcreg];
955: { WORD dst = regs.d[dstreg];
956: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
957: regs.v = regs.c = 0;
958: regs.z = ((LONG)(newv)) == 0;
959: regs.n = ((LONG)(newv)) < 0;
960: regs.d[dstreg] = (newv);
961: }}}}}
962: void op_c1d0(UWORD opcode)
963: {
964: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
965: ULONG dstreg = (opcode & 3584) >> 9;
966: {{ CPTR srca = regs.a[srcreg];
967: WORD src = get_word(srca);
968: { WORD dst = regs.d[dstreg];
969: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
970: regs.v = regs.c = 0;
971: regs.z = ((LONG)(newv)) == 0;
972: regs.n = ((LONG)(newv)) < 0;
973: regs.d[dstreg] = (newv);
974: }}}}}
975: void op_c1d8(UWORD opcode)
976: {
977: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
978: ULONG dstreg = (opcode & 3584) >> 9;
979: {{ CPTR srca = regs.a[srcreg];
980: WORD src = get_word(srca);
981: { regs.a[srcreg] += 2;
982: { WORD dst = regs.d[dstreg];
983: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
984: regs.v = regs.c = 0;
985: regs.z = ((LONG)(newv)) == 0;
986: regs.n = ((LONG)(newv)) < 0;
987: regs.d[dstreg] = (newv);
988: }}}}}}
989: void op_c1e0(UWORD opcode)
990: {
991: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
992: ULONG dstreg = (opcode & 3584) >> 9;
993: {{ regs.a[srcreg] -= 2;
994: { CPTR srca = regs.a[srcreg];
995: WORD src = get_word(srca);
996: { WORD dst = regs.d[dstreg];
997: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
998: regs.v = regs.c = 0;
999: regs.z = ((LONG)(newv)) == 0;
1000: regs.n = ((LONG)(newv)) < 0;
1001: regs.d[dstreg] = (newv);
1002: }}}}}}
1003: void op_c1e8(UWORD opcode)
1004: {
1005: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1006: ULONG dstreg = (opcode & 3584) >> 9;
1007: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1008: WORD src = get_word(srca);
1009: { WORD dst = regs.d[dstreg];
1010: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
1011: regs.v = regs.c = 0;
1012: regs.z = ((LONG)(newv)) == 0;
1013: regs.n = ((LONG)(newv)) < 0;
1014: regs.d[dstreg] = (newv);
1015: }}}}}
1016: void op_c1f0(UWORD opcode)
1017: {
1018: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1019: ULONG dstreg = (opcode & 3584) >> 9;
1020: {{ CPTR srca = regs.a[srcreg];
1021: UWORD srcdp = nextiword();
1022: srca += (LONG)(BYTE)(srcdp & 0xFF);
1023: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1024: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1025: srca += srcdpr;
1026: { WORD src = get_word(srca);
1027: { WORD dst = regs.d[dstreg];
1028: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
1029: regs.v = regs.c = 0;
1030: regs.z = ((LONG)(newv)) == 0;
1031: regs.n = ((LONG)(newv)) < 0;
1032: regs.d[dstreg] = (newv);
1033: }}}}}}}
1034: void op_c1f8(UWORD opcode)
1035: {
1036: ULONG dstreg = (opcode & 3584) >> 9;
1037: {{ CPTR srca = (LONG)(WORD)nextiword();
1038: WORD src = get_word(srca);
1039: { WORD dst = regs.d[dstreg];
1040: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
1041: regs.v = regs.c = 0;
1042: regs.z = ((LONG)(newv)) == 0;
1043: regs.n = ((LONG)(newv)) < 0;
1044: regs.d[dstreg] = (newv);
1045: }}}}}
1046: void op_c1f9(UWORD opcode)
1047: {
1048: ULONG dstreg = (opcode & 3584) >> 9;
1049: {{ CPTR srca = nextilong();
1050: WORD src = get_word(srca);
1051: { WORD dst = regs.d[dstreg];
1052: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
1053: regs.v = regs.c = 0;
1054: regs.z = ((LONG)(newv)) == 0;
1055: regs.n = ((LONG)(newv)) < 0;
1056: regs.d[dstreg] = (newv);
1057: }}}}}
1058: void op_c1fa(UWORD opcode)
1059: {
1060: ULONG dstreg = (opcode & 3584) >> 9;
1061: {{ CPTR srca = m68k_getpc();
1062: srca += (LONG)(WORD)nextiword();
1063: { WORD src = get_word(srca);
1064: { WORD dst = regs.d[dstreg];
1065: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
1066: regs.v = regs.c = 0;
1067: regs.z = ((LONG)(newv)) == 0;
1068: regs.n = ((LONG)(newv)) < 0;
1069: regs.d[dstreg] = (newv);
1070: }}}}}}
1071: void op_c1fb(UWORD opcode)
1072: {
1073: ULONG dstreg = (opcode & 3584) >> 9;
1074: {{ CPTR srca = m68k_getpc();
1075: UWORD srcdp = nextiword();
1076: srca += (LONG)(BYTE)(srcdp & 0xFF);
1077: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1078: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1079: srca += srcdpr;
1080: { WORD src = get_word(srca);
1081: { WORD dst = regs.d[dstreg];
1082: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
1083: regs.v = regs.c = 0;
1084: regs.z = ((LONG)(newv)) == 0;
1085: regs.n = ((LONG)(newv)) < 0;
1086: regs.d[dstreg] = (newv);
1087: }}}}}}}
1088: void op_c1fc(UWORD opcode)
1089: {
1090: ULONG dstreg = (opcode & 3584) >> 9;
1091: {{ WORD src = nextiword();
1092: { WORD dst = regs.d[dstreg];
1093: { ULONG newv = (LONG)(WORD)dst * (LONG)(WORD)src;
1094: regs.v = regs.c = 0;
1095: regs.z = ((LONG)(newv)) == 0;
1096: regs.n = ((LONG)(newv)) < 0;
1097: regs.d[dstreg] = (newv);
1098: }}}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.