|
|
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_5000(UWORD opcode)
10: {
11: ULONG srcreg = 8;
12: ULONG dstreg = (opcode & 7) >> 0;
13: {{ ULONG src = srcreg;
14: { BYTE dst = regs.d[dstreg];
15: { ULONG newv = dst + src;
16: { bool flgs = ((BYTE)(src)) < 0;
17: bool flgo = ((BYTE)(dst)) < 0;
18: bool flgn = ((BYTE)(newv)) < 0;
19: regs.z = ((BYTE)(newv)) == 0;
20: regs.v = (flgs == flgo) && (flgn != flgo);
21: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
22: regs.n = flgn != 0;
23: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
24: }}}}}}
25: void op_5010(UWORD opcode)
26: {
27: ULONG srcreg = 8;
28: ULONG dstreg = (opcode & 7) >> 0;
29: {{ ULONG src = srcreg;
30: { CPTR dsta = regs.a[dstreg];
31: BYTE dst = get_byte(dsta);
32: { ULONG newv = dst + src;
33: { bool flgs = ((BYTE)(src)) < 0;
34: bool flgo = ((BYTE)(dst)) < 0;
35: bool flgn = ((BYTE)(newv)) < 0;
36: regs.z = ((BYTE)(newv)) == 0;
37: regs.v = (flgs == flgo) && (flgn != flgo);
38: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
39: regs.n = flgn != 0;
40: put_byte(dsta,newv);
41: }}}}}}
42: void op_5018(UWORD opcode)
43: {
44: ULONG srcreg = 8;
45: ULONG dstreg = (opcode & 7) >> 0;
46: {{ ULONG src = srcreg;
47: { CPTR dsta = regs.a[dstreg];
48: BYTE dst = get_byte(dsta);
49: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
50: { ULONG newv = dst + src;
51: { bool flgs = ((BYTE)(src)) < 0;
52: bool flgo = ((BYTE)(dst)) < 0;
53: bool flgn = ((BYTE)(newv)) < 0;
54: regs.z = ((BYTE)(newv)) == 0;
55: regs.v = (flgs == flgo) && (flgn != flgo);
56: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
57: regs.n = flgn != 0;
58: put_byte(dsta,newv);
59: }}}}}}}
60: void op_5020(UWORD opcode)
61: {
62: ULONG srcreg = 8;
63: ULONG dstreg = (opcode & 7) >> 0;
64: {{ ULONG src = srcreg;
65: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
66: { CPTR dsta = regs.a[dstreg];
67: BYTE dst = get_byte(dsta);
68: { ULONG newv = dst + src;
69: { bool flgs = ((BYTE)(src)) < 0;
70: bool flgo = ((BYTE)(dst)) < 0;
71: bool flgn = ((BYTE)(newv)) < 0;
72: regs.z = ((BYTE)(newv)) == 0;
73: regs.v = (flgs == flgo) && (flgn != flgo);
74: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
75: regs.n = flgn != 0;
76: put_byte(dsta,newv);
77: }}}}}}}
78: void op_5028(UWORD opcode)
79: {
80: ULONG srcreg = 8;
81: ULONG dstreg = (opcode & 7) >> 0;
82: {{ ULONG src = srcreg;
83: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
84: BYTE dst = get_byte(dsta);
85: { ULONG newv = dst + src;
86: { bool flgs = ((BYTE)(src)) < 0;
87: bool flgo = ((BYTE)(dst)) < 0;
88: bool flgn = ((BYTE)(newv)) < 0;
89: regs.z = ((BYTE)(newv)) == 0;
90: regs.v = (flgs == flgo) && (flgn != flgo);
91: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
92: regs.n = flgn != 0;
93: put_byte(dsta,newv);
94: }}}}}}
95: void op_5030(UWORD opcode)
96: {
97: ULONG srcreg = 8;
98: ULONG dstreg = (opcode & 7) >> 0;
99: {{ ULONG src = srcreg;
100: { CPTR dsta = regs.a[dstreg];
101: UWORD dstdp = nextiword();
102: dsta += (LONG)(BYTE)(dstdp & 0xFF);
103: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
104: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
105: dsta += dstdpr;
106: { BYTE dst = get_byte(dsta);
107: { ULONG newv = dst + src;
108: { bool flgs = ((BYTE)(src)) < 0;
109: bool flgo = ((BYTE)(dst)) < 0;
110: bool flgn = ((BYTE)(newv)) < 0;
111: regs.z = ((BYTE)(newv)) == 0;
112: regs.v = (flgs == flgo) && (flgn != flgo);
113: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
114: regs.n = flgn != 0;
115: put_byte(dsta,newv);
116: }}}}}}}}
117: void op_5038(UWORD opcode)
118: {
119: ULONG srcreg = 8;
120: {{ ULONG src = srcreg;
121: { CPTR dsta = (LONG)(WORD)nextiword();
122: BYTE dst = get_byte(dsta);
123: { ULONG newv = dst + src;
124: { bool flgs = ((BYTE)(src)) < 0;
125: bool flgo = ((BYTE)(dst)) < 0;
126: bool flgn = ((BYTE)(newv)) < 0;
127: regs.z = ((BYTE)(newv)) == 0;
128: regs.v = (flgs == flgo) && (flgn != flgo);
129: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
130: regs.n = flgn != 0;
131: put_byte(dsta,newv);
132: }}}}}}
133: void op_5039(UWORD opcode)
134: {
135: ULONG srcreg = 8;
136: {{ ULONG src = srcreg;
137: { CPTR dsta = nextilong();
138: BYTE dst = get_byte(dsta);
139: { ULONG newv = dst + src;
140: { bool flgs = ((BYTE)(src)) < 0;
141: bool flgo = ((BYTE)(dst)) < 0;
142: bool flgn = ((BYTE)(newv)) < 0;
143: regs.z = ((BYTE)(newv)) == 0;
144: regs.v = (flgs == flgo) && (flgn != flgo);
145: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
146: regs.n = flgn != 0;
147: put_byte(dsta,newv);
148: }}}}}}
149: void op_5040(UWORD opcode)
150: {
151: ULONG srcreg = 8;
152: ULONG dstreg = (opcode & 7) >> 0;
153: {{ ULONG src = srcreg;
154: { WORD dst = regs.d[dstreg];
155: { ULONG newv = dst + src;
156: { bool flgs = ((WORD)(src)) < 0;
157: bool flgo = ((WORD)(dst)) < 0;
158: bool flgn = ((WORD)(newv)) < 0;
159: regs.z = ((WORD)(newv)) == 0;
160: regs.v = (flgs == flgo) && (flgn != flgo);
161: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
162: regs.n = flgn != 0;
163: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
164: }}}}}}
165: void op_5048(UWORD opcode)
166: {
167: ULONG srcreg = 8;
168: ULONG dstreg = (opcode & 7) >> 0;
169: {{ ULONG src = srcreg;
170: { LONG dst = regs.a[dstreg];
171: { ULONG newv = dst + src;
172: regs.a[dstreg] = (newv);
173: }}}}}
174: void op_5050(UWORD opcode)
175: {
176: ULONG srcreg = 8;
177: ULONG dstreg = (opcode & 7) >> 0;
178: {{ ULONG src = srcreg;
179: { CPTR dsta = regs.a[dstreg];
180: WORD dst = get_word(dsta);
181: { ULONG newv = dst + src;
182: { bool flgs = ((WORD)(src)) < 0;
183: bool flgo = ((WORD)(dst)) < 0;
184: bool flgn = ((WORD)(newv)) < 0;
185: regs.z = ((WORD)(newv)) == 0;
186: regs.v = (flgs == flgo) && (flgn != flgo);
187: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
188: regs.n = flgn != 0;
189: put_word(dsta,newv);
190: }}}}}}
191: void op_5058(UWORD opcode)
192: {
193: ULONG srcreg = 8;
194: ULONG dstreg = (opcode & 7) >> 0;
195: {{ ULONG src = srcreg;
196: { CPTR dsta = regs.a[dstreg];
197: WORD dst = get_word(dsta);
198: { regs.a[dstreg] += 2;
199: { ULONG newv = dst + src;
200: { bool flgs = ((WORD)(src)) < 0;
201: bool flgo = ((WORD)(dst)) < 0;
202: bool flgn = ((WORD)(newv)) < 0;
203: regs.z = ((WORD)(newv)) == 0;
204: regs.v = (flgs == flgo) && (flgn != flgo);
205: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
206: regs.n = flgn != 0;
207: put_word(dsta,newv);
208: }}}}}}}
209: void op_5060(UWORD opcode)
210: {
211: ULONG srcreg = 8;
212: ULONG dstreg = (opcode & 7) >> 0;
213: {{ ULONG src = srcreg;
214: { regs.a[dstreg] -= 2;
215: { CPTR dsta = regs.a[dstreg];
216: WORD dst = get_word(dsta);
217: { ULONG newv = dst + src;
218: { bool flgs = ((WORD)(src)) < 0;
219: bool flgo = ((WORD)(dst)) < 0;
220: bool flgn = ((WORD)(newv)) < 0;
221: regs.z = ((WORD)(newv)) == 0;
222: regs.v = (flgs == flgo) && (flgn != flgo);
223: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
224: regs.n = flgn != 0;
225: put_word(dsta,newv);
226: }}}}}}}
227: void op_5068(UWORD opcode)
228: {
229: ULONG srcreg = 8;
230: ULONG dstreg = (opcode & 7) >> 0;
231: {{ ULONG src = srcreg;
232: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
233: WORD dst = get_word(dsta);
234: { ULONG newv = dst + src;
235: { bool flgs = ((WORD)(src)) < 0;
236: bool flgo = ((WORD)(dst)) < 0;
237: bool flgn = ((WORD)(newv)) < 0;
238: regs.z = ((WORD)(newv)) == 0;
239: regs.v = (flgs == flgo) && (flgn != flgo);
240: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
241: regs.n = flgn != 0;
242: put_word(dsta,newv);
243: }}}}}}
244: void op_5070(UWORD opcode)
245: {
246: ULONG srcreg = 8;
247: ULONG dstreg = (opcode & 7) >> 0;
248: {{ ULONG src = srcreg;
249: { CPTR dsta = regs.a[dstreg];
250: UWORD dstdp = nextiword();
251: dsta += (LONG)(BYTE)(dstdp & 0xFF);
252: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
253: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
254: dsta += dstdpr;
255: { WORD dst = get_word(dsta);
256: { ULONG newv = dst + src;
257: { bool flgs = ((WORD)(src)) < 0;
258: bool flgo = ((WORD)(dst)) < 0;
259: bool flgn = ((WORD)(newv)) < 0;
260: regs.z = ((WORD)(newv)) == 0;
261: regs.v = (flgs == flgo) && (flgn != flgo);
262: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
263: regs.n = flgn != 0;
264: put_word(dsta,newv);
265: }}}}}}}}
266: void op_5078(UWORD opcode)
267: {
268: ULONG srcreg = 8;
269: {{ ULONG src = srcreg;
270: { CPTR dsta = (LONG)(WORD)nextiword();
271: WORD dst = get_word(dsta);
272: { ULONG newv = dst + src;
273: { bool flgs = ((WORD)(src)) < 0;
274: bool flgo = ((WORD)(dst)) < 0;
275: bool flgn = ((WORD)(newv)) < 0;
276: regs.z = ((WORD)(newv)) == 0;
277: regs.v = (flgs == flgo) && (flgn != flgo);
278: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
279: regs.n = flgn != 0;
280: put_word(dsta,newv);
281: }}}}}}
282: void op_5079(UWORD opcode)
283: {
284: ULONG srcreg = 8;
285: {{ ULONG src = srcreg;
286: { CPTR dsta = nextilong();
287: WORD dst = get_word(dsta);
288: { ULONG newv = dst + src;
289: { bool flgs = ((WORD)(src)) < 0;
290: bool flgo = ((WORD)(dst)) < 0;
291: bool flgn = ((WORD)(newv)) < 0;
292: regs.z = ((WORD)(newv)) == 0;
293: regs.v = (flgs == flgo) && (flgn != flgo);
294: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
295: regs.n = flgn != 0;
296: put_word(dsta,newv);
297: }}}}}}
298: void op_5080(UWORD opcode)
299: {
300: ULONG srcreg = 8;
301: ULONG dstreg = (opcode & 7) >> 0;
302: {{ ULONG src = srcreg;
303: { LONG dst = regs.d[dstreg];
304: { ULONG newv = dst + src;
305: { bool flgs = ((LONG)(src)) < 0;
306: bool flgo = ((LONG)(dst)) < 0;
307: bool flgn = ((LONG)(newv)) < 0;
308: regs.z = ((LONG)(newv)) == 0;
309: regs.v = (flgs == flgo) && (flgn != flgo);
310: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
311: regs.n = flgn != 0;
312: regs.d[dstreg] = (newv);
313: }}}}}}
314: void op_5088(UWORD opcode)
315: {
316: ULONG srcreg = 8;
317: ULONG dstreg = (opcode & 7) >> 0;
318: {{ ULONG src = srcreg;
319: { LONG dst = regs.a[dstreg];
320: { ULONG newv = dst + src;
321: regs.a[dstreg] = (newv);
322: }}}}}
323: void op_5090(UWORD opcode)
324: {
325: ULONG srcreg = 8;
326: ULONG dstreg = (opcode & 7) >> 0;
327: {{ ULONG src = srcreg;
328: { CPTR dsta = regs.a[dstreg];
329: LONG dst = get_long(dsta);
330: { ULONG newv = dst + src;
331: { bool flgs = ((LONG)(src)) < 0;
332: bool flgo = ((LONG)(dst)) < 0;
333: bool flgn = ((LONG)(newv)) < 0;
334: regs.z = ((LONG)(newv)) == 0;
335: regs.v = (flgs == flgo) && (flgn != flgo);
336: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
337: regs.n = flgn != 0;
338: put_long(dsta,newv);
339: }}}}}}
340: void op_5098(UWORD opcode)
341: {
342: ULONG srcreg = 8;
343: ULONG dstreg = (opcode & 7) >> 0;
344: {{ ULONG src = srcreg;
345: { CPTR dsta = regs.a[dstreg];
346: LONG dst = get_long(dsta);
347: { regs.a[dstreg] += 4;
348: { ULONG newv = dst + src;
349: { bool flgs = ((LONG)(src)) < 0;
350: bool flgo = ((LONG)(dst)) < 0;
351: bool flgn = ((LONG)(newv)) < 0;
352: regs.z = ((LONG)(newv)) == 0;
353: regs.v = (flgs == flgo) && (flgn != flgo);
354: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
355: regs.n = flgn != 0;
356: put_long(dsta,newv);
357: }}}}}}}
358: void op_50a0(UWORD opcode)
359: {
360: ULONG srcreg = 8;
361: ULONG dstreg = (opcode & 7) >> 0;
362: {{ ULONG src = srcreg;
363: { regs.a[dstreg] -= 4;
364: { CPTR dsta = regs.a[dstreg];
365: LONG dst = get_long(dsta);
366: { ULONG newv = dst + src;
367: { bool flgs = ((LONG)(src)) < 0;
368: bool flgo = ((LONG)(dst)) < 0;
369: bool flgn = ((LONG)(newv)) < 0;
370: regs.z = ((LONG)(newv)) == 0;
371: regs.v = (flgs == flgo) && (flgn != flgo);
372: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
373: regs.n = flgn != 0;
374: put_long(dsta,newv);
375: }}}}}}}
376: void op_50a8(UWORD opcode)
377: {
378: ULONG srcreg = 8;
379: ULONG dstreg = (opcode & 7) >> 0;
380: {{ ULONG src = srcreg;
381: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
382: LONG dst = get_long(dsta);
383: { ULONG newv = dst + src;
384: { bool flgs = ((LONG)(src)) < 0;
385: bool flgo = ((LONG)(dst)) < 0;
386: bool flgn = ((LONG)(newv)) < 0;
387: regs.z = ((LONG)(newv)) == 0;
388: regs.v = (flgs == flgo) && (flgn != flgo);
389: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
390: regs.n = flgn != 0;
391: put_long(dsta,newv);
392: }}}}}}
393: void op_50b0(UWORD opcode)
394: {
395: ULONG srcreg = 8;
396: ULONG dstreg = (opcode & 7) >> 0;
397: {{ ULONG src = srcreg;
398: { CPTR dsta = regs.a[dstreg];
399: UWORD dstdp = nextiword();
400: dsta += (LONG)(BYTE)(dstdp & 0xFF);
401: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
402: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
403: dsta += dstdpr;
404: { LONG dst = get_long(dsta);
405: { ULONG newv = dst + src;
406: { bool flgs = ((LONG)(src)) < 0;
407: bool flgo = ((LONG)(dst)) < 0;
408: bool flgn = ((LONG)(newv)) < 0;
409: regs.z = ((LONG)(newv)) == 0;
410: regs.v = (flgs == flgo) && (flgn != flgo);
411: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
412: regs.n = flgn != 0;
413: put_long(dsta,newv);
414: }}}}}}}}
415: void op_50b8(UWORD opcode)
416: {
417: ULONG srcreg = 8;
418: {{ ULONG src = srcreg;
419: { CPTR dsta = (LONG)(WORD)nextiword();
420: LONG dst = get_long(dsta);
421: { ULONG newv = dst + src;
422: { bool flgs = ((LONG)(src)) < 0;
423: bool flgo = ((LONG)(dst)) < 0;
424: bool flgn = ((LONG)(newv)) < 0;
425: regs.z = ((LONG)(newv)) == 0;
426: regs.v = (flgs == flgo) && (flgn != flgo);
427: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
428: regs.n = flgn != 0;
429: put_long(dsta,newv);
430: }}}}}}
431: void op_50b9(UWORD opcode)
432: {
433: ULONG srcreg = 8;
434: {{ ULONG src = srcreg;
435: { CPTR dsta = nextilong();
436: LONG dst = get_long(dsta);
437: { ULONG newv = dst + src;
438: { bool flgs = ((LONG)(src)) < 0;
439: bool flgo = ((LONG)(dst)) < 0;
440: bool flgn = ((LONG)(newv)) < 0;
441: regs.z = ((LONG)(newv)) == 0;
442: regs.v = (flgs == flgo) && (flgn != flgo);
443: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
444: regs.n = flgn != 0;
445: put_long(dsta,newv);
446: }}}}}}
447: void op_50c0(UWORD opcode)
448: {
449: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
450: {{{ int val = cctrue(0) ? 0xff : 0;
451: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
452: }}}}
453: void op_50c8(UWORD opcode)
454: {
455: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
456: {{ WORD src = regs.d[srcreg];
457: { WORD offs = nextiword();
458: if (!cctrue(0)) {
459: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
460: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
461: }
462: }}}}
463: void op_50d0(UWORD opcode)
464: {
465: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
466: {{ CPTR srca = regs.a[srcreg];
467: { int val = cctrue(0) ? 0xff : 0;
468: put_byte(srca,val);
469: }}}}
470: void op_50d8(UWORD opcode)
471: {
472: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
473: {{ CPTR srca = regs.a[srcreg];
474: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
475: { int val = cctrue(0) ? 0xff : 0;
476: put_byte(srca,val);
477: }}}}}
478: void op_50e0(UWORD opcode)
479: {
480: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
481: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
482: { CPTR srca = regs.a[srcreg];
483: { int val = cctrue(0) ? 0xff : 0;
484: put_byte(srca,val);
485: }}}}}
486: void op_50e8(UWORD opcode)
487: {
488: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
489: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
490: { int val = cctrue(0) ? 0xff : 0;
491: put_byte(srca,val);
492: }}}}
493: void op_50f0(UWORD opcode)
494: {
495: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
496: {{ CPTR srca = regs.a[srcreg];
497: UWORD srcdp = nextiword();
498: srca += (LONG)(BYTE)(srcdp & 0xFF);
499: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
500: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
501: srca += srcdpr;
502: { int val = cctrue(0) ? 0xff : 0;
503: put_byte(srca,val);
504: }}}}}
505: void op_50f8(UWORD opcode)
506: {
507: {{ CPTR srca = (LONG)(WORD)nextiword();
508: { int val = cctrue(0) ? 0xff : 0;
509: put_byte(srca,val);
510: }}}}
511: void op_50f9(UWORD opcode)
512: {
513: {{ CPTR srca = nextilong();
514: { int val = cctrue(0) ? 0xff : 0;
515: put_byte(srca,val);
516: }}}}
517: void op_5100(UWORD opcode)
518: {
519: ULONG srcreg = 8;
520: ULONG dstreg = (opcode & 7) >> 0;
521: {{ ULONG src = srcreg;
522: { BYTE dst = regs.d[dstreg];
523: { ULONG newv = dst - src;
524: { bool flgs = ((BYTE)(src)) < 0;
525: bool flgo = ((BYTE)(dst)) < 0;
526: bool flgn = ((BYTE)(newv)) < 0;
527: regs.z = ((BYTE)(newv)) == 0;
528: regs.v = (flgs != flgo) && (flgn != flgo);
529: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
530: regs.n = flgn != 0;
531: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
532: }}}}}}
533: void op_5110(UWORD opcode)
534: {
535: ULONG srcreg = 8;
536: ULONG dstreg = (opcode & 7) >> 0;
537: {{ ULONG src = srcreg;
538: { CPTR dsta = regs.a[dstreg];
539: BYTE dst = get_byte(dsta);
540: { ULONG newv = dst - src;
541: { bool flgs = ((BYTE)(src)) < 0;
542: bool flgo = ((BYTE)(dst)) < 0;
543: bool flgn = ((BYTE)(newv)) < 0;
544: regs.z = ((BYTE)(newv)) == 0;
545: regs.v = (flgs != flgo) && (flgn != flgo);
546: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
547: regs.n = flgn != 0;
548: put_byte(dsta,newv);
549: }}}}}}
550: void op_5118(UWORD opcode)
551: {
552: ULONG srcreg = 8;
553: ULONG dstreg = (opcode & 7) >> 0;
554: {{ ULONG src = srcreg;
555: { CPTR dsta = regs.a[dstreg];
556: BYTE dst = get_byte(dsta);
557: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
558: { ULONG newv = dst - src;
559: { bool flgs = ((BYTE)(src)) < 0;
560: bool flgo = ((BYTE)(dst)) < 0;
561: bool flgn = ((BYTE)(newv)) < 0;
562: regs.z = ((BYTE)(newv)) == 0;
563: regs.v = (flgs != flgo) && (flgn != flgo);
564: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
565: regs.n = flgn != 0;
566: put_byte(dsta,newv);
567: }}}}}}}
568: void op_5120(UWORD opcode)
569: {
570: ULONG srcreg = 8;
571: ULONG dstreg = (opcode & 7) >> 0;
572: {{ ULONG src = srcreg;
573: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
574: { CPTR dsta = regs.a[dstreg];
575: BYTE dst = get_byte(dsta);
576: { ULONG newv = dst - src;
577: { bool flgs = ((BYTE)(src)) < 0;
578: bool flgo = ((BYTE)(dst)) < 0;
579: bool flgn = ((BYTE)(newv)) < 0;
580: regs.z = ((BYTE)(newv)) == 0;
581: regs.v = (flgs != flgo) && (flgn != flgo);
582: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
583: regs.n = flgn != 0;
584: put_byte(dsta,newv);
585: }}}}}}}
586: void op_5128(UWORD opcode)
587: {
588: ULONG srcreg = 8;
589: ULONG dstreg = (opcode & 7) >> 0;
590: {{ ULONG src = srcreg;
591: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
592: BYTE dst = get_byte(dsta);
593: { ULONG newv = dst - src;
594: { bool flgs = ((BYTE)(src)) < 0;
595: bool flgo = ((BYTE)(dst)) < 0;
596: bool flgn = ((BYTE)(newv)) < 0;
597: regs.z = ((BYTE)(newv)) == 0;
598: regs.v = (flgs != flgo) && (flgn != flgo);
599: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
600: regs.n = flgn != 0;
601: put_byte(dsta,newv);
602: }}}}}}
603: void op_5130(UWORD opcode)
604: {
605: ULONG srcreg = 8;
606: ULONG dstreg = (opcode & 7) >> 0;
607: {{ ULONG src = srcreg;
608: { CPTR dsta = regs.a[dstreg];
609: UWORD dstdp = nextiword();
610: dsta += (LONG)(BYTE)(dstdp & 0xFF);
611: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
612: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
613: dsta += dstdpr;
614: { BYTE dst = get_byte(dsta);
615: { ULONG newv = dst - src;
616: { bool flgs = ((BYTE)(src)) < 0;
617: bool flgo = ((BYTE)(dst)) < 0;
618: bool flgn = ((BYTE)(newv)) < 0;
619: regs.z = ((BYTE)(newv)) == 0;
620: regs.v = (flgs != flgo) && (flgn != flgo);
621: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
622: regs.n = flgn != 0;
623: put_byte(dsta,newv);
624: }}}}}}}}
625: void op_5138(UWORD opcode)
626: {
627: ULONG srcreg = 8;
628: {{ ULONG src = srcreg;
629: { CPTR dsta = (LONG)(WORD)nextiword();
630: BYTE dst = get_byte(dsta);
631: { ULONG newv = dst - src;
632: { bool flgs = ((BYTE)(src)) < 0;
633: bool flgo = ((BYTE)(dst)) < 0;
634: bool flgn = ((BYTE)(newv)) < 0;
635: regs.z = ((BYTE)(newv)) == 0;
636: regs.v = (flgs != flgo) && (flgn != flgo);
637: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
638: regs.n = flgn != 0;
639: put_byte(dsta,newv);
640: }}}}}}
641: void op_5139(UWORD opcode)
642: {
643: ULONG srcreg = 8;
644: {{ ULONG src = srcreg;
645: { CPTR dsta = nextilong();
646: BYTE dst = get_byte(dsta);
647: { ULONG newv = dst - src;
648: { bool flgs = ((BYTE)(src)) < 0;
649: bool flgo = ((BYTE)(dst)) < 0;
650: bool flgn = ((BYTE)(newv)) < 0;
651: regs.z = ((BYTE)(newv)) == 0;
652: regs.v = (flgs != flgo) && (flgn != flgo);
653: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
654: regs.n = flgn != 0;
655: put_byte(dsta,newv);
656: }}}}}}
657: void op_5140(UWORD opcode)
658: {
659: ULONG srcreg = 8;
660: ULONG dstreg = (opcode & 7) >> 0;
661: {{ ULONG src = srcreg;
662: { WORD dst = regs.d[dstreg];
663: { ULONG newv = dst - src;
664: { bool flgs = ((WORD)(src)) < 0;
665: bool flgo = ((WORD)(dst)) < 0;
666: bool flgn = ((WORD)(newv)) < 0;
667: regs.z = ((WORD)(newv)) == 0;
668: regs.v = (flgs != flgo) && (flgn != flgo);
669: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
670: regs.n = flgn != 0;
671: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
672: }}}}}}
673: void op_5148(UWORD opcode)
674: {
675: ULONG srcreg = 8;
676: ULONG dstreg = (opcode & 7) >> 0;
677: {{ ULONG src = srcreg;
678: { LONG dst = regs.a[dstreg];
679: { ULONG newv = dst - src;
680: regs.a[dstreg] = (newv);
681: }}}}}
682: void op_5150(UWORD opcode)
683: {
684: ULONG srcreg = 8;
685: ULONG dstreg = (opcode & 7) >> 0;
686: {{ ULONG src = srcreg;
687: { CPTR dsta = regs.a[dstreg];
688: WORD dst = get_word(dsta);
689: { ULONG newv = dst - src;
690: { bool flgs = ((WORD)(src)) < 0;
691: bool flgo = ((WORD)(dst)) < 0;
692: bool flgn = ((WORD)(newv)) < 0;
693: regs.z = ((WORD)(newv)) == 0;
694: regs.v = (flgs != flgo) && (flgn != flgo);
695: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
696: regs.n = flgn != 0;
697: put_word(dsta,newv);
698: }}}}}}
699: void op_5158(UWORD opcode)
700: {
701: ULONG srcreg = 8;
702: ULONG dstreg = (opcode & 7) >> 0;
703: {{ ULONG src = srcreg;
704: { CPTR dsta = regs.a[dstreg];
705: WORD dst = get_word(dsta);
706: { regs.a[dstreg] += 2;
707: { ULONG newv = dst - src;
708: { bool flgs = ((WORD)(src)) < 0;
709: bool flgo = ((WORD)(dst)) < 0;
710: bool flgn = ((WORD)(newv)) < 0;
711: regs.z = ((WORD)(newv)) == 0;
712: regs.v = (flgs != flgo) && (flgn != flgo);
713: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
714: regs.n = flgn != 0;
715: put_word(dsta,newv);
716: }}}}}}}
717: void op_5160(UWORD opcode)
718: {
719: ULONG srcreg = 8;
720: ULONG dstreg = (opcode & 7) >> 0;
721: {{ ULONG src = srcreg;
722: { regs.a[dstreg] -= 2;
723: { CPTR dsta = regs.a[dstreg];
724: WORD dst = get_word(dsta);
725: { ULONG newv = dst - src;
726: { bool flgs = ((WORD)(src)) < 0;
727: bool flgo = ((WORD)(dst)) < 0;
728: bool flgn = ((WORD)(newv)) < 0;
729: regs.z = ((WORD)(newv)) == 0;
730: regs.v = (flgs != flgo) && (flgn != flgo);
731: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
732: regs.n = flgn != 0;
733: put_word(dsta,newv);
734: }}}}}}}
735: void op_5168(UWORD opcode)
736: {
737: ULONG srcreg = 8;
738: ULONG dstreg = (opcode & 7) >> 0;
739: {{ ULONG src = srcreg;
740: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
741: WORD dst = get_word(dsta);
742: { ULONG newv = dst - src;
743: { bool flgs = ((WORD)(src)) < 0;
744: bool flgo = ((WORD)(dst)) < 0;
745: bool flgn = ((WORD)(newv)) < 0;
746: regs.z = ((WORD)(newv)) == 0;
747: regs.v = (flgs != flgo) && (flgn != flgo);
748: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
749: regs.n = flgn != 0;
750: put_word(dsta,newv);
751: }}}}}}
752: void op_5170(UWORD opcode)
753: {
754: ULONG srcreg = 8;
755: ULONG dstreg = (opcode & 7) >> 0;
756: {{ ULONG src = srcreg;
757: { CPTR dsta = regs.a[dstreg];
758: UWORD dstdp = nextiword();
759: dsta += (LONG)(BYTE)(dstdp & 0xFF);
760: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
761: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
762: dsta += dstdpr;
763: { WORD dst = get_word(dsta);
764: { ULONG newv = dst - src;
765: { bool flgs = ((WORD)(src)) < 0;
766: bool flgo = ((WORD)(dst)) < 0;
767: bool flgn = ((WORD)(newv)) < 0;
768: regs.z = ((WORD)(newv)) == 0;
769: regs.v = (flgs != flgo) && (flgn != flgo);
770: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
771: regs.n = flgn != 0;
772: put_word(dsta,newv);
773: }}}}}}}}
774: void op_5178(UWORD opcode)
775: {
776: ULONG srcreg = 8;
777: {{ ULONG src = srcreg;
778: { CPTR dsta = (LONG)(WORD)nextiword();
779: WORD dst = get_word(dsta);
780: { ULONG newv = dst - src;
781: { bool flgs = ((WORD)(src)) < 0;
782: bool flgo = ((WORD)(dst)) < 0;
783: bool flgn = ((WORD)(newv)) < 0;
784: regs.z = ((WORD)(newv)) == 0;
785: regs.v = (flgs != flgo) && (flgn != flgo);
786: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
787: regs.n = flgn != 0;
788: put_word(dsta,newv);
789: }}}}}}
790: void op_5179(UWORD opcode)
791: {
792: ULONG srcreg = 8;
793: {{ ULONG src = srcreg;
794: { CPTR dsta = nextilong();
795: WORD dst = get_word(dsta);
796: { ULONG newv = dst - src;
797: { bool flgs = ((WORD)(src)) < 0;
798: bool flgo = ((WORD)(dst)) < 0;
799: bool flgn = ((WORD)(newv)) < 0;
800: regs.z = ((WORD)(newv)) == 0;
801: regs.v = (flgs != flgo) && (flgn != flgo);
802: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
803: regs.n = flgn != 0;
804: put_word(dsta,newv);
805: }}}}}}
806: void op_5180(UWORD opcode)
807: {
808: ULONG srcreg = 8;
809: ULONG dstreg = (opcode & 7) >> 0;
810: {{ ULONG src = srcreg;
811: { LONG dst = regs.d[dstreg];
812: { ULONG newv = dst - src;
813: { bool flgs = ((LONG)(src)) < 0;
814: bool flgo = ((LONG)(dst)) < 0;
815: bool flgn = ((LONG)(newv)) < 0;
816: regs.z = ((LONG)(newv)) == 0;
817: regs.v = (flgs != flgo) && (flgn != flgo);
818: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
819: regs.n = flgn != 0;
820: regs.d[dstreg] = (newv);
821: }}}}}}
822: void op_5188(UWORD opcode)
823: {
824: ULONG srcreg = 8;
825: ULONG dstreg = (opcode & 7) >> 0;
826: {{ ULONG src = srcreg;
827: { LONG dst = regs.a[dstreg];
828: { ULONG newv = dst - src;
829: regs.a[dstreg] = (newv);
830: }}}}}
831: void op_5190(UWORD opcode)
832: {
833: ULONG srcreg = 8;
834: ULONG dstreg = (opcode & 7) >> 0;
835: {{ ULONG src = srcreg;
836: { CPTR dsta = regs.a[dstreg];
837: LONG dst = get_long(dsta);
838: { ULONG newv = dst - src;
839: { bool flgs = ((LONG)(src)) < 0;
840: bool flgo = ((LONG)(dst)) < 0;
841: bool flgn = ((LONG)(newv)) < 0;
842: regs.z = ((LONG)(newv)) == 0;
843: regs.v = (flgs != flgo) && (flgn != flgo);
844: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
845: regs.n = flgn != 0;
846: put_long(dsta,newv);
847: }}}}}}
848: void op_5198(UWORD opcode)
849: {
850: ULONG srcreg = 8;
851: ULONG dstreg = (opcode & 7) >> 0;
852: {{ ULONG src = srcreg;
853: { CPTR dsta = regs.a[dstreg];
854: LONG dst = get_long(dsta);
855: { regs.a[dstreg] += 4;
856: { ULONG newv = dst - src;
857: { bool flgs = ((LONG)(src)) < 0;
858: bool flgo = ((LONG)(dst)) < 0;
859: bool flgn = ((LONG)(newv)) < 0;
860: regs.z = ((LONG)(newv)) == 0;
861: regs.v = (flgs != flgo) && (flgn != flgo);
862: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
863: regs.n = flgn != 0;
864: put_long(dsta,newv);
865: }}}}}}}
866: void op_51a0(UWORD opcode)
867: {
868: ULONG srcreg = 8;
869: ULONG dstreg = (opcode & 7) >> 0;
870: {{ ULONG src = srcreg;
871: { regs.a[dstreg] -= 4;
872: { CPTR dsta = regs.a[dstreg];
873: LONG dst = get_long(dsta);
874: { ULONG newv = dst - src;
875: { bool flgs = ((LONG)(src)) < 0;
876: bool flgo = ((LONG)(dst)) < 0;
877: bool flgn = ((LONG)(newv)) < 0;
878: regs.z = ((LONG)(newv)) == 0;
879: regs.v = (flgs != flgo) && (flgn != flgo);
880: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
881: regs.n = flgn != 0;
882: put_long(dsta,newv);
883: }}}}}}}
884: void op_51a8(UWORD opcode)
885: {
886: ULONG srcreg = 8;
887: ULONG dstreg = (opcode & 7) >> 0;
888: {{ ULONG src = srcreg;
889: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
890: LONG dst = get_long(dsta);
891: { ULONG newv = dst - src;
892: { bool flgs = ((LONG)(src)) < 0;
893: bool flgo = ((LONG)(dst)) < 0;
894: bool flgn = ((LONG)(newv)) < 0;
895: regs.z = ((LONG)(newv)) == 0;
896: regs.v = (flgs != flgo) && (flgn != flgo);
897: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
898: regs.n = flgn != 0;
899: put_long(dsta,newv);
900: }}}}}}
901: void op_51b0(UWORD opcode)
902: {
903: ULONG srcreg = 8;
904: ULONG dstreg = (opcode & 7) >> 0;
905: {{ ULONG src = srcreg;
906: { CPTR dsta = regs.a[dstreg];
907: UWORD dstdp = nextiword();
908: dsta += (LONG)(BYTE)(dstdp & 0xFF);
909: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
910: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
911: dsta += dstdpr;
912: { LONG dst = get_long(dsta);
913: { ULONG newv = dst - src;
914: { bool flgs = ((LONG)(src)) < 0;
915: bool flgo = ((LONG)(dst)) < 0;
916: bool flgn = ((LONG)(newv)) < 0;
917: regs.z = ((LONG)(newv)) == 0;
918: regs.v = (flgs != flgo) && (flgn != flgo);
919: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
920: regs.n = flgn != 0;
921: put_long(dsta,newv);
922: }}}}}}}}
923: void op_51b8(UWORD opcode)
924: {
925: ULONG srcreg = 8;
926: {{ ULONG src = srcreg;
927: { CPTR dsta = (LONG)(WORD)nextiword();
928: LONG dst = get_long(dsta);
929: { ULONG newv = dst - src;
930: { bool flgs = ((LONG)(src)) < 0;
931: bool flgo = ((LONG)(dst)) < 0;
932: bool flgn = ((LONG)(newv)) < 0;
933: regs.z = ((LONG)(newv)) == 0;
934: regs.v = (flgs != flgo) && (flgn != flgo);
935: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
936: regs.n = flgn != 0;
937: put_long(dsta,newv);
938: }}}}}}
939: void op_51b9(UWORD opcode)
940: {
941: ULONG srcreg = 8;
942: {{ ULONG src = srcreg;
943: { CPTR dsta = nextilong();
944: LONG dst = get_long(dsta);
945: { ULONG newv = dst - src;
946: { bool flgs = ((LONG)(src)) < 0;
947: bool flgo = ((LONG)(dst)) < 0;
948: bool flgn = ((LONG)(newv)) < 0;
949: regs.z = ((LONG)(newv)) == 0;
950: regs.v = (flgs != flgo) && (flgn != flgo);
951: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
952: regs.n = flgn != 0;
953: put_long(dsta,newv);
954: }}}}}}
955: void op_51c0(UWORD opcode)
956: {
957: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
958: {{{ int val = cctrue(1) ? 0xff : 0;
959: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
960: }}}}
961: void op_51c8(UWORD opcode)
962: {
963: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
964: {{ WORD src = regs.d[srcreg];
965: { WORD offs = nextiword();
966: if (!cctrue(1)) {
967: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
968: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
969: }
970: }}}}
971: void op_51d0(UWORD opcode)
972: {
973: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
974: {{ CPTR srca = regs.a[srcreg];
975: { int val = cctrue(1) ? 0xff : 0;
976: put_byte(srca,val);
977: }}}}
978: void op_51d8(UWORD opcode)
979: {
980: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
981: {{ CPTR srca = regs.a[srcreg];
982: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
983: { int val = cctrue(1) ? 0xff : 0;
984: put_byte(srca,val);
985: }}}}}
986: void op_51e0(UWORD opcode)
987: {
988: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
989: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
990: { CPTR srca = regs.a[srcreg];
991: { int val = cctrue(1) ? 0xff : 0;
992: put_byte(srca,val);
993: }}}}}
994: void op_51e8(UWORD opcode)
995: {
996: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
997: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
998: { int val = cctrue(1) ? 0xff : 0;
999: put_byte(srca,val);
1000: }}}}
1001: void op_51f0(UWORD opcode)
1002: {
1003: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1004: {{ CPTR srca = regs.a[srcreg];
1005: UWORD srcdp = nextiword();
1006: srca += (LONG)(BYTE)(srcdp & 0xFF);
1007: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1008: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1009: srca += srcdpr;
1010: { int val = cctrue(1) ? 0xff : 0;
1011: put_byte(srca,val);
1012: }}}}}
1013: void op_51f8(UWORD opcode)
1014: {
1015: {{ CPTR srca = (LONG)(WORD)nextiword();
1016: { int val = cctrue(1) ? 0xff : 0;
1017: put_byte(srca,val);
1018: }}}}
1019: void op_51f9(UWORD opcode)
1020: {
1021: {{ CPTR srca = nextilong();
1022: { int val = cctrue(1) ? 0xff : 0;
1023: put_byte(srca,val);
1024: }}}}
1025: void op_5200(UWORD opcode)
1026: {
1027: ULONG srcreg = 1;
1028: ULONG dstreg = (opcode & 7) >> 0;
1029: {{ ULONG src = srcreg;
1030: { BYTE dst = regs.d[dstreg];
1031: { ULONG newv = dst + src;
1032: { bool flgs = ((BYTE)(src)) < 0;
1033: bool flgo = ((BYTE)(dst)) < 0;
1034: bool flgn = ((BYTE)(newv)) < 0;
1035: regs.z = ((BYTE)(newv)) == 0;
1036: regs.v = (flgs == flgo) && (flgn != flgo);
1037: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
1038: regs.n = flgn != 0;
1039: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
1040: }}}}}}
1041: void op_5210(UWORD opcode)
1042: {
1043: ULONG srcreg = 1;
1044: ULONG dstreg = (opcode & 7) >> 0;
1045: {{ ULONG src = srcreg;
1046: { CPTR dsta = regs.a[dstreg];
1047: BYTE dst = get_byte(dsta);
1048: { ULONG newv = dst + src;
1049: { bool flgs = ((BYTE)(src)) < 0;
1050: bool flgo = ((BYTE)(dst)) < 0;
1051: bool flgn = ((BYTE)(newv)) < 0;
1052: regs.z = ((BYTE)(newv)) == 0;
1053: regs.v = (flgs == flgo) && (flgn != flgo);
1054: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
1055: regs.n = flgn != 0;
1056: put_byte(dsta,newv);
1057: }}}}}}
1058: void op_5218(UWORD opcode)
1059: {
1060: ULONG srcreg = 1;
1061: ULONG dstreg = (opcode & 7) >> 0;
1062: {{ ULONG src = srcreg;
1063: { CPTR dsta = regs.a[dstreg];
1064: BYTE dst = get_byte(dsta);
1065: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
1066: { ULONG newv = dst + src;
1067: { bool flgs = ((BYTE)(src)) < 0;
1068: bool flgo = ((BYTE)(dst)) < 0;
1069: bool flgn = ((BYTE)(newv)) < 0;
1070: regs.z = ((BYTE)(newv)) == 0;
1071: regs.v = (flgs == flgo) && (flgn != flgo);
1072: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
1073: regs.n = flgn != 0;
1074: put_byte(dsta,newv);
1075: }}}}}}}
1076: void op_5220(UWORD opcode)
1077: {
1078: ULONG srcreg = 1;
1079: ULONG dstreg = (opcode & 7) >> 0;
1080: {{ ULONG src = srcreg;
1081: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
1082: { CPTR dsta = regs.a[dstreg];
1083: BYTE dst = get_byte(dsta);
1084: { ULONG newv = dst + src;
1085: { bool flgs = ((BYTE)(src)) < 0;
1086: bool flgo = ((BYTE)(dst)) < 0;
1087: bool flgn = ((BYTE)(newv)) < 0;
1088: regs.z = ((BYTE)(newv)) == 0;
1089: regs.v = (flgs == flgo) && (flgn != flgo);
1090: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
1091: regs.n = flgn != 0;
1092: put_byte(dsta,newv);
1093: }}}}}}}
1094: void op_5228(UWORD opcode)
1095: {
1096: ULONG srcreg = 1;
1097: ULONG dstreg = (opcode & 7) >> 0;
1098: {{ ULONG src = srcreg;
1099: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
1100: BYTE dst = get_byte(dsta);
1101: { ULONG newv = dst + src;
1102: { bool flgs = ((BYTE)(src)) < 0;
1103: bool flgo = ((BYTE)(dst)) < 0;
1104: bool flgn = ((BYTE)(newv)) < 0;
1105: regs.z = ((BYTE)(newv)) == 0;
1106: regs.v = (flgs == flgo) && (flgn != flgo);
1107: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
1108: regs.n = flgn != 0;
1109: put_byte(dsta,newv);
1110: }}}}}}
1111: void op_5230(UWORD opcode)
1112: {
1113: ULONG srcreg = 1;
1114: ULONG dstreg = (opcode & 7) >> 0;
1115: {{ ULONG src = srcreg;
1116: { CPTR dsta = regs.a[dstreg];
1117: UWORD dstdp = nextiword();
1118: dsta += (LONG)(BYTE)(dstdp & 0xFF);
1119: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
1120: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
1121: dsta += dstdpr;
1122: { BYTE dst = get_byte(dsta);
1123: { ULONG newv = dst + src;
1124: { bool flgs = ((BYTE)(src)) < 0;
1125: bool flgo = ((BYTE)(dst)) < 0;
1126: bool flgn = ((BYTE)(newv)) < 0;
1127: regs.z = ((BYTE)(newv)) == 0;
1128: regs.v = (flgs == flgo) && (flgn != flgo);
1129: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
1130: regs.n = flgn != 0;
1131: put_byte(dsta,newv);
1132: }}}}}}}}
1133: void op_5238(UWORD opcode)
1134: {
1135: ULONG srcreg = 1;
1136: {{ ULONG src = srcreg;
1137: { CPTR dsta = (LONG)(WORD)nextiword();
1138: BYTE dst = get_byte(dsta);
1139: { ULONG newv = dst + src;
1140: { bool flgs = ((BYTE)(src)) < 0;
1141: bool flgo = ((BYTE)(dst)) < 0;
1142: bool flgn = ((BYTE)(newv)) < 0;
1143: regs.z = ((BYTE)(newv)) == 0;
1144: regs.v = (flgs == flgo) && (flgn != flgo);
1145: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
1146: regs.n = flgn != 0;
1147: put_byte(dsta,newv);
1148: }}}}}}
1149: void op_5239(UWORD opcode)
1150: {
1151: ULONG srcreg = 1;
1152: {{ ULONG src = srcreg;
1153: { CPTR dsta = nextilong();
1154: BYTE dst = get_byte(dsta);
1155: { ULONG newv = dst + src;
1156: { bool flgs = ((BYTE)(src)) < 0;
1157: bool flgo = ((BYTE)(dst)) < 0;
1158: bool flgn = ((BYTE)(newv)) < 0;
1159: regs.z = ((BYTE)(newv)) == 0;
1160: regs.v = (flgs == flgo) && (flgn != flgo);
1161: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
1162: regs.n = flgn != 0;
1163: put_byte(dsta,newv);
1164: }}}}}}
1165: void op_5240(UWORD opcode)
1166: {
1167: ULONG srcreg = 1;
1168: ULONG dstreg = (opcode & 7) >> 0;
1169: {{ ULONG src = srcreg;
1170: { WORD dst = regs.d[dstreg];
1171: { ULONG newv = dst + src;
1172: { bool flgs = ((WORD)(src)) < 0;
1173: bool flgo = ((WORD)(dst)) < 0;
1174: bool flgn = ((WORD)(newv)) < 0;
1175: regs.z = ((WORD)(newv)) == 0;
1176: regs.v = (flgs == flgo) && (flgn != flgo);
1177: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
1178: regs.n = flgn != 0;
1179: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
1180: }}}}}}
1181: void op_5248(UWORD opcode)
1182: {
1183: ULONG srcreg = 1;
1184: ULONG dstreg = (opcode & 7) >> 0;
1185: {{ ULONG src = srcreg;
1186: { LONG dst = regs.a[dstreg];
1187: { ULONG newv = dst + src;
1188: regs.a[dstreg] = (newv);
1189: }}}}}
1190: void op_5250(UWORD opcode)
1191: {
1192: ULONG srcreg = 1;
1193: ULONG dstreg = (opcode & 7) >> 0;
1194: {{ ULONG src = srcreg;
1195: { CPTR dsta = regs.a[dstreg];
1196: WORD dst = get_word(dsta);
1197: { ULONG newv = dst + src;
1198: { bool flgs = ((WORD)(src)) < 0;
1199: bool flgo = ((WORD)(dst)) < 0;
1200: bool flgn = ((WORD)(newv)) < 0;
1201: regs.z = ((WORD)(newv)) == 0;
1202: regs.v = (flgs == flgo) && (flgn != flgo);
1203: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
1204: regs.n = flgn != 0;
1205: put_word(dsta,newv);
1206: }}}}}}
1207: void op_5258(UWORD opcode)
1208: {
1209: ULONG srcreg = 1;
1210: ULONG dstreg = (opcode & 7) >> 0;
1211: {{ ULONG src = srcreg;
1212: { CPTR dsta = regs.a[dstreg];
1213: WORD dst = get_word(dsta);
1214: { regs.a[dstreg] += 2;
1215: { ULONG newv = dst + src;
1216: { bool flgs = ((WORD)(src)) < 0;
1217: bool flgo = ((WORD)(dst)) < 0;
1218: bool flgn = ((WORD)(newv)) < 0;
1219: regs.z = ((WORD)(newv)) == 0;
1220: regs.v = (flgs == flgo) && (flgn != flgo);
1221: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
1222: regs.n = flgn != 0;
1223: put_word(dsta,newv);
1224: }}}}}}}
1225: void op_5260(UWORD opcode)
1226: {
1227: ULONG srcreg = 1;
1228: ULONG dstreg = (opcode & 7) >> 0;
1229: {{ ULONG src = srcreg;
1230: { regs.a[dstreg] -= 2;
1231: { CPTR dsta = regs.a[dstreg];
1232: WORD dst = get_word(dsta);
1233: { ULONG newv = dst + src;
1234: { bool flgs = ((WORD)(src)) < 0;
1235: bool flgo = ((WORD)(dst)) < 0;
1236: bool flgn = ((WORD)(newv)) < 0;
1237: regs.z = ((WORD)(newv)) == 0;
1238: regs.v = (flgs == flgo) && (flgn != flgo);
1239: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
1240: regs.n = flgn != 0;
1241: put_word(dsta,newv);
1242: }}}}}}}
1243: void op_5268(UWORD opcode)
1244: {
1245: ULONG srcreg = 1;
1246: ULONG dstreg = (opcode & 7) >> 0;
1247: {{ ULONG src = srcreg;
1248: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
1249: WORD dst = get_word(dsta);
1250: { ULONG newv = dst + src;
1251: { bool flgs = ((WORD)(src)) < 0;
1252: bool flgo = ((WORD)(dst)) < 0;
1253: bool flgn = ((WORD)(newv)) < 0;
1254: regs.z = ((WORD)(newv)) == 0;
1255: regs.v = (flgs == flgo) && (flgn != flgo);
1256: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
1257: regs.n = flgn != 0;
1258: put_word(dsta,newv);
1259: }}}}}}
1260: void op_5270(UWORD opcode)
1261: {
1262: ULONG srcreg = 1;
1263: ULONG dstreg = (opcode & 7) >> 0;
1264: {{ ULONG src = srcreg;
1265: { CPTR dsta = regs.a[dstreg];
1266: UWORD dstdp = nextiword();
1267: dsta += (LONG)(BYTE)(dstdp & 0xFF);
1268: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
1269: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
1270: dsta += dstdpr;
1271: { WORD dst = get_word(dsta);
1272: { ULONG newv = dst + src;
1273: { bool flgs = ((WORD)(src)) < 0;
1274: bool flgo = ((WORD)(dst)) < 0;
1275: bool flgn = ((WORD)(newv)) < 0;
1276: regs.z = ((WORD)(newv)) == 0;
1277: regs.v = (flgs == flgo) && (flgn != flgo);
1278: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
1279: regs.n = flgn != 0;
1280: put_word(dsta,newv);
1281: }}}}}}}}
1282: void op_5278(UWORD opcode)
1283: {
1284: ULONG srcreg = 1;
1285: {{ ULONG src = srcreg;
1286: { CPTR dsta = (LONG)(WORD)nextiword();
1287: WORD dst = get_word(dsta);
1288: { ULONG newv = dst + src;
1289: { bool flgs = ((WORD)(src)) < 0;
1290: bool flgo = ((WORD)(dst)) < 0;
1291: bool flgn = ((WORD)(newv)) < 0;
1292: regs.z = ((WORD)(newv)) == 0;
1293: regs.v = (flgs == flgo) && (flgn != flgo);
1294: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
1295: regs.n = flgn != 0;
1296: put_word(dsta,newv);
1297: }}}}}}
1298: void op_5279(UWORD opcode)
1299: {
1300: ULONG srcreg = 1;
1301: {{ ULONG src = srcreg;
1302: { CPTR dsta = nextilong();
1303: WORD dst = get_word(dsta);
1304: { ULONG newv = dst + src;
1305: { bool flgs = ((WORD)(src)) < 0;
1306: bool flgo = ((WORD)(dst)) < 0;
1307: bool flgn = ((WORD)(newv)) < 0;
1308: regs.z = ((WORD)(newv)) == 0;
1309: regs.v = (flgs == flgo) && (flgn != flgo);
1310: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
1311: regs.n = flgn != 0;
1312: put_word(dsta,newv);
1313: }}}}}}
1314: void op_5280(UWORD opcode)
1315: {
1316: ULONG srcreg = 1;
1317: ULONG dstreg = (opcode & 7) >> 0;
1318: {{ ULONG src = srcreg;
1319: { LONG dst = regs.d[dstreg];
1320: { ULONG newv = dst + src;
1321: { bool flgs = ((LONG)(src)) < 0;
1322: bool flgo = ((LONG)(dst)) < 0;
1323: bool flgn = ((LONG)(newv)) < 0;
1324: regs.z = ((LONG)(newv)) == 0;
1325: regs.v = (flgs == flgo) && (flgn != flgo);
1326: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
1327: regs.n = flgn != 0;
1328: regs.d[dstreg] = (newv);
1329: }}}}}}
1330: void op_5288(UWORD opcode)
1331: {
1332: ULONG srcreg = 1;
1333: ULONG dstreg = (opcode & 7) >> 0;
1334: {{ ULONG src = srcreg;
1335: { LONG dst = regs.a[dstreg];
1336: { ULONG newv = dst + src;
1337: regs.a[dstreg] = (newv);
1338: }}}}}
1339: void op_5290(UWORD opcode)
1340: {
1341: ULONG srcreg = 1;
1342: ULONG dstreg = (opcode & 7) >> 0;
1343: {{ ULONG src = srcreg;
1344: { CPTR dsta = regs.a[dstreg];
1345: LONG dst = get_long(dsta);
1346: { ULONG newv = dst + src;
1347: { bool flgs = ((LONG)(src)) < 0;
1348: bool flgo = ((LONG)(dst)) < 0;
1349: bool flgn = ((LONG)(newv)) < 0;
1350: regs.z = ((LONG)(newv)) == 0;
1351: regs.v = (flgs == flgo) && (flgn != flgo);
1352: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
1353: regs.n = flgn != 0;
1354: put_long(dsta,newv);
1355: }}}}}}
1356: void op_5298(UWORD opcode)
1357: {
1358: ULONG srcreg = 1;
1359: ULONG dstreg = (opcode & 7) >> 0;
1360: {{ ULONG src = srcreg;
1361: { CPTR dsta = regs.a[dstreg];
1362: LONG dst = get_long(dsta);
1363: { regs.a[dstreg] += 4;
1364: { ULONG newv = dst + src;
1365: { bool flgs = ((LONG)(src)) < 0;
1366: bool flgo = ((LONG)(dst)) < 0;
1367: bool flgn = ((LONG)(newv)) < 0;
1368: regs.z = ((LONG)(newv)) == 0;
1369: regs.v = (flgs == flgo) && (flgn != flgo);
1370: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
1371: regs.n = flgn != 0;
1372: put_long(dsta,newv);
1373: }}}}}}}
1374: void op_52a0(UWORD opcode)
1375: {
1376: ULONG srcreg = 1;
1377: ULONG dstreg = (opcode & 7) >> 0;
1378: {{ ULONG src = srcreg;
1379: { regs.a[dstreg] -= 4;
1380: { CPTR dsta = regs.a[dstreg];
1381: LONG dst = get_long(dsta);
1382: { ULONG newv = dst + src;
1383: { bool flgs = ((LONG)(src)) < 0;
1384: bool flgo = ((LONG)(dst)) < 0;
1385: bool flgn = ((LONG)(newv)) < 0;
1386: regs.z = ((LONG)(newv)) == 0;
1387: regs.v = (flgs == flgo) && (flgn != flgo);
1388: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
1389: regs.n = flgn != 0;
1390: put_long(dsta,newv);
1391: }}}}}}}
1392: void op_52a8(UWORD opcode)
1393: {
1394: ULONG srcreg = 1;
1395: ULONG dstreg = (opcode & 7) >> 0;
1396: {{ ULONG src = srcreg;
1397: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
1398: LONG dst = get_long(dsta);
1399: { ULONG newv = dst + src;
1400: { bool flgs = ((LONG)(src)) < 0;
1401: bool flgo = ((LONG)(dst)) < 0;
1402: bool flgn = ((LONG)(newv)) < 0;
1403: regs.z = ((LONG)(newv)) == 0;
1404: regs.v = (flgs == flgo) && (flgn != flgo);
1405: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
1406: regs.n = flgn != 0;
1407: put_long(dsta,newv);
1408: }}}}}}
1409: void op_52b0(UWORD opcode)
1410: {
1411: ULONG srcreg = 1;
1412: ULONG dstreg = (opcode & 7) >> 0;
1413: {{ ULONG src = srcreg;
1414: { CPTR dsta = regs.a[dstreg];
1415: UWORD dstdp = nextiword();
1416: dsta += (LONG)(BYTE)(dstdp & 0xFF);
1417: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
1418: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
1419: dsta += dstdpr;
1420: { LONG dst = get_long(dsta);
1421: { ULONG newv = dst + src;
1422: { bool flgs = ((LONG)(src)) < 0;
1423: bool flgo = ((LONG)(dst)) < 0;
1424: bool flgn = ((LONG)(newv)) < 0;
1425: regs.z = ((LONG)(newv)) == 0;
1426: regs.v = (flgs == flgo) && (flgn != flgo);
1427: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
1428: regs.n = flgn != 0;
1429: put_long(dsta,newv);
1430: }}}}}}}}
1431: void op_52b8(UWORD opcode)
1432: {
1433: ULONG srcreg = 1;
1434: {{ ULONG src = srcreg;
1435: { CPTR dsta = (LONG)(WORD)nextiword();
1436: LONG dst = get_long(dsta);
1437: { ULONG newv = dst + src;
1438: { bool flgs = ((LONG)(src)) < 0;
1439: bool flgo = ((LONG)(dst)) < 0;
1440: bool flgn = ((LONG)(newv)) < 0;
1441: regs.z = ((LONG)(newv)) == 0;
1442: regs.v = (flgs == flgo) && (flgn != flgo);
1443: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
1444: regs.n = flgn != 0;
1445: put_long(dsta,newv);
1446: }}}}}}
1447: void op_52b9(UWORD opcode)
1448: {
1449: ULONG srcreg = 1;
1450: {{ ULONG src = srcreg;
1451: { CPTR dsta = nextilong();
1452: LONG dst = get_long(dsta);
1453: { ULONG newv = dst + src;
1454: { bool flgs = ((LONG)(src)) < 0;
1455: bool flgo = ((LONG)(dst)) < 0;
1456: bool flgn = ((LONG)(newv)) < 0;
1457: regs.z = ((LONG)(newv)) == 0;
1458: regs.v = (flgs == flgo) && (flgn != flgo);
1459: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
1460: regs.n = flgn != 0;
1461: put_long(dsta,newv);
1462: }}}}}}
1463: void op_52c0(UWORD opcode)
1464: {
1465: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1466: {{{ int val = cctrue(2) ? 0xff : 0;
1467: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
1468: }}}}
1469: void op_52c8(UWORD opcode)
1470: {
1471: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1472: {{ WORD src = regs.d[srcreg];
1473: { WORD offs = nextiword();
1474: if (!cctrue(2)) {
1475: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
1476: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
1477: }
1478: }}}}
1479: void op_52d0(UWORD opcode)
1480: {
1481: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1482: {{ CPTR srca = regs.a[srcreg];
1483: { int val = cctrue(2) ? 0xff : 0;
1484: put_byte(srca,val);
1485: }}}}
1486: void op_52d8(UWORD opcode)
1487: {
1488: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1489: {{ CPTR srca = regs.a[srcreg];
1490: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
1491: { int val = cctrue(2) ? 0xff : 0;
1492: put_byte(srca,val);
1493: }}}}}
1494: void op_52e0(UWORD opcode)
1495: {
1496: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1497: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
1498: { CPTR srca = regs.a[srcreg];
1499: { int val = cctrue(2) ? 0xff : 0;
1500: put_byte(srca,val);
1501: }}}}}
1502: void op_52e8(UWORD opcode)
1503: {
1504: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1505: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1506: { int val = cctrue(2) ? 0xff : 0;
1507: put_byte(srca,val);
1508: }}}}
1509: void op_52f0(UWORD opcode)
1510: {
1511: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1512: {{ CPTR srca = regs.a[srcreg];
1513: UWORD srcdp = nextiword();
1514: srca += (LONG)(BYTE)(srcdp & 0xFF);
1515: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1516: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1517: srca += srcdpr;
1518: { int val = cctrue(2) ? 0xff : 0;
1519: put_byte(srca,val);
1520: }}}}}
1521: void op_52f8(UWORD opcode)
1522: {
1523: {{ CPTR srca = (LONG)(WORD)nextiword();
1524: { int val = cctrue(2) ? 0xff : 0;
1525: put_byte(srca,val);
1526: }}}}
1527: void op_52f9(UWORD opcode)
1528: {
1529: {{ CPTR srca = nextilong();
1530: { int val = cctrue(2) ? 0xff : 0;
1531: put_byte(srca,val);
1532: }}}}
1533: void op_5300(UWORD opcode)
1534: {
1535: ULONG srcreg = 1;
1536: ULONG dstreg = (opcode & 7) >> 0;
1537: {{ ULONG src = srcreg;
1538: { BYTE dst = regs.d[dstreg];
1539: { ULONG newv = dst - src;
1540: { bool flgs = ((BYTE)(src)) < 0;
1541: bool flgo = ((BYTE)(dst)) < 0;
1542: bool flgn = ((BYTE)(newv)) < 0;
1543: regs.z = ((BYTE)(newv)) == 0;
1544: regs.v = (flgs != flgo) && (flgn != flgo);
1545: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
1546: regs.n = flgn != 0;
1547: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
1548: }}}}}}
1549: void op_5310(UWORD opcode)
1550: {
1551: ULONG srcreg = 1;
1552: ULONG dstreg = (opcode & 7) >> 0;
1553: {{ ULONG src = srcreg;
1554: { CPTR dsta = regs.a[dstreg];
1555: BYTE dst = get_byte(dsta);
1556: { ULONG newv = dst - src;
1557: { bool flgs = ((BYTE)(src)) < 0;
1558: bool flgo = ((BYTE)(dst)) < 0;
1559: bool flgn = ((BYTE)(newv)) < 0;
1560: regs.z = ((BYTE)(newv)) == 0;
1561: regs.v = (flgs != flgo) && (flgn != flgo);
1562: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
1563: regs.n = flgn != 0;
1564: put_byte(dsta,newv);
1565: }}}}}}
1566: void op_5318(UWORD opcode)
1567: {
1568: ULONG srcreg = 1;
1569: ULONG dstreg = (opcode & 7) >> 0;
1570: {{ ULONG src = srcreg;
1571: { CPTR dsta = regs.a[dstreg];
1572: BYTE dst = get_byte(dsta);
1573: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
1574: { ULONG newv = dst - src;
1575: { bool flgs = ((BYTE)(src)) < 0;
1576: bool flgo = ((BYTE)(dst)) < 0;
1577: bool flgn = ((BYTE)(newv)) < 0;
1578: regs.z = ((BYTE)(newv)) == 0;
1579: regs.v = (flgs != flgo) && (flgn != flgo);
1580: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
1581: regs.n = flgn != 0;
1582: put_byte(dsta,newv);
1583: }}}}}}}
1584: void op_5320(UWORD opcode)
1585: {
1586: ULONG srcreg = 1;
1587: ULONG dstreg = (opcode & 7) >> 0;
1588: {{ ULONG src = srcreg;
1589: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
1590: { CPTR dsta = regs.a[dstreg];
1591: BYTE dst = get_byte(dsta);
1592: { ULONG newv = dst - src;
1593: { bool flgs = ((BYTE)(src)) < 0;
1594: bool flgo = ((BYTE)(dst)) < 0;
1595: bool flgn = ((BYTE)(newv)) < 0;
1596: regs.z = ((BYTE)(newv)) == 0;
1597: regs.v = (flgs != flgo) && (flgn != flgo);
1598: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
1599: regs.n = flgn != 0;
1600: put_byte(dsta,newv);
1601: }}}}}}}
1602: void op_5328(UWORD opcode)
1603: {
1604: ULONG srcreg = 1;
1605: ULONG dstreg = (opcode & 7) >> 0;
1606: {{ ULONG src = srcreg;
1607: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
1608: BYTE dst = get_byte(dsta);
1609: { ULONG newv = dst - src;
1610: { bool flgs = ((BYTE)(src)) < 0;
1611: bool flgo = ((BYTE)(dst)) < 0;
1612: bool flgn = ((BYTE)(newv)) < 0;
1613: regs.z = ((BYTE)(newv)) == 0;
1614: regs.v = (flgs != flgo) && (flgn != flgo);
1615: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
1616: regs.n = flgn != 0;
1617: put_byte(dsta,newv);
1618: }}}}}}
1619: void op_5330(UWORD opcode)
1620: {
1621: ULONG srcreg = 1;
1622: ULONG dstreg = (opcode & 7) >> 0;
1623: {{ ULONG src = srcreg;
1624: { CPTR dsta = regs.a[dstreg];
1625: UWORD dstdp = nextiword();
1626: dsta += (LONG)(BYTE)(dstdp & 0xFF);
1627: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
1628: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
1629: dsta += dstdpr;
1630: { BYTE dst = get_byte(dsta);
1631: { ULONG newv = dst - src;
1632: { bool flgs = ((BYTE)(src)) < 0;
1633: bool flgo = ((BYTE)(dst)) < 0;
1634: bool flgn = ((BYTE)(newv)) < 0;
1635: regs.z = ((BYTE)(newv)) == 0;
1636: regs.v = (flgs != flgo) && (flgn != flgo);
1637: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
1638: regs.n = flgn != 0;
1639: put_byte(dsta,newv);
1640: }}}}}}}}
1641: void op_5338(UWORD opcode)
1642: {
1643: ULONG srcreg = 1;
1644: {{ ULONG src = srcreg;
1645: { CPTR dsta = (LONG)(WORD)nextiword();
1646: BYTE dst = get_byte(dsta);
1647: { ULONG newv = dst - src;
1648: { bool flgs = ((BYTE)(src)) < 0;
1649: bool flgo = ((BYTE)(dst)) < 0;
1650: bool flgn = ((BYTE)(newv)) < 0;
1651: regs.z = ((BYTE)(newv)) == 0;
1652: regs.v = (flgs != flgo) && (flgn != flgo);
1653: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
1654: regs.n = flgn != 0;
1655: put_byte(dsta,newv);
1656: }}}}}}
1657: void op_5339(UWORD opcode)
1658: {
1659: ULONG srcreg = 1;
1660: {{ ULONG src = srcreg;
1661: { CPTR dsta = nextilong();
1662: BYTE dst = get_byte(dsta);
1663: { ULONG newv = dst - src;
1664: { bool flgs = ((BYTE)(src)) < 0;
1665: bool flgo = ((BYTE)(dst)) < 0;
1666: bool flgn = ((BYTE)(newv)) < 0;
1667: regs.z = ((BYTE)(newv)) == 0;
1668: regs.v = (flgs != flgo) && (flgn != flgo);
1669: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
1670: regs.n = flgn != 0;
1671: put_byte(dsta,newv);
1672: }}}}}}
1673: void op_5340(UWORD opcode)
1674: {
1675: ULONG srcreg = 1;
1676: ULONG dstreg = (opcode & 7) >> 0;
1677: {{ ULONG src = srcreg;
1678: { WORD dst = regs.d[dstreg];
1679: { ULONG newv = dst - src;
1680: { bool flgs = ((WORD)(src)) < 0;
1681: bool flgo = ((WORD)(dst)) < 0;
1682: bool flgn = ((WORD)(newv)) < 0;
1683: regs.z = ((WORD)(newv)) == 0;
1684: regs.v = (flgs != flgo) && (flgn != flgo);
1685: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
1686: regs.n = flgn != 0;
1687: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
1688: }}}}}}
1689: void op_5348(UWORD opcode)
1690: {
1691: ULONG srcreg = 1;
1692: ULONG dstreg = (opcode & 7) >> 0;
1693: {{ ULONG src = srcreg;
1694: { LONG dst = regs.a[dstreg];
1695: { ULONG newv = dst - src;
1696: regs.a[dstreg] = (newv);
1697: }}}}}
1698: void op_5350(UWORD opcode)
1699: {
1700: ULONG srcreg = 1;
1701: ULONG dstreg = (opcode & 7) >> 0;
1702: {{ ULONG src = srcreg;
1703: { CPTR dsta = regs.a[dstreg];
1704: WORD dst = get_word(dsta);
1705: { ULONG newv = dst - src;
1706: { bool flgs = ((WORD)(src)) < 0;
1707: bool flgo = ((WORD)(dst)) < 0;
1708: bool flgn = ((WORD)(newv)) < 0;
1709: regs.z = ((WORD)(newv)) == 0;
1710: regs.v = (flgs != flgo) && (flgn != flgo);
1711: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
1712: regs.n = flgn != 0;
1713: put_word(dsta,newv);
1714: }}}}}}
1715: void op_5358(UWORD opcode)
1716: {
1717: ULONG srcreg = 1;
1718: ULONG dstreg = (opcode & 7) >> 0;
1719: {{ ULONG src = srcreg;
1720: { CPTR dsta = regs.a[dstreg];
1721: WORD dst = get_word(dsta);
1722: { regs.a[dstreg] += 2;
1723: { ULONG newv = dst - src;
1724: { bool flgs = ((WORD)(src)) < 0;
1725: bool flgo = ((WORD)(dst)) < 0;
1726: bool flgn = ((WORD)(newv)) < 0;
1727: regs.z = ((WORD)(newv)) == 0;
1728: regs.v = (flgs != flgo) && (flgn != flgo);
1729: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
1730: regs.n = flgn != 0;
1731: put_word(dsta,newv);
1732: }}}}}}}
1733: void op_5360(UWORD opcode)
1734: {
1735: ULONG srcreg = 1;
1736: ULONG dstreg = (opcode & 7) >> 0;
1737: {{ ULONG src = srcreg;
1738: { regs.a[dstreg] -= 2;
1739: { CPTR dsta = regs.a[dstreg];
1740: WORD dst = get_word(dsta);
1741: { ULONG newv = dst - src;
1742: { bool flgs = ((WORD)(src)) < 0;
1743: bool flgo = ((WORD)(dst)) < 0;
1744: bool flgn = ((WORD)(newv)) < 0;
1745: regs.z = ((WORD)(newv)) == 0;
1746: regs.v = (flgs != flgo) && (flgn != flgo);
1747: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
1748: regs.n = flgn != 0;
1749: put_word(dsta,newv);
1750: }}}}}}}
1751: void op_5368(UWORD opcode)
1752: {
1753: ULONG srcreg = 1;
1754: ULONG dstreg = (opcode & 7) >> 0;
1755: {{ ULONG src = srcreg;
1756: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
1757: WORD dst = get_word(dsta);
1758: { ULONG newv = dst - src;
1759: { bool flgs = ((WORD)(src)) < 0;
1760: bool flgo = ((WORD)(dst)) < 0;
1761: bool flgn = ((WORD)(newv)) < 0;
1762: regs.z = ((WORD)(newv)) == 0;
1763: regs.v = (flgs != flgo) && (flgn != flgo);
1764: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
1765: regs.n = flgn != 0;
1766: put_word(dsta,newv);
1767: }}}}}}
1768: void op_5370(UWORD opcode)
1769: {
1770: ULONG srcreg = 1;
1771: ULONG dstreg = (opcode & 7) >> 0;
1772: {{ ULONG src = srcreg;
1773: { CPTR dsta = regs.a[dstreg];
1774: UWORD dstdp = nextiword();
1775: dsta += (LONG)(BYTE)(dstdp & 0xFF);
1776: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
1777: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
1778: dsta += dstdpr;
1779: { WORD dst = get_word(dsta);
1780: { ULONG newv = dst - src;
1781: { bool flgs = ((WORD)(src)) < 0;
1782: bool flgo = ((WORD)(dst)) < 0;
1783: bool flgn = ((WORD)(newv)) < 0;
1784: regs.z = ((WORD)(newv)) == 0;
1785: regs.v = (flgs != flgo) && (flgn != flgo);
1786: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
1787: regs.n = flgn != 0;
1788: put_word(dsta,newv);
1789: }}}}}}}}
1790: void op_5378(UWORD opcode)
1791: {
1792: ULONG srcreg = 1;
1793: {{ ULONG src = srcreg;
1794: { CPTR dsta = (LONG)(WORD)nextiword();
1795: WORD dst = get_word(dsta);
1796: { ULONG newv = dst - src;
1797: { bool flgs = ((WORD)(src)) < 0;
1798: bool flgo = ((WORD)(dst)) < 0;
1799: bool flgn = ((WORD)(newv)) < 0;
1800: regs.z = ((WORD)(newv)) == 0;
1801: regs.v = (flgs != flgo) && (flgn != flgo);
1802: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
1803: regs.n = flgn != 0;
1804: put_word(dsta,newv);
1805: }}}}}}
1806: void op_5379(UWORD opcode)
1807: {
1808: ULONG srcreg = 1;
1809: {{ ULONG src = srcreg;
1810: { CPTR dsta = nextilong();
1811: WORD dst = get_word(dsta);
1812: { ULONG newv = dst - src;
1813: { bool flgs = ((WORD)(src)) < 0;
1814: bool flgo = ((WORD)(dst)) < 0;
1815: bool flgn = ((WORD)(newv)) < 0;
1816: regs.z = ((WORD)(newv)) == 0;
1817: regs.v = (flgs != flgo) && (flgn != flgo);
1818: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
1819: regs.n = flgn != 0;
1820: put_word(dsta,newv);
1821: }}}}}}
1822: void op_5380(UWORD opcode)
1823: {
1824: ULONG srcreg = 1;
1825: ULONG dstreg = (opcode & 7) >> 0;
1826: {{ ULONG src = srcreg;
1827: { LONG dst = regs.d[dstreg];
1828: { ULONG newv = dst - src;
1829: { bool flgs = ((LONG)(src)) < 0;
1830: bool flgo = ((LONG)(dst)) < 0;
1831: bool flgn = ((LONG)(newv)) < 0;
1832: regs.z = ((LONG)(newv)) == 0;
1833: regs.v = (flgs != flgo) && (flgn != flgo);
1834: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
1835: regs.n = flgn != 0;
1836: regs.d[dstreg] = (newv);
1837: }}}}}}
1838: void op_5388(UWORD opcode)
1839: {
1840: ULONG srcreg = 1;
1841: ULONG dstreg = (opcode & 7) >> 0;
1842: {{ ULONG src = srcreg;
1843: { LONG dst = regs.a[dstreg];
1844: { ULONG newv = dst - src;
1845: regs.a[dstreg] = (newv);
1846: }}}}}
1847: void op_5390(UWORD opcode)
1848: {
1849: ULONG srcreg = 1;
1850: ULONG dstreg = (opcode & 7) >> 0;
1851: {{ ULONG src = srcreg;
1852: { CPTR dsta = regs.a[dstreg];
1853: LONG dst = get_long(dsta);
1854: { ULONG newv = dst - src;
1855: { bool flgs = ((LONG)(src)) < 0;
1856: bool flgo = ((LONG)(dst)) < 0;
1857: bool flgn = ((LONG)(newv)) < 0;
1858: regs.z = ((LONG)(newv)) == 0;
1859: regs.v = (flgs != flgo) && (flgn != flgo);
1860: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
1861: regs.n = flgn != 0;
1862: put_long(dsta,newv);
1863: }}}}}}
1864: void op_5398(UWORD opcode)
1865: {
1866: ULONG srcreg = 1;
1867: ULONG dstreg = (opcode & 7) >> 0;
1868: {{ ULONG src = srcreg;
1869: { CPTR dsta = regs.a[dstreg];
1870: LONG dst = get_long(dsta);
1871: { regs.a[dstreg] += 4;
1872: { ULONG newv = dst - src;
1873: { bool flgs = ((LONG)(src)) < 0;
1874: bool flgo = ((LONG)(dst)) < 0;
1875: bool flgn = ((LONG)(newv)) < 0;
1876: regs.z = ((LONG)(newv)) == 0;
1877: regs.v = (flgs != flgo) && (flgn != flgo);
1878: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
1879: regs.n = flgn != 0;
1880: put_long(dsta,newv);
1881: }}}}}}}
1882: void op_53a0(UWORD opcode)
1883: {
1884: ULONG srcreg = 1;
1885: ULONG dstreg = (opcode & 7) >> 0;
1886: {{ ULONG src = srcreg;
1887: { regs.a[dstreg] -= 4;
1888: { CPTR dsta = regs.a[dstreg];
1889: LONG dst = get_long(dsta);
1890: { ULONG newv = dst - src;
1891: { bool flgs = ((LONG)(src)) < 0;
1892: bool flgo = ((LONG)(dst)) < 0;
1893: bool flgn = ((LONG)(newv)) < 0;
1894: regs.z = ((LONG)(newv)) == 0;
1895: regs.v = (flgs != flgo) && (flgn != flgo);
1896: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
1897: regs.n = flgn != 0;
1898: put_long(dsta,newv);
1899: }}}}}}}
1900: void op_53a8(UWORD opcode)
1901: {
1902: ULONG srcreg = 1;
1903: ULONG dstreg = (opcode & 7) >> 0;
1904: {{ ULONG src = srcreg;
1905: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
1906: LONG dst = get_long(dsta);
1907: { ULONG newv = dst - src;
1908: { bool flgs = ((LONG)(src)) < 0;
1909: bool flgo = ((LONG)(dst)) < 0;
1910: bool flgn = ((LONG)(newv)) < 0;
1911: regs.z = ((LONG)(newv)) == 0;
1912: regs.v = (flgs != flgo) && (flgn != flgo);
1913: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
1914: regs.n = flgn != 0;
1915: put_long(dsta,newv);
1916: }}}}}}
1917: void op_53b0(UWORD opcode)
1918: {
1919: ULONG srcreg = 1;
1920: ULONG dstreg = (opcode & 7) >> 0;
1921: {{ ULONG src = srcreg;
1922: { CPTR dsta = regs.a[dstreg];
1923: UWORD dstdp = nextiword();
1924: dsta += (LONG)(BYTE)(dstdp & 0xFF);
1925: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
1926: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
1927: dsta += dstdpr;
1928: { LONG dst = get_long(dsta);
1929: { ULONG newv = dst - src;
1930: { bool flgs = ((LONG)(src)) < 0;
1931: bool flgo = ((LONG)(dst)) < 0;
1932: bool flgn = ((LONG)(newv)) < 0;
1933: regs.z = ((LONG)(newv)) == 0;
1934: regs.v = (flgs != flgo) && (flgn != flgo);
1935: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
1936: regs.n = flgn != 0;
1937: put_long(dsta,newv);
1938: }}}}}}}}
1939: void op_53b8(UWORD opcode)
1940: {
1941: ULONG srcreg = 1;
1942: {{ ULONG src = srcreg;
1943: { CPTR dsta = (LONG)(WORD)nextiword();
1944: LONG dst = get_long(dsta);
1945: { ULONG newv = dst - src;
1946: { bool flgs = ((LONG)(src)) < 0;
1947: bool flgo = ((LONG)(dst)) < 0;
1948: bool flgn = ((LONG)(newv)) < 0;
1949: regs.z = ((LONG)(newv)) == 0;
1950: regs.v = (flgs != flgo) && (flgn != flgo);
1951: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
1952: regs.n = flgn != 0;
1953: put_long(dsta,newv);
1954: }}}}}}
1955: void op_53b9(UWORD opcode)
1956: {
1957: ULONG srcreg = 1;
1958: {{ ULONG src = srcreg;
1959: { CPTR dsta = nextilong();
1960: LONG dst = get_long(dsta);
1961: { ULONG newv = dst - src;
1962: { bool flgs = ((LONG)(src)) < 0;
1963: bool flgo = ((LONG)(dst)) < 0;
1964: bool flgn = ((LONG)(newv)) < 0;
1965: regs.z = ((LONG)(newv)) == 0;
1966: regs.v = (flgs != flgo) && (flgn != flgo);
1967: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
1968: regs.n = flgn != 0;
1969: put_long(dsta,newv);
1970: }}}}}}
1971: void op_53c0(UWORD opcode)
1972: {
1973: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1974: {{{ int val = cctrue(3) ? 0xff : 0;
1975: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
1976: }}}}
1977: void op_53c8(UWORD opcode)
1978: {
1979: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1980: {{ WORD src = regs.d[srcreg];
1981: { WORD offs = nextiword();
1982: if (!cctrue(3)) {
1983: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
1984: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
1985: }
1986: }}}}
1987: void op_53d0(UWORD opcode)
1988: {
1989: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1990: {{ CPTR srca = regs.a[srcreg];
1991: { int val = cctrue(3) ? 0xff : 0;
1992: put_byte(srca,val);
1993: }}}}
1994: void op_53d8(UWORD opcode)
1995: {
1996: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1997: {{ CPTR srca = regs.a[srcreg];
1998: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
1999: { int val = cctrue(3) ? 0xff : 0;
2000: put_byte(srca,val);
2001: }}}}}
2002: void op_53e0(UWORD opcode)
2003: {
2004: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2005: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
2006: { CPTR srca = regs.a[srcreg];
2007: { int val = cctrue(3) ? 0xff : 0;
2008: put_byte(srca,val);
2009: }}}}}
2010: void op_53e8(UWORD opcode)
2011: {
2012: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2013: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2014: { int val = cctrue(3) ? 0xff : 0;
2015: put_byte(srca,val);
2016: }}}}
2017: void op_53f0(UWORD opcode)
2018: {
2019: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2020: {{ CPTR srca = regs.a[srcreg];
2021: UWORD srcdp = nextiword();
2022: srca += (LONG)(BYTE)(srcdp & 0xFF);
2023: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2024: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2025: srca += srcdpr;
2026: { int val = cctrue(3) ? 0xff : 0;
2027: put_byte(srca,val);
2028: }}}}}
2029: void op_53f8(UWORD opcode)
2030: {
2031: {{ CPTR srca = (LONG)(WORD)nextiword();
2032: { int val = cctrue(3) ? 0xff : 0;
2033: put_byte(srca,val);
2034: }}}}
2035: void op_53f9(UWORD opcode)
2036: {
2037: {{ CPTR srca = nextilong();
2038: { int val = cctrue(3) ? 0xff : 0;
2039: put_byte(srca,val);
2040: }}}}
2041: void op_5400(UWORD opcode)
2042: {
2043: ULONG srcreg = 2;
2044: ULONG dstreg = (opcode & 7) >> 0;
2045: {{ ULONG src = srcreg;
2046: { BYTE dst = regs.d[dstreg];
2047: { ULONG newv = dst + src;
2048: { bool flgs = ((BYTE)(src)) < 0;
2049: bool flgo = ((BYTE)(dst)) < 0;
2050: bool flgn = ((BYTE)(newv)) < 0;
2051: regs.z = ((BYTE)(newv)) == 0;
2052: regs.v = (flgs == flgo) && (flgn != flgo);
2053: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
2054: regs.n = flgn != 0;
2055: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
2056: }}}}}}
2057: void op_5410(UWORD opcode)
2058: {
2059: ULONG srcreg = 2;
2060: ULONG dstreg = (opcode & 7) >> 0;
2061: {{ ULONG src = srcreg;
2062: { CPTR dsta = regs.a[dstreg];
2063: BYTE dst = get_byte(dsta);
2064: { ULONG newv = dst + src;
2065: { bool flgs = ((BYTE)(src)) < 0;
2066: bool flgo = ((BYTE)(dst)) < 0;
2067: bool flgn = ((BYTE)(newv)) < 0;
2068: regs.z = ((BYTE)(newv)) == 0;
2069: regs.v = (flgs == flgo) && (flgn != flgo);
2070: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
2071: regs.n = flgn != 0;
2072: put_byte(dsta,newv);
2073: }}}}}}
2074: void op_5418(UWORD opcode)
2075: {
2076: ULONG srcreg = 2;
2077: ULONG dstreg = (opcode & 7) >> 0;
2078: {{ ULONG src = srcreg;
2079: { CPTR dsta = regs.a[dstreg];
2080: BYTE dst = get_byte(dsta);
2081: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
2082: { ULONG newv = dst + src;
2083: { bool flgs = ((BYTE)(src)) < 0;
2084: bool flgo = ((BYTE)(dst)) < 0;
2085: bool flgn = ((BYTE)(newv)) < 0;
2086: regs.z = ((BYTE)(newv)) == 0;
2087: regs.v = (flgs == flgo) && (flgn != flgo);
2088: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
2089: regs.n = flgn != 0;
2090: put_byte(dsta,newv);
2091: }}}}}}}
2092: void op_5420(UWORD opcode)
2093: {
2094: ULONG srcreg = 2;
2095: ULONG dstreg = (opcode & 7) >> 0;
2096: {{ ULONG src = srcreg;
2097: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
2098: { CPTR dsta = regs.a[dstreg];
2099: BYTE dst = get_byte(dsta);
2100: { ULONG newv = dst + src;
2101: { bool flgs = ((BYTE)(src)) < 0;
2102: bool flgo = ((BYTE)(dst)) < 0;
2103: bool flgn = ((BYTE)(newv)) < 0;
2104: regs.z = ((BYTE)(newv)) == 0;
2105: regs.v = (flgs == flgo) && (flgn != flgo);
2106: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
2107: regs.n = flgn != 0;
2108: put_byte(dsta,newv);
2109: }}}}}}}
2110: void op_5428(UWORD opcode)
2111: {
2112: ULONG srcreg = 2;
2113: ULONG dstreg = (opcode & 7) >> 0;
2114: {{ ULONG src = srcreg;
2115: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
2116: BYTE dst = get_byte(dsta);
2117: { ULONG newv = dst + src;
2118: { bool flgs = ((BYTE)(src)) < 0;
2119: bool flgo = ((BYTE)(dst)) < 0;
2120: bool flgn = ((BYTE)(newv)) < 0;
2121: regs.z = ((BYTE)(newv)) == 0;
2122: regs.v = (flgs == flgo) && (flgn != flgo);
2123: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
2124: regs.n = flgn != 0;
2125: put_byte(dsta,newv);
2126: }}}}}}
2127: void op_5430(UWORD opcode)
2128: {
2129: ULONG srcreg = 2;
2130: ULONG dstreg = (opcode & 7) >> 0;
2131: {{ ULONG src = srcreg;
2132: { CPTR dsta = regs.a[dstreg];
2133: UWORD dstdp = nextiword();
2134: dsta += (LONG)(BYTE)(dstdp & 0xFF);
2135: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
2136: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
2137: dsta += dstdpr;
2138: { BYTE dst = get_byte(dsta);
2139: { ULONG newv = dst + src;
2140: { bool flgs = ((BYTE)(src)) < 0;
2141: bool flgo = ((BYTE)(dst)) < 0;
2142: bool flgn = ((BYTE)(newv)) < 0;
2143: regs.z = ((BYTE)(newv)) == 0;
2144: regs.v = (flgs == flgo) && (flgn != flgo);
2145: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
2146: regs.n = flgn != 0;
2147: put_byte(dsta,newv);
2148: }}}}}}}}
2149: void op_5438(UWORD opcode)
2150: {
2151: ULONG srcreg = 2;
2152: {{ ULONG src = srcreg;
2153: { CPTR dsta = (LONG)(WORD)nextiword();
2154: BYTE dst = get_byte(dsta);
2155: { ULONG newv = dst + src;
2156: { bool flgs = ((BYTE)(src)) < 0;
2157: bool flgo = ((BYTE)(dst)) < 0;
2158: bool flgn = ((BYTE)(newv)) < 0;
2159: regs.z = ((BYTE)(newv)) == 0;
2160: regs.v = (flgs == flgo) && (flgn != flgo);
2161: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
2162: regs.n = flgn != 0;
2163: put_byte(dsta,newv);
2164: }}}}}}
2165: void op_5439(UWORD opcode)
2166: {
2167: ULONG srcreg = 2;
2168: {{ ULONG src = srcreg;
2169: { CPTR dsta = nextilong();
2170: BYTE dst = get_byte(dsta);
2171: { ULONG newv = dst + src;
2172: { bool flgs = ((BYTE)(src)) < 0;
2173: bool flgo = ((BYTE)(dst)) < 0;
2174: bool flgn = ((BYTE)(newv)) < 0;
2175: regs.z = ((BYTE)(newv)) == 0;
2176: regs.v = (flgs == flgo) && (flgn != flgo);
2177: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
2178: regs.n = flgn != 0;
2179: put_byte(dsta,newv);
2180: }}}}}}
2181: void op_5440(UWORD opcode)
2182: {
2183: ULONG srcreg = 2;
2184: ULONG dstreg = (opcode & 7) >> 0;
2185: {{ ULONG src = srcreg;
2186: { WORD dst = regs.d[dstreg];
2187: { ULONG newv = dst + src;
2188: { bool flgs = ((WORD)(src)) < 0;
2189: bool flgo = ((WORD)(dst)) < 0;
2190: bool flgn = ((WORD)(newv)) < 0;
2191: regs.z = ((WORD)(newv)) == 0;
2192: regs.v = (flgs == flgo) && (flgn != flgo);
2193: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
2194: regs.n = flgn != 0;
2195: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
2196: }}}}}}
2197: void op_5448(UWORD opcode)
2198: {
2199: ULONG srcreg = 2;
2200: ULONG dstreg = (opcode & 7) >> 0;
2201: {{ ULONG src = srcreg;
2202: { LONG dst = regs.a[dstreg];
2203: { ULONG newv = dst + src;
2204: regs.a[dstreg] = (newv);
2205: }}}}}
2206: void op_5450(UWORD opcode)
2207: {
2208: ULONG srcreg = 2;
2209: ULONG dstreg = (opcode & 7) >> 0;
2210: {{ ULONG src = srcreg;
2211: { CPTR dsta = regs.a[dstreg];
2212: WORD dst = get_word(dsta);
2213: { ULONG newv = dst + src;
2214: { bool flgs = ((WORD)(src)) < 0;
2215: bool flgo = ((WORD)(dst)) < 0;
2216: bool flgn = ((WORD)(newv)) < 0;
2217: regs.z = ((WORD)(newv)) == 0;
2218: regs.v = (flgs == flgo) && (flgn != flgo);
2219: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
2220: regs.n = flgn != 0;
2221: put_word(dsta,newv);
2222: }}}}}}
2223: void op_5458(UWORD opcode)
2224: {
2225: ULONG srcreg = 2;
2226: ULONG dstreg = (opcode & 7) >> 0;
2227: {{ ULONG src = srcreg;
2228: { CPTR dsta = regs.a[dstreg];
2229: WORD dst = get_word(dsta);
2230: { regs.a[dstreg] += 2;
2231: { ULONG newv = dst + src;
2232: { bool flgs = ((WORD)(src)) < 0;
2233: bool flgo = ((WORD)(dst)) < 0;
2234: bool flgn = ((WORD)(newv)) < 0;
2235: regs.z = ((WORD)(newv)) == 0;
2236: regs.v = (flgs == flgo) && (flgn != flgo);
2237: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
2238: regs.n = flgn != 0;
2239: put_word(dsta,newv);
2240: }}}}}}}
2241: void op_5460(UWORD opcode)
2242: {
2243: ULONG srcreg = 2;
2244: ULONG dstreg = (opcode & 7) >> 0;
2245: {{ ULONG src = srcreg;
2246: { regs.a[dstreg] -= 2;
2247: { CPTR dsta = regs.a[dstreg];
2248: WORD dst = get_word(dsta);
2249: { ULONG newv = dst + src;
2250: { bool flgs = ((WORD)(src)) < 0;
2251: bool flgo = ((WORD)(dst)) < 0;
2252: bool flgn = ((WORD)(newv)) < 0;
2253: regs.z = ((WORD)(newv)) == 0;
2254: regs.v = (flgs == flgo) && (flgn != flgo);
2255: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
2256: regs.n = flgn != 0;
2257: put_word(dsta,newv);
2258: }}}}}}}
2259: void op_5468(UWORD opcode)
2260: {
2261: ULONG srcreg = 2;
2262: ULONG dstreg = (opcode & 7) >> 0;
2263: {{ ULONG src = srcreg;
2264: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
2265: WORD dst = get_word(dsta);
2266: { ULONG newv = dst + src;
2267: { bool flgs = ((WORD)(src)) < 0;
2268: bool flgo = ((WORD)(dst)) < 0;
2269: bool flgn = ((WORD)(newv)) < 0;
2270: regs.z = ((WORD)(newv)) == 0;
2271: regs.v = (flgs == flgo) && (flgn != flgo);
2272: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
2273: regs.n = flgn != 0;
2274: put_word(dsta,newv);
2275: }}}}}}
2276: void op_5470(UWORD opcode)
2277: {
2278: ULONG srcreg = 2;
2279: ULONG dstreg = (opcode & 7) >> 0;
2280: {{ ULONG src = srcreg;
2281: { CPTR dsta = regs.a[dstreg];
2282: UWORD dstdp = nextiword();
2283: dsta += (LONG)(BYTE)(dstdp & 0xFF);
2284: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
2285: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
2286: dsta += dstdpr;
2287: { WORD dst = get_word(dsta);
2288: { ULONG newv = dst + src;
2289: { bool flgs = ((WORD)(src)) < 0;
2290: bool flgo = ((WORD)(dst)) < 0;
2291: bool flgn = ((WORD)(newv)) < 0;
2292: regs.z = ((WORD)(newv)) == 0;
2293: regs.v = (flgs == flgo) && (flgn != flgo);
2294: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
2295: regs.n = flgn != 0;
2296: put_word(dsta,newv);
2297: }}}}}}}}
2298: void op_5478(UWORD opcode)
2299: {
2300: ULONG srcreg = 2;
2301: {{ ULONG src = srcreg;
2302: { CPTR dsta = (LONG)(WORD)nextiword();
2303: WORD dst = get_word(dsta);
2304: { ULONG newv = dst + src;
2305: { bool flgs = ((WORD)(src)) < 0;
2306: bool flgo = ((WORD)(dst)) < 0;
2307: bool flgn = ((WORD)(newv)) < 0;
2308: regs.z = ((WORD)(newv)) == 0;
2309: regs.v = (flgs == flgo) && (flgn != flgo);
2310: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
2311: regs.n = flgn != 0;
2312: put_word(dsta,newv);
2313: }}}}}}
2314: void op_5479(UWORD opcode)
2315: {
2316: ULONG srcreg = 2;
2317: {{ ULONG src = srcreg;
2318: { CPTR dsta = nextilong();
2319: WORD dst = get_word(dsta);
2320: { ULONG newv = dst + src;
2321: { bool flgs = ((WORD)(src)) < 0;
2322: bool flgo = ((WORD)(dst)) < 0;
2323: bool flgn = ((WORD)(newv)) < 0;
2324: regs.z = ((WORD)(newv)) == 0;
2325: regs.v = (flgs == flgo) && (flgn != flgo);
2326: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
2327: regs.n = flgn != 0;
2328: put_word(dsta,newv);
2329: }}}}}}
2330: void op_5480(UWORD opcode)
2331: {
2332: ULONG srcreg = 2;
2333: ULONG dstreg = (opcode & 7) >> 0;
2334: {{ ULONG src = srcreg;
2335: { LONG dst = regs.d[dstreg];
2336: { ULONG newv = dst + src;
2337: { bool flgs = ((LONG)(src)) < 0;
2338: bool flgo = ((LONG)(dst)) < 0;
2339: bool flgn = ((LONG)(newv)) < 0;
2340: regs.z = ((LONG)(newv)) == 0;
2341: regs.v = (flgs == flgo) && (flgn != flgo);
2342: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
2343: regs.n = flgn != 0;
2344: regs.d[dstreg] = (newv);
2345: }}}}}}
2346: void op_5488(UWORD opcode)
2347: {
2348: ULONG srcreg = 2;
2349: ULONG dstreg = (opcode & 7) >> 0;
2350: {{ ULONG src = srcreg;
2351: { LONG dst = regs.a[dstreg];
2352: { ULONG newv = dst + src;
2353: regs.a[dstreg] = (newv);
2354: }}}}}
2355: void op_5490(UWORD opcode)
2356: {
2357: ULONG srcreg = 2;
2358: ULONG dstreg = (opcode & 7) >> 0;
2359: {{ ULONG src = srcreg;
2360: { CPTR dsta = regs.a[dstreg];
2361: LONG dst = get_long(dsta);
2362: { ULONG newv = dst + src;
2363: { bool flgs = ((LONG)(src)) < 0;
2364: bool flgo = ((LONG)(dst)) < 0;
2365: bool flgn = ((LONG)(newv)) < 0;
2366: regs.z = ((LONG)(newv)) == 0;
2367: regs.v = (flgs == flgo) && (flgn != flgo);
2368: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
2369: regs.n = flgn != 0;
2370: put_long(dsta,newv);
2371: }}}}}}
2372: void op_5498(UWORD opcode)
2373: {
2374: ULONG srcreg = 2;
2375: ULONG dstreg = (opcode & 7) >> 0;
2376: {{ ULONG src = srcreg;
2377: { CPTR dsta = regs.a[dstreg];
2378: LONG dst = get_long(dsta);
2379: { regs.a[dstreg] += 4;
2380: { ULONG newv = dst + src;
2381: { bool flgs = ((LONG)(src)) < 0;
2382: bool flgo = ((LONG)(dst)) < 0;
2383: bool flgn = ((LONG)(newv)) < 0;
2384: regs.z = ((LONG)(newv)) == 0;
2385: regs.v = (flgs == flgo) && (flgn != flgo);
2386: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
2387: regs.n = flgn != 0;
2388: put_long(dsta,newv);
2389: }}}}}}}
2390: void op_54a0(UWORD opcode)
2391: {
2392: ULONG srcreg = 2;
2393: ULONG dstreg = (opcode & 7) >> 0;
2394: {{ ULONG src = srcreg;
2395: { regs.a[dstreg] -= 4;
2396: { CPTR dsta = regs.a[dstreg];
2397: LONG dst = get_long(dsta);
2398: { ULONG newv = dst + src;
2399: { bool flgs = ((LONG)(src)) < 0;
2400: bool flgo = ((LONG)(dst)) < 0;
2401: bool flgn = ((LONG)(newv)) < 0;
2402: regs.z = ((LONG)(newv)) == 0;
2403: regs.v = (flgs == flgo) && (flgn != flgo);
2404: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
2405: regs.n = flgn != 0;
2406: put_long(dsta,newv);
2407: }}}}}}}
2408: void op_54a8(UWORD opcode)
2409: {
2410: ULONG srcreg = 2;
2411: ULONG dstreg = (opcode & 7) >> 0;
2412: {{ ULONG src = srcreg;
2413: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
2414: LONG dst = get_long(dsta);
2415: { ULONG newv = dst + src;
2416: { bool flgs = ((LONG)(src)) < 0;
2417: bool flgo = ((LONG)(dst)) < 0;
2418: bool flgn = ((LONG)(newv)) < 0;
2419: regs.z = ((LONG)(newv)) == 0;
2420: regs.v = (flgs == flgo) && (flgn != flgo);
2421: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
2422: regs.n = flgn != 0;
2423: put_long(dsta,newv);
2424: }}}}}}
2425: void op_54b0(UWORD opcode)
2426: {
2427: ULONG srcreg = 2;
2428: ULONG dstreg = (opcode & 7) >> 0;
2429: {{ ULONG src = srcreg;
2430: { CPTR dsta = regs.a[dstreg];
2431: UWORD dstdp = nextiword();
2432: dsta += (LONG)(BYTE)(dstdp & 0xFF);
2433: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
2434: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
2435: dsta += dstdpr;
2436: { LONG dst = get_long(dsta);
2437: { ULONG newv = dst + src;
2438: { bool flgs = ((LONG)(src)) < 0;
2439: bool flgo = ((LONG)(dst)) < 0;
2440: bool flgn = ((LONG)(newv)) < 0;
2441: regs.z = ((LONG)(newv)) == 0;
2442: regs.v = (flgs == flgo) && (flgn != flgo);
2443: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
2444: regs.n = flgn != 0;
2445: put_long(dsta,newv);
2446: }}}}}}}}
2447: void op_54b8(UWORD opcode)
2448: {
2449: ULONG srcreg = 2;
2450: {{ ULONG src = srcreg;
2451: { CPTR dsta = (LONG)(WORD)nextiword();
2452: LONG dst = get_long(dsta);
2453: { ULONG newv = dst + src;
2454: { bool flgs = ((LONG)(src)) < 0;
2455: bool flgo = ((LONG)(dst)) < 0;
2456: bool flgn = ((LONG)(newv)) < 0;
2457: regs.z = ((LONG)(newv)) == 0;
2458: regs.v = (flgs == flgo) && (flgn != flgo);
2459: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
2460: regs.n = flgn != 0;
2461: put_long(dsta,newv);
2462: }}}}}}
2463: void op_54b9(UWORD opcode)
2464: {
2465: ULONG srcreg = 2;
2466: {{ ULONG src = srcreg;
2467: { CPTR dsta = nextilong();
2468: LONG dst = get_long(dsta);
2469: { ULONG newv = dst + src;
2470: { bool flgs = ((LONG)(src)) < 0;
2471: bool flgo = ((LONG)(dst)) < 0;
2472: bool flgn = ((LONG)(newv)) < 0;
2473: regs.z = ((LONG)(newv)) == 0;
2474: regs.v = (flgs == flgo) && (flgn != flgo);
2475: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
2476: regs.n = flgn != 0;
2477: put_long(dsta,newv);
2478: }}}}}}
2479: void op_54c0(UWORD opcode)
2480: {
2481: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2482: {{{ int val = cctrue(4) ? 0xff : 0;
2483: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
2484: }}}}
2485: void op_54c8(UWORD opcode)
2486: {
2487: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2488: {{ WORD src = regs.d[srcreg];
2489: { WORD offs = nextiword();
2490: if (!cctrue(4)) {
2491: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
2492: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
2493: }
2494: }}}}
2495: void op_54d0(UWORD opcode)
2496: {
2497: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2498: {{ CPTR srca = regs.a[srcreg];
2499: { int val = cctrue(4) ? 0xff : 0;
2500: put_byte(srca,val);
2501: }}}}
2502: void op_54d8(UWORD opcode)
2503: {
2504: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2505: {{ CPTR srca = regs.a[srcreg];
2506: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
2507: { int val = cctrue(4) ? 0xff : 0;
2508: put_byte(srca,val);
2509: }}}}}
2510: void op_54e0(UWORD opcode)
2511: {
2512: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2513: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
2514: { CPTR srca = regs.a[srcreg];
2515: { int val = cctrue(4) ? 0xff : 0;
2516: put_byte(srca,val);
2517: }}}}}
2518: void op_54e8(UWORD opcode)
2519: {
2520: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2521: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2522: { int val = cctrue(4) ? 0xff : 0;
2523: put_byte(srca,val);
2524: }}}}
2525: void op_54f0(UWORD opcode)
2526: {
2527: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2528: {{ CPTR srca = regs.a[srcreg];
2529: UWORD srcdp = nextiword();
2530: srca += (LONG)(BYTE)(srcdp & 0xFF);
2531: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2532: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2533: srca += srcdpr;
2534: { int val = cctrue(4) ? 0xff : 0;
2535: put_byte(srca,val);
2536: }}}}}
2537: void op_54f8(UWORD opcode)
2538: {
2539: {{ CPTR srca = (LONG)(WORD)nextiword();
2540: { int val = cctrue(4) ? 0xff : 0;
2541: put_byte(srca,val);
2542: }}}}
2543: void op_54f9(UWORD opcode)
2544: {
2545: {{ CPTR srca = nextilong();
2546: { int val = cctrue(4) ? 0xff : 0;
2547: put_byte(srca,val);
2548: }}}}
2549: void op_5500(UWORD opcode)
2550: {
2551: ULONG srcreg = 2;
2552: ULONG dstreg = (opcode & 7) >> 0;
2553: {{ ULONG src = srcreg;
2554: { BYTE dst = regs.d[dstreg];
2555: { ULONG newv = dst - src;
2556: { bool flgs = ((BYTE)(src)) < 0;
2557: bool flgo = ((BYTE)(dst)) < 0;
2558: bool flgn = ((BYTE)(newv)) < 0;
2559: regs.z = ((BYTE)(newv)) == 0;
2560: regs.v = (flgs != flgo) && (flgn != flgo);
2561: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
2562: regs.n = flgn != 0;
2563: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
2564: }}}}}}
2565: void op_5510(UWORD opcode)
2566: {
2567: ULONG srcreg = 2;
2568: ULONG dstreg = (opcode & 7) >> 0;
2569: {{ ULONG src = srcreg;
2570: { CPTR dsta = regs.a[dstreg];
2571: BYTE dst = get_byte(dsta);
2572: { ULONG newv = dst - src;
2573: { bool flgs = ((BYTE)(src)) < 0;
2574: bool flgo = ((BYTE)(dst)) < 0;
2575: bool flgn = ((BYTE)(newv)) < 0;
2576: regs.z = ((BYTE)(newv)) == 0;
2577: regs.v = (flgs != flgo) && (flgn != flgo);
2578: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
2579: regs.n = flgn != 0;
2580: put_byte(dsta,newv);
2581: }}}}}}
2582: void op_5518(UWORD opcode)
2583: {
2584: ULONG srcreg = 2;
2585: ULONG dstreg = (opcode & 7) >> 0;
2586: {{ ULONG src = srcreg;
2587: { CPTR dsta = regs.a[dstreg];
2588: BYTE dst = get_byte(dsta);
2589: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
2590: { ULONG newv = dst - src;
2591: { bool flgs = ((BYTE)(src)) < 0;
2592: bool flgo = ((BYTE)(dst)) < 0;
2593: bool flgn = ((BYTE)(newv)) < 0;
2594: regs.z = ((BYTE)(newv)) == 0;
2595: regs.v = (flgs != flgo) && (flgn != flgo);
2596: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
2597: regs.n = flgn != 0;
2598: put_byte(dsta,newv);
2599: }}}}}}}
2600: void op_5520(UWORD opcode)
2601: {
2602: ULONG srcreg = 2;
2603: ULONG dstreg = (opcode & 7) >> 0;
2604: {{ ULONG src = srcreg;
2605: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
2606: { CPTR dsta = regs.a[dstreg];
2607: BYTE dst = get_byte(dsta);
2608: { ULONG newv = dst - src;
2609: { bool flgs = ((BYTE)(src)) < 0;
2610: bool flgo = ((BYTE)(dst)) < 0;
2611: bool flgn = ((BYTE)(newv)) < 0;
2612: regs.z = ((BYTE)(newv)) == 0;
2613: regs.v = (flgs != flgo) && (flgn != flgo);
2614: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
2615: regs.n = flgn != 0;
2616: put_byte(dsta,newv);
2617: }}}}}}}
2618: void op_5528(UWORD opcode)
2619: {
2620: ULONG srcreg = 2;
2621: ULONG dstreg = (opcode & 7) >> 0;
2622: {{ ULONG src = srcreg;
2623: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
2624: BYTE dst = get_byte(dsta);
2625: { ULONG newv = dst - src;
2626: { bool flgs = ((BYTE)(src)) < 0;
2627: bool flgo = ((BYTE)(dst)) < 0;
2628: bool flgn = ((BYTE)(newv)) < 0;
2629: regs.z = ((BYTE)(newv)) == 0;
2630: regs.v = (flgs != flgo) && (flgn != flgo);
2631: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
2632: regs.n = flgn != 0;
2633: put_byte(dsta,newv);
2634: }}}}}}
2635: void op_5530(UWORD opcode)
2636: {
2637: ULONG srcreg = 2;
2638: ULONG dstreg = (opcode & 7) >> 0;
2639: {{ ULONG src = srcreg;
2640: { CPTR dsta = regs.a[dstreg];
2641: UWORD dstdp = nextiword();
2642: dsta += (LONG)(BYTE)(dstdp & 0xFF);
2643: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
2644: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
2645: dsta += dstdpr;
2646: { BYTE dst = get_byte(dsta);
2647: { ULONG newv = dst - src;
2648: { bool flgs = ((BYTE)(src)) < 0;
2649: bool flgo = ((BYTE)(dst)) < 0;
2650: bool flgn = ((BYTE)(newv)) < 0;
2651: regs.z = ((BYTE)(newv)) == 0;
2652: regs.v = (flgs != flgo) && (flgn != flgo);
2653: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
2654: regs.n = flgn != 0;
2655: put_byte(dsta,newv);
2656: }}}}}}}}
2657: void op_5538(UWORD opcode)
2658: {
2659: ULONG srcreg = 2;
2660: {{ ULONG src = srcreg;
2661: { CPTR dsta = (LONG)(WORD)nextiword();
2662: BYTE dst = get_byte(dsta);
2663: { ULONG newv = dst - src;
2664: { bool flgs = ((BYTE)(src)) < 0;
2665: bool flgo = ((BYTE)(dst)) < 0;
2666: bool flgn = ((BYTE)(newv)) < 0;
2667: regs.z = ((BYTE)(newv)) == 0;
2668: regs.v = (flgs != flgo) && (flgn != flgo);
2669: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
2670: regs.n = flgn != 0;
2671: put_byte(dsta,newv);
2672: }}}}}}
2673: void op_5539(UWORD opcode)
2674: {
2675: ULONG srcreg = 2;
2676: {{ ULONG src = srcreg;
2677: { CPTR dsta = nextilong();
2678: BYTE dst = get_byte(dsta);
2679: { ULONG newv = dst - src;
2680: { bool flgs = ((BYTE)(src)) < 0;
2681: bool flgo = ((BYTE)(dst)) < 0;
2682: bool flgn = ((BYTE)(newv)) < 0;
2683: regs.z = ((BYTE)(newv)) == 0;
2684: regs.v = (flgs != flgo) && (flgn != flgo);
2685: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
2686: regs.n = flgn != 0;
2687: put_byte(dsta,newv);
2688: }}}}}}
2689: void op_5540(UWORD opcode)
2690: {
2691: ULONG srcreg = 2;
2692: ULONG dstreg = (opcode & 7) >> 0;
2693: {{ ULONG src = srcreg;
2694: { WORD dst = regs.d[dstreg];
2695: { ULONG newv = dst - src;
2696: { bool flgs = ((WORD)(src)) < 0;
2697: bool flgo = ((WORD)(dst)) < 0;
2698: bool flgn = ((WORD)(newv)) < 0;
2699: regs.z = ((WORD)(newv)) == 0;
2700: regs.v = (flgs != flgo) && (flgn != flgo);
2701: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
2702: regs.n = flgn != 0;
2703: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
2704: }}}}}}
2705: void op_5548(UWORD opcode)
2706: {
2707: ULONG srcreg = 2;
2708: ULONG dstreg = (opcode & 7) >> 0;
2709: {{ ULONG src = srcreg;
2710: { LONG dst = regs.a[dstreg];
2711: { ULONG newv = dst - src;
2712: regs.a[dstreg] = (newv);
2713: }}}}}
2714: void op_5550(UWORD opcode)
2715: {
2716: ULONG srcreg = 2;
2717: ULONG dstreg = (opcode & 7) >> 0;
2718: {{ ULONG src = srcreg;
2719: { CPTR dsta = regs.a[dstreg];
2720: WORD dst = get_word(dsta);
2721: { ULONG newv = dst - src;
2722: { bool flgs = ((WORD)(src)) < 0;
2723: bool flgo = ((WORD)(dst)) < 0;
2724: bool flgn = ((WORD)(newv)) < 0;
2725: regs.z = ((WORD)(newv)) == 0;
2726: regs.v = (flgs != flgo) && (flgn != flgo);
2727: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
2728: regs.n = flgn != 0;
2729: put_word(dsta,newv);
2730: }}}}}}
2731: void op_5558(UWORD opcode)
2732: {
2733: ULONG srcreg = 2;
2734: ULONG dstreg = (opcode & 7) >> 0;
2735: {{ ULONG src = srcreg;
2736: { CPTR dsta = regs.a[dstreg];
2737: WORD dst = get_word(dsta);
2738: { regs.a[dstreg] += 2;
2739: { ULONG newv = dst - src;
2740: { bool flgs = ((WORD)(src)) < 0;
2741: bool flgo = ((WORD)(dst)) < 0;
2742: bool flgn = ((WORD)(newv)) < 0;
2743: regs.z = ((WORD)(newv)) == 0;
2744: regs.v = (flgs != flgo) && (flgn != flgo);
2745: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
2746: regs.n = flgn != 0;
2747: put_word(dsta,newv);
2748: }}}}}}}
2749: void op_5560(UWORD opcode)
2750: {
2751: ULONG srcreg = 2;
2752: ULONG dstreg = (opcode & 7) >> 0;
2753: {{ ULONG src = srcreg;
2754: { regs.a[dstreg] -= 2;
2755: { CPTR dsta = regs.a[dstreg];
2756: WORD dst = get_word(dsta);
2757: { ULONG newv = dst - src;
2758: { bool flgs = ((WORD)(src)) < 0;
2759: bool flgo = ((WORD)(dst)) < 0;
2760: bool flgn = ((WORD)(newv)) < 0;
2761: regs.z = ((WORD)(newv)) == 0;
2762: regs.v = (flgs != flgo) && (flgn != flgo);
2763: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
2764: regs.n = flgn != 0;
2765: put_word(dsta,newv);
2766: }}}}}}}
2767: void op_5568(UWORD opcode)
2768: {
2769: ULONG srcreg = 2;
2770: ULONG dstreg = (opcode & 7) >> 0;
2771: {{ ULONG src = srcreg;
2772: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
2773: WORD dst = get_word(dsta);
2774: { ULONG newv = dst - src;
2775: { bool flgs = ((WORD)(src)) < 0;
2776: bool flgo = ((WORD)(dst)) < 0;
2777: bool flgn = ((WORD)(newv)) < 0;
2778: regs.z = ((WORD)(newv)) == 0;
2779: regs.v = (flgs != flgo) && (flgn != flgo);
2780: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
2781: regs.n = flgn != 0;
2782: put_word(dsta,newv);
2783: }}}}}}
2784: void op_5570(UWORD opcode)
2785: {
2786: ULONG srcreg = 2;
2787: ULONG dstreg = (opcode & 7) >> 0;
2788: {{ ULONG src = srcreg;
2789: { CPTR dsta = regs.a[dstreg];
2790: UWORD dstdp = nextiword();
2791: dsta += (LONG)(BYTE)(dstdp & 0xFF);
2792: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
2793: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
2794: dsta += dstdpr;
2795: { WORD dst = get_word(dsta);
2796: { ULONG newv = dst - src;
2797: { bool flgs = ((WORD)(src)) < 0;
2798: bool flgo = ((WORD)(dst)) < 0;
2799: bool flgn = ((WORD)(newv)) < 0;
2800: regs.z = ((WORD)(newv)) == 0;
2801: regs.v = (flgs != flgo) && (flgn != flgo);
2802: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
2803: regs.n = flgn != 0;
2804: put_word(dsta,newv);
2805: }}}}}}}}
2806: void op_5578(UWORD opcode)
2807: {
2808: ULONG srcreg = 2;
2809: {{ ULONG src = srcreg;
2810: { CPTR dsta = (LONG)(WORD)nextiword();
2811: WORD dst = get_word(dsta);
2812: { ULONG newv = dst - src;
2813: { bool flgs = ((WORD)(src)) < 0;
2814: bool flgo = ((WORD)(dst)) < 0;
2815: bool flgn = ((WORD)(newv)) < 0;
2816: regs.z = ((WORD)(newv)) == 0;
2817: regs.v = (flgs != flgo) && (flgn != flgo);
2818: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
2819: regs.n = flgn != 0;
2820: put_word(dsta,newv);
2821: }}}}}}
2822: void op_5579(UWORD opcode)
2823: {
2824: ULONG srcreg = 2;
2825: {{ ULONG src = srcreg;
2826: { CPTR dsta = nextilong();
2827: WORD dst = get_word(dsta);
2828: { ULONG newv = dst - src;
2829: { bool flgs = ((WORD)(src)) < 0;
2830: bool flgo = ((WORD)(dst)) < 0;
2831: bool flgn = ((WORD)(newv)) < 0;
2832: regs.z = ((WORD)(newv)) == 0;
2833: regs.v = (flgs != flgo) && (flgn != flgo);
2834: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
2835: regs.n = flgn != 0;
2836: put_word(dsta,newv);
2837: }}}}}}
2838: void op_5580(UWORD opcode)
2839: {
2840: ULONG srcreg = 2;
2841: ULONG dstreg = (opcode & 7) >> 0;
2842: {{ ULONG src = srcreg;
2843: { LONG dst = regs.d[dstreg];
2844: { ULONG newv = dst - src;
2845: { bool flgs = ((LONG)(src)) < 0;
2846: bool flgo = ((LONG)(dst)) < 0;
2847: bool flgn = ((LONG)(newv)) < 0;
2848: regs.z = ((LONG)(newv)) == 0;
2849: regs.v = (flgs != flgo) && (flgn != flgo);
2850: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
2851: regs.n = flgn != 0;
2852: regs.d[dstreg] = (newv);
2853: }}}}}}
2854: void op_5588(UWORD opcode)
2855: {
2856: ULONG srcreg = 2;
2857: ULONG dstreg = (opcode & 7) >> 0;
2858: {{ ULONG src = srcreg;
2859: { LONG dst = regs.a[dstreg];
2860: { ULONG newv = dst - src;
2861: regs.a[dstreg] = (newv);
2862: }}}}}
2863: void op_5590(UWORD opcode)
2864: {
2865: ULONG srcreg = 2;
2866: ULONG dstreg = (opcode & 7) >> 0;
2867: {{ ULONG src = srcreg;
2868: { CPTR dsta = regs.a[dstreg];
2869: LONG dst = get_long(dsta);
2870: { ULONG newv = dst - src;
2871: { bool flgs = ((LONG)(src)) < 0;
2872: bool flgo = ((LONG)(dst)) < 0;
2873: bool flgn = ((LONG)(newv)) < 0;
2874: regs.z = ((LONG)(newv)) == 0;
2875: regs.v = (flgs != flgo) && (flgn != flgo);
2876: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
2877: regs.n = flgn != 0;
2878: put_long(dsta,newv);
2879: }}}}}}
2880: void op_5598(UWORD opcode)
2881: {
2882: ULONG srcreg = 2;
2883: ULONG dstreg = (opcode & 7) >> 0;
2884: {{ ULONG src = srcreg;
2885: { CPTR dsta = regs.a[dstreg];
2886: LONG dst = get_long(dsta);
2887: { regs.a[dstreg] += 4;
2888: { ULONG newv = dst - src;
2889: { bool flgs = ((LONG)(src)) < 0;
2890: bool flgo = ((LONG)(dst)) < 0;
2891: bool flgn = ((LONG)(newv)) < 0;
2892: regs.z = ((LONG)(newv)) == 0;
2893: regs.v = (flgs != flgo) && (flgn != flgo);
2894: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
2895: regs.n = flgn != 0;
2896: put_long(dsta,newv);
2897: }}}}}}}
2898: void op_55a0(UWORD opcode)
2899: {
2900: ULONG srcreg = 2;
2901: ULONG dstreg = (opcode & 7) >> 0;
2902: {{ ULONG src = srcreg;
2903: { regs.a[dstreg] -= 4;
2904: { CPTR dsta = regs.a[dstreg];
2905: LONG dst = get_long(dsta);
2906: { ULONG newv = dst - src;
2907: { bool flgs = ((LONG)(src)) < 0;
2908: bool flgo = ((LONG)(dst)) < 0;
2909: bool flgn = ((LONG)(newv)) < 0;
2910: regs.z = ((LONG)(newv)) == 0;
2911: regs.v = (flgs != flgo) && (flgn != flgo);
2912: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
2913: regs.n = flgn != 0;
2914: put_long(dsta,newv);
2915: }}}}}}}
2916: void op_55a8(UWORD opcode)
2917: {
2918: ULONG srcreg = 2;
2919: ULONG dstreg = (opcode & 7) >> 0;
2920: {{ ULONG src = srcreg;
2921: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
2922: LONG dst = get_long(dsta);
2923: { ULONG newv = dst - src;
2924: { bool flgs = ((LONG)(src)) < 0;
2925: bool flgo = ((LONG)(dst)) < 0;
2926: bool flgn = ((LONG)(newv)) < 0;
2927: regs.z = ((LONG)(newv)) == 0;
2928: regs.v = (flgs != flgo) && (flgn != flgo);
2929: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
2930: regs.n = flgn != 0;
2931: put_long(dsta,newv);
2932: }}}}}}
2933: void op_55b0(UWORD opcode)
2934: {
2935: ULONG srcreg = 2;
2936: ULONG dstreg = (opcode & 7) >> 0;
2937: {{ ULONG src = srcreg;
2938: { CPTR dsta = regs.a[dstreg];
2939: UWORD dstdp = nextiword();
2940: dsta += (LONG)(BYTE)(dstdp & 0xFF);
2941: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
2942: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
2943: dsta += dstdpr;
2944: { LONG dst = get_long(dsta);
2945: { ULONG newv = dst - src;
2946: { bool flgs = ((LONG)(src)) < 0;
2947: bool flgo = ((LONG)(dst)) < 0;
2948: bool flgn = ((LONG)(newv)) < 0;
2949: regs.z = ((LONG)(newv)) == 0;
2950: regs.v = (flgs != flgo) && (flgn != flgo);
2951: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
2952: regs.n = flgn != 0;
2953: put_long(dsta,newv);
2954: }}}}}}}}
2955: void op_55b8(UWORD opcode)
2956: {
2957: ULONG srcreg = 2;
2958: {{ ULONG src = srcreg;
2959: { CPTR dsta = (LONG)(WORD)nextiword();
2960: LONG dst = get_long(dsta);
2961: { ULONG newv = dst - src;
2962: { bool flgs = ((LONG)(src)) < 0;
2963: bool flgo = ((LONG)(dst)) < 0;
2964: bool flgn = ((LONG)(newv)) < 0;
2965: regs.z = ((LONG)(newv)) == 0;
2966: regs.v = (flgs != flgo) && (flgn != flgo);
2967: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
2968: regs.n = flgn != 0;
2969: put_long(dsta,newv);
2970: }}}}}}
2971: void op_55b9(UWORD opcode)
2972: {
2973: ULONG srcreg = 2;
2974: {{ ULONG src = srcreg;
2975: { CPTR dsta = nextilong();
2976: LONG dst = get_long(dsta);
2977: { ULONG newv = dst - src;
2978: { bool flgs = ((LONG)(src)) < 0;
2979: bool flgo = ((LONG)(dst)) < 0;
2980: bool flgn = ((LONG)(newv)) < 0;
2981: regs.z = ((LONG)(newv)) == 0;
2982: regs.v = (flgs != flgo) && (flgn != flgo);
2983: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
2984: regs.n = flgn != 0;
2985: put_long(dsta,newv);
2986: }}}}}}
2987: void op_55c0(UWORD opcode)
2988: {
2989: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2990: {{{ int val = cctrue(5) ? 0xff : 0;
2991: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
2992: }}}}
2993: void op_55c8(UWORD opcode)
2994: {
2995: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2996: {{ WORD src = regs.d[srcreg];
2997: { WORD offs = nextiword();
2998: if (!cctrue(5)) {
2999: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
3000: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
3001: }
3002: }}}}
3003: void op_55d0(UWORD opcode)
3004: {
3005: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3006: {{ CPTR srca = regs.a[srcreg];
3007: { int val = cctrue(5) ? 0xff : 0;
3008: put_byte(srca,val);
3009: }}}}
3010: void op_55d8(UWORD opcode)
3011: {
3012: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3013: {{ CPTR srca = regs.a[srcreg];
3014: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
3015: { int val = cctrue(5) ? 0xff : 0;
3016: put_byte(srca,val);
3017: }}}}}
3018: void op_55e0(UWORD opcode)
3019: {
3020: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3021: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
3022: { CPTR srca = regs.a[srcreg];
3023: { int val = cctrue(5) ? 0xff : 0;
3024: put_byte(srca,val);
3025: }}}}}
3026: void op_55e8(UWORD opcode)
3027: {
3028: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3029: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
3030: { int val = cctrue(5) ? 0xff : 0;
3031: put_byte(srca,val);
3032: }}}}
3033: void op_55f0(UWORD opcode)
3034: {
3035: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3036: {{ CPTR srca = regs.a[srcreg];
3037: UWORD srcdp = nextiword();
3038: srca += (LONG)(BYTE)(srcdp & 0xFF);
3039: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
3040: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
3041: srca += srcdpr;
3042: { int val = cctrue(5) ? 0xff : 0;
3043: put_byte(srca,val);
3044: }}}}}
3045: void op_55f8(UWORD opcode)
3046: {
3047: {{ CPTR srca = (LONG)(WORD)nextiword();
3048: { int val = cctrue(5) ? 0xff : 0;
3049: put_byte(srca,val);
3050: }}}}
3051: void op_55f9(UWORD opcode)
3052: {
3053: {{ CPTR srca = nextilong();
3054: { int val = cctrue(5) ? 0xff : 0;
3055: put_byte(srca,val);
3056: }}}}
3057: void op_5600(UWORD opcode)
3058: {
3059: ULONG srcreg = 3;
3060: ULONG dstreg = (opcode & 7) >> 0;
3061: {{ ULONG src = srcreg;
3062: { BYTE dst = regs.d[dstreg];
3063: { ULONG newv = dst + src;
3064: { bool flgs = ((BYTE)(src)) < 0;
3065: bool flgo = ((BYTE)(dst)) < 0;
3066: bool flgn = ((BYTE)(newv)) < 0;
3067: regs.z = ((BYTE)(newv)) == 0;
3068: regs.v = (flgs == flgo) && (flgn != flgo);
3069: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
3070: regs.n = flgn != 0;
3071: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
3072: }}}}}}
3073: void op_5610(UWORD opcode)
3074: {
3075: ULONG srcreg = 3;
3076: ULONG dstreg = (opcode & 7) >> 0;
3077: {{ ULONG src = srcreg;
3078: { CPTR dsta = regs.a[dstreg];
3079: BYTE dst = get_byte(dsta);
3080: { ULONG newv = dst + src;
3081: { bool flgs = ((BYTE)(src)) < 0;
3082: bool flgo = ((BYTE)(dst)) < 0;
3083: bool flgn = ((BYTE)(newv)) < 0;
3084: regs.z = ((BYTE)(newv)) == 0;
3085: regs.v = (flgs == flgo) && (flgn != flgo);
3086: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
3087: regs.n = flgn != 0;
3088: put_byte(dsta,newv);
3089: }}}}}}
3090: void op_5618(UWORD opcode)
3091: {
3092: ULONG srcreg = 3;
3093: ULONG dstreg = (opcode & 7) >> 0;
3094: {{ ULONG src = srcreg;
3095: { CPTR dsta = regs.a[dstreg];
3096: BYTE dst = get_byte(dsta);
3097: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
3098: { ULONG newv = dst + src;
3099: { bool flgs = ((BYTE)(src)) < 0;
3100: bool flgo = ((BYTE)(dst)) < 0;
3101: bool flgn = ((BYTE)(newv)) < 0;
3102: regs.z = ((BYTE)(newv)) == 0;
3103: regs.v = (flgs == flgo) && (flgn != flgo);
3104: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
3105: regs.n = flgn != 0;
3106: put_byte(dsta,newv);
3107: }}}}}}}
3108: void op_5620(UWORD opcode)
3109: {
3110: ULONG srcreg = 3;
3111: ULONG dstreg = (opcode & 7) >> 0;
3112: {{ ULONG src = srcreg;
3113: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
3114: { CPTR dsta = regs.a[dstreg];
3115: BYTE dst = get_byte(dsta);
3116: { ULONG newv = dst + src;
3117: { bool flgs = ((BYTE)(src)) < 0;
3118: bool flgo = ((BYTE)(dst)) < 0;
3119: bool flgn = ((BYTE)(newv)) < 0;
3120: regs.z = ((BYTE)(newv)) == 0;
3121: regs.v = (flgs == flgo) && (flgn != flgo);
3122: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
3123: regs.n = flgn != 0;
3124: put_byte(dsta,newv);
3125: }}}}}}}
3126: void op_5628(UWORD opcode)
3127: {
3128: ULONG srcreg = 3;
3129: ULONG dstreg = (opcode & 7) >> 0;
3130: {{ ULONG src = srcreg;
3131: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
3132: BYTE dst = get_byte(dsta);
3133: { ULONG newv = dst + src;
3134: { bool flgs = ((BYTE)(src)) < 0;
3135: bool flgo = ((BYTE)(dst)) < 0;
3136: bool flgn = ((BYTE)(newv)) < 0;
3137: regs.z = ((BYTE)(newv)) == 0;
3138: regs.v = (flgs == flgo) && (flgn != flgo);
3139: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
3140: regs.n = flgn != 0;
3141: put_byte(dsta,newv);
3142: }}}}}}
3143: void op_5630(UWORD opcode)
3144: {
3145: ULONG srcreg = 3;
3146: ULONG dstreg = (opcode & 7) >> 0;
3147: {{ ULONG src = srcreg;
3148: { CPTR dsta = regs.a[dstreg];
3149: UWORD dstdp = nextiword();
3150: dsta += (LONG)(BYTE)(dstdp & 0xFF);
3151: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
3152: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
3153: dsta += dstdpr;
3154: { BYTE dst = get_byte(dsta);
3155: { ULONG newv = dst + src;
3156: { bool flgs = ((BYTE)(src)) < 0;
3157: bool flgo = ((BYTE)(dst)) < 0;
3158: bool flgn = ((BYTE)(newv)) < 0;
3159: regs.z = ((BYTE)(newv)) == 0;
3160: regs.v = (flgs == flgo) && (flgn != flgo);
3161: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
3162: regs.n = flgn != 0;
3163: put_byte(dsta,newv);
3164: }}}}}}}}
3165: void op_5638(UWORD opcode)
3166: {
3167: ULONG srcreg = 3;
3168: {{ ULONG src = srcreg;
3169: { CPTR dsta = (LONG)(WORD)nextiword();
3170: BYTE dst = get_byte(dsta);
3171: { ULONG newv = dst + src;
3172: { bool flgs = ((BYTE)(src)) < 0;
3173: bool flgo = ((BYTE)(dst)) < 0;
3174: bool flgn = ((BYTE)(newv)) < 0;
3175: regs.z = ((BYTE)(newv)) == 0;
3176: regs.v = (flgs == flgo) && (flgn != flgo);
3177: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
3178: regs.n = flgn != 0;
3179: put_byte(dsta,newv);
3180: }}}}}}
3181: void op_5639(UWORD opcode)
3182: {
3183: ULONG srcreg = 3;
3184: {{ ULONG src = srcreg;
3185: { CPTR dsta = nextilong();
3186: BYTE dst = get_byte(dsta);
3187: { ULONG newv = dst + src;
3188: { bool flgs = ((BYTE)(src)) < 0;
3189: bool flgo = ((BYTE)(dst)) < 0;
3190: bool flgn = ((BYTE)(newv)) < 0;
3191: regs.z = ((BYTE)(newv)) == 0;
3192: regs.v = (flgs == flgo) && (flgn != flgo);
3193: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
3194: regs.n = flgn != 0;
3195: put_byte(dsta,newv);
3196: }}}}}}
3197: void op_5640(UWORD opcode)
3198: {
3199: ULONG srcreg = 3;
3200: ULONG dstreg = (opcode & 7) >> 0;
3201: {{ ULONG src = srcreg;
3202: { WORD dst = regs.d[dstreg];
3203: { ULONG newv = dst + src;
3204: { bool flgs = ((WORD)(src)) < 0;
3205: bool flgo = ((WORD)(dst)) < 0;
3206: bool flgn = ((WORD)(newv)) < 0;
3207: regs.z = ((WORD)(newv)) == 0;
3208: regs.v = (flgs == flgo) && (flgn != flgo);
3209: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
3210: regs.n = flgn != 0;
3211: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
3212: }}}}}}
3213: void op_5648(UWORD opcode)
3214: {
3215: ULONG srcreg = 3;
3216: ULONG dstreg = (opcode & 7) >> 0;
3217: {{ ULONG src = srcreg;
3218: { LONG dst = regs.a[dstreg];
3219: { ULONG newv = dst + src;
3220: regs.a[dstreg] = (newv);
3221: }}}}}
3222: void op_5650(UWORD opcode)
3223: {
3224: ULONG srcreg = 3;
3225: ULONG dstreg = (opcode & 7) >> 0;
3226: {{ ULONG src = srcreg;
3227: { CPTR dsta = regs.a[dstreg];
3228: WORD dst = get_word(dsta);
3229: { ULONG newv = dst + src;
3230: { bool flgs = ((WORD)(src)) < 0;
3231: bool flgo = ((WORD)(dst)) < 0;
3232: bool flgn = ((WORD)(newv)) < 0;
3233: regs.z = ((WORD)(newv)) == 0;
3234: regs.v = (flgs == flgo) && (flgn != flgo);
3235: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
3236: regs.n = flgn != 0;
3237: put_word(dsta,newv);
3238: }}}}}}
3239: void op_5658(UWORD opcode)
3240: {
3241: ULONG srcreg = 3;
3242: ULONG dstreg = (opcode & 7) >> 0;
3243: {{ ULONG src = srcreg;
3244: { CPTR dsta = regs.a[dstreg];
3245: WORD dst = get_word(dsta);
3246: { regs.a[dstreg] += 2;
3247: { ULONG newv = dst + src;
3248: { bool flgs = ((WORD)(src)) < 0;
3249: bool flgo = ((WORD)(dst)) < 0;
3250: bool flgn = ((WORD)(newv)) < 0;
3251: regs.z = ((WORD)(newv)) == 0;
3252: regs.v = (flgs == flgo) && (flgn != flgo);
3253: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
3254: regs.n = flgn != 0;
3255: put_word(dsta,newv);
3256: }}}}}}}
3257: void op_5660(UWORD opcode)
3258: {
3259: ULONG srcreg = 3;
3260: ULONG dstreg = (opcode & 7) >> 0;
3261: {{ ULONG src = srcreg;
3262: { regs.a[dstreg] -= 2;
3263: { CPTR dsta = regs.a[dstreg];
3264: WORD dst = get_word(dsta);
3265: { ULONG newv = dst + src;
3266: { bool flgs = ((WORD)(src)) < 0;
3267: bool flgo = ((WORD)(dst)) < 0;
3268: bool flgn = ((WORD)(newv)) < 0;
3269: regs.z = ((WORD)(newv)) == 0;
3270: regs.v = (flgs == flgo) && (flgn != flgo);
3271: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
3272: regs.n = flgn != 0;
3273: put_word(dsta,newv);
3274: }}}}}}}
3275: void op_5668(UWORD opcode)
3276: {
3277: ULONG srcreg = 3;
3278: ULONG dstreg = (opcode & 7) >> 0;
3279: {{ ULONG src = srcreg;
3280: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
3281: WORD dst = get_word(dsta);
3282: { ULONG newv = dst + src;
3283: { bool flgs = ((WORD)(src)) < 0;
3284: bool flgo = ((WORD)(dst)) < 0;
3285: bool flgn = ((WORD)(newv)) < 0;
3286: regs.z = ((WORD)(newv)) == 0;
3287: regs.v = (flgs == flgo) && (flgn != flgo);
3288: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
3289: regs.n = flgn != 0;
3290: put_word(dsta,newv);
3291: }}}}}}
3292: void op_5670(UWORD opcode)
3293: {
3294: ULONG srcreg = 3;
3295: ULONG dstreg = (opcode & 7) >> 0;
3296: {{ ULONG src = srcreg;
3297: { CPTR dsta = regs.a[dstreg];
3298: UWORD dstdp = nextiword();
3299: dsta += (LONG)(BYTE)(dstdp & 0xFF);
3300: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
3301: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
3302: dsta += dstdpr;
3303: { WORD dst = get_word(dsta);
3304: { ULONG newv = dst + src;
3305: { bool flgs = ((WORD)(src)) < 0;
3306: bool flgo = ((WORD)(dst)) < 0;
3307: bool flgn = ((WORD)(newv)) < 0;
3308: regs.z = ((WORD)(newv)) == 0;
3309: regs.v = (flgs == flgo) && (flgn != flgo);
3310: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
3311: regs.n = flgn != 0;
3312: put_word(dsta,newv);
3313: }}}}}}}}
3314: void op_5678(UWORD opcode)
3315: {
3316: ULONG srcreg = 3;
3317: {{ ULONG src = srcreg;
3318: { CPTR dsta = (LONG)(WORD)nextiword();
3319: WORD dst = get_word(dsta);
3320: { ULONG newv = dst + src;
3321: { bool flgs = ((WORD)(src)) < 0;
3322: bool flgo = ((WORD)(dst)) < 0;
3323: bool flgn = ((WORD)(newv)) < 0;
3324: regs.z = ((WORD)(newv)) == 0;
3325: regs.v = (flgs == flgo) && (flgn != flgo);
3326: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
3327: regs.n = flgn != 0;
3328: put_word(dsta,newv);
3329: }}}}}}
3330: void op_5679(UWORD opcode)
3331: {
3332: ULONG srcreg = 3;
3333: {{ ULONG src = srcreg;
3334: { CPTR dsta = nextilong();
3335: WORD dst = get_word(dsta);
3336: { ULONG newv = dst + src;
3337: { bool flgs = ((WORD)(src)) < 0;
3338: bool flgo = ((WORD)(dst)) < 0;
3339: bool flgn = ((WORD)(newv)) < 0;
3340: regs.z = ((WORD)(newv)) == 0;
3341: regs.v = (flgs == flgo) && (flgn != flgo);
3342: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
3343: regs.n = flgn != 0;
3344: put_word(dsta,newv);
3345: }}}}}}
3346: void op_5680(UWORD opcode)
3347: {
3348: ULONG srcreg = 3;
3349: ULONG dstreg = (opcode & 7) >> 0;
3350: {{ ULONG src = srcreg;
3351: { LONG dst = regs.d[dstreg];
3352: { ULONG newv = dst + src;
3353: { bool flgs = ((LONG)(src)) < 0;
3354: bool flgo = ((LONG)(dst)) < 0;
3355: bool flgn = ((LONG)(newv)) < 0;
3356: regs.z = ((LONG)(newv)) == 0;
3357: regs.v = (flgs == flgo) && (flgn != flgo);
3358: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
3359: regs.n = flgn != 0;
3360: regs.d[dstreg] = (newv);
3361: }}}}}}
3362: void op_5688(UWORD opcode)
3363: {
3364: ULONG srcreg = 3;
3365: ULONG dstreg = (opcode & 7) >> 0;
3366: {{ ULONG src = srcreg;
3367: { LONG dst = regs.a[dstreg];
3368: { ULONG newv = dst + src;
3369: regs.a[dstreg] = (newv);
3370: }}}}}
3371: void op_5690(UWORD opcode)
3372: {
3373: ULONG srcreg = 3;
3374: ULONG dstreg = (opcode & 7) >> 0;
3375: {{ ULONG src = srcreg;
3376: { CPTR dsta = regs.a[dstreg];
3377: LONG dst = get_long(dsta);
3378: { ULONG newv = dst + src;
3379: { bool flgs = ((LONG)(src)) < 0;
3380: bool flgo = ((LONG)(dst)) < 0;
3381: bool flgn = ((LONG)(newv)) < 0;
3382: regs.z = ((LONG)(newv)) == 0;
3383: regs.v = (flgs == flgo) && (flgn != flgo);
3384: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
3385: regs.n = flgn != 0;
3386: put_long(dsta,newv);
3387: }}}}}}
3388: void op_5698(UWORD opcode)
3389: {
3390: ULONG srcreg = 3;
3391: ULONG dstreg = (opcode & 7) >> 0;
3392: {{ ULONG src = srcreg;
3393: { CPTR dsta = regs.a[dstreg];
3394: LONG dst = get_long(dsta);
3395: { regs.a[dstreg] += 4;
3396: { ULONG newv = dst + src;
3397: { bool flgs = ((LONG)(src)) < 0;
3398: bool flgo = ((LONG)(dst)) < 0;
3399: bool flgn = ((LONG)(newv)) < 0;
3400: regs.z = ((LONG)(newv)) == 0;
3401: regs.v = (flgs == flgo) && (flgn != flgo);
3402: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
3403: regs.n = flgn != 0;
3404: put_long(dsta,newv);
3405: }}}}}}}
3406: void op_56a0(UWORD opcode)
3407: {
3408: ULONG srcreg = 3;
3409: ULONG dstreg = (opcode & 7) >> 0;
3410: {{ ULONG src = srcreg;
3411: { regs.a[dstreg] -= 4;
3412: { CPTR dsta = regs.a[dstreg];
3413: LONG dst = get_long(dsta);
3414: { ULONG newv = dst + src;
3415: { bool flgs = ((LONG)(src)) < 0;
3416: bool flgo = ((LONG)(dst)) < 0;
3417: bool flgn = ((LONG)(newv)) < 0;
3418: regs.z = ((LONG)(newv)) == 0;
3419: regs.v = (flgs == flgo) && (flgn != flgo);
3420: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
3421: regs.n = flgn != 0;
3422: put_long(dsta,newv);
3423: }}}}}}}
3424: void op_56a8(UWORD opcode)
3425: {
3426: ULONG srcreg = 3;
3427: ULONG dstreg = (opcode & 7) >> 0;
3428: {{ ULONG src = srcreg;
3429: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
3430: LONG dst = get_long(dsta);
3431: { ULONG newv = dst + src;
3432: { bool flgs = ((LONG)(src)) < 0;
3433: bool flgo = ((LONG)(dst)) < 0;
3434: bool flgn = ((LONG)(newv)) < 0;
3435: regs.z = ((LONG)(newv)) == 0;
3436: regs.v = (flgs == flgo) && (flgn != flgo);
3437: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
3438: regs.n = flgn != 0;
3439: put_long(dsta,newv);
3440: }}}}}}
3441: void op_56b0(UWORD opcode)
3442: {
3443: ULONG srcreg = 3;
3444: ULONG dstreg = (opcode & 7) >> 0;
3445: {{ ULONG src = srcreg;
3446: { CPTR dsta = regs.a[dstreg];
3447: UWORD dstdp = nextiword();
3448: dsta += (LONG)(BYTE)(dstdp & 0xFF);
3449: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
3450: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
3451: dsta += dstdpr;
3452: { LONG dst = get_long(dsta);
3453: { ULONG newv = dst + src;
3454: { bool flgs = ((LONG)(src)) < 0;
3455: bool flgo = ((LONG)(dst)) < 0;
3456: bool flgn = ((LONG)(newv)) < 0;
3457: regs.z = ((LONG)(newv)) == 0;
3458: regs.v = (flgs == flgo) && (flgn != flgo);
3459: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
3460: regs.n = flgn != 0;
3461: put_long(dsta,newv);
3462: }}}}}}}}
3463: void op_56b8(UWORD opcode)
3464: {
3465: ULONG srcreg = 3;
3466: {{ ULONG src = srcreg;
3467: { CPTR dsta = (LONG)(WORD)nextiword();
3468: LONG dst = get_long(dsta);
3469: { ULONG newv = dst + src;
3470: { bool flgs = ((LONG)(src)) < 0;
3471: bool flgo = ((LONG)(dst)) < 0;
3472: bool flgn = ((LONG)(newv)) < 0;
3473: regs.z = ((LONG)(newv)) == 0;
3474: regs.v = (flgs == flgo) && (flgn != flgo);
3475: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
3476: regs.n = flgn != 0;
3477: put_long(dsta,newv);
3478: }}}}}}
3479: void op_56b9(UWORD opcode)
3480: {
3481: ULONG srcreg = 3;
3482: {{ ULONG src = srcreg;
3483: { CPTR dsta = nextilong();
3484: LONG dst = get_long(dsta);
3485: { ULONG newv = dst + src;
3486: { bool flgs = ((LONG)(src)) < 0;
3487: bool flgo = ((LONG)(dst)) < 0;
3488: bool flgn = ((LONG)(newv)) < 0;
3489: regs.z = ((LONG)(newv)) == 0;
3490: regs.v = (flgs == flgo) && (flgn != flgo);
3491: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
3492: regs.n = flgn != 0;
3493: put_long(dsta,newv);
3494: }}}}}}
3495: void op_56c0(UWORD opcode)
3496: {
3497: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3498: {{{ int val = cctrue(6) ? 0xff : 0;
3499: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
3500: }}}}
3501: void op_56c8(UWORD opcode)
3502: {
3503: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3504: {{ WORD src = regs.d[srcreg];
3505: { WORD offs = nextiword();
3506: if (!cctrue(6)) {
3507: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
3508: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
3509: }
3510: }}}}
3511: void op_56d0(UWORD opcode)
3512: {
3513: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3514: {{ CPTR srca = regs.a[srcreg];
3515: { int val = cctrue(6) ? 0xff : 0;
3516: put_byte(srca,val);
3517: }}}}
3518: void op_56d8(UWORD opcode)
3519: {
3520: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3521: {{ CPTR srca = regs.a[srcreg];
3522: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
3523: { int val = cctrue(6) ? 0xff : 0;
3524: put_byte(srca,val);
3525: }}}}}
3526: void op_56e0(UWORD opcode)
3527: {
3528: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3529: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
3530: { CPTR srca = regs.a[srcreg];
3531: { int val = cctrue(6) ? 0xff : 0;
3532: put_byte(srca,val);
3533: }}}}}
3534: void op_56e8(UWORD opcode)
3535: {
3536: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3537: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
3538: { int val = cctrue(6) ? 0xff : 0;
3539: put_byte(srca,val);
3540: }}}}
3541: void op_56f0(UWORD opcode)
3542: {
3543: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3544: {{ CPTR srca = regs.a[srcreg];
3545: UWORD srcdp = nextiword();
3546: srca += (LONG)(BYTE)(srcdp & 0xFF);
3547: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
3548: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
3549: srca += srcdpr;
3550: { int val = cctrue(6) ? 0xff : 0;
3551: put_byte(srca,val);
3552: }}}}}
3553: void op_56f8(UWORD opcode)
3554: {
3555: {{ CPTR srca = (LONG)(WORD)nextiword();
3556: { int val = cctrue(6) ? 0xff : 0;
3557: put_byte(srca,val);
3558: }}}}
3559: void op_56f9(UWORD opcode)
3560: {
3561: {{ CPTR srca = nextilong();
3562: { int val = cctrue(6) ? 0xff : 0;
3563: put_byte(srca,val);
3564: }}}}
3565: void op_5700(UWORD opcode)
3566: {
3567: ULONG srcreg = 3;
3568: ULONG dstreg = (opcode & 7) >> 0;
3569: {{ ULONG src = srcreg;
3570: { BYTE dst = regs.d[dstreg];
3571: { ULONG newv = dst - src;
3572: { bool flgs = ((BYTE)(src)) < 0;
3573: bool flgo = ((BYTE)(dst)) < 0;
3574: bool flgn = ((BYTE)(newv)) < 0;
3575: regs.z = ((BYTE)(newv)) == 0;
3576: regs.v = (flgs != flgo) && (flgn != flgo);
3577: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
3578: regs.n = flgn != 0;
3579: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
3580: }}}}}}
3581: void op_5710(UWORD opcode)
3582: {
3583: ULONG srcreg = 3;
3584: ULONG dstreg = (opcode & 7) >> 0;
3585: {{ ULONG src = srcreg;
3586: { CPTR dsta = regs.a[dstreg];
3587: BYTE dst = get_byte(dsta);
3588: { ULONG newv = dst - src;
3589: { bool flgs = ((BYTE)(src)) < 0;
3590: bool flgo = ((BYTE)(dst)) < 0;
3591: bool flgn = ((BYTE)(newv)) < 0;
3592: regs.z = ((BYTE)(newv)) == 0;
3593: regs.v = (flgs != flgo) && (flgn != flgo);
3594: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
3595: regs.n = flgn != 0;
3596: put_byte(dsta,newv);
3597: }}}}}}
3598: void op_5718(UWORD opcode)
3599: {
3600: ULONG srcreg = 3;
3601: ULONG dstreg = (opcode & 7) >> 0;
3602: {{ ULONG src = srcreg;
3603: { CPTR dsta = regs.a[dstreg];
3604: BYTE dst = get_byte(dsta);
3605: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
3606: { ULONG newv = dst - src;
3607: { bool flgs = ((BYTE)(src)) < 0;
3608: bool flgo = ((BYTE)(dst)) < 0;
3609: bool flgn = ((BYTE)(newv)) < 0;
3610: regs.z = ((BYTE)(newv)) == 0;
3611: regs.v = (flgs != flgo) && (flgn != flgo);
3612: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
3613: regs.n = flgn != 0;
3614: put_byte(dsta,newv);
3615: }}}}}}}
3616: void op_5720(UWORD opcode)
3617: {
3618: ULONG srcreg = 3;
3619: ULONG dstreg = (opcode & 7) >> 0;
3620: {{ ULONG src = srcreg;
3621: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
3622: { CPTR dsta = regs.a[dstreg];
3623: BYTE dst = get_byte(dsta);
3624: { ULONG newv = dst - src;
3625: { bool flgs = ((BYTE)(src)) < 0;
3626: bool flgo = ((BYTE)(dst)) < 0;
3627: bool flgn = ((BYTE)(newv)) < 0;
3628: regs.z = ((BYTE)(newv)) == 0;
3629: regs.v = (flgs != flgo) && (flgn != flgo);
3630: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
3631: regs.n = flgn != 0;
3632: put_byte(dsta,newv);
3633: }}}}}}}
3634: void op_5728(UWORD opcode)
3635: {
3636: ULONG srcreg = 3;
3637: ULONG dstreg = (opcode & 7) >> 0;
3638: {{ ULONG src = srcreg;
3639: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
3640: BYTE dst = get_byte(dsta);
3641: { ULONG newv = dst - src;
3642: { bool flgs = ((BYTE)(src)) < 0;
3643: bool flgo = ((BYTE)(dst)) < 0;
3644: bool flgn = ((BYTE)(newv)) < 0;
3645: regs.z = ((BYTE)(newv)) == 0;
3646: regs.v = (flgs != flgo) && (flgn != flgo);
3647: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
3648: regs.n = flgn != 0;
3649: put_byte(dsta,newv);
3650: }}}}}}
3651: void op_5730(UWORD opcode)
3652: {
3653: ULONG srcreg = 3;
3654: ULONG dstreg = (opcode & 7) >> 0;
3655: {{ ULONG src = srcreg;
3656: { CPTR dsta = regs.a[dstreg];
3657: UWORD dstdp = nextiword();
3658: dsta += (LONG)(BYTE)(dstdp & 0xFF);
3659: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
3660: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
3661: dsta += dstdpr;
3662: { BYTE dst = get_byte(dsta);
3663: { ULONG newv = dst - src;
3664: { bool flgs = ((BYTE)(src)) < 0;
3665: bool flgo = ((BYTE)(dst)) < 0;
3666: bool flgn = ((BYTE)(newv)) < 0;
3667: regs.z = ((BYTE)(newv)) == 0;
3668: regs.v = (flgs != flgo) && (flgn != flgo);
3669: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
3670: regs.n = flgn != 0;
3671: put_byte(dsta,newv);
3672: }}}}}}}}
3673: void op_5738(UWORD opcode)
3674: {
3675: ULONG srcreg = 3;
3676: {{ ULONG src = srcreg;
3677: { CPTR dsta = (LONG)(WORD)nextiword();
3678: BYTE dst = get_byte(dsta);
3679: { ULONG newv = dst - src;
3680: { bool flgs = ((BYTE)(src)) < 0;
3681: bool flgo = ((BYTE)(dst)) < 0;
3682: bool flgn = ((BYTE)(newv)) < 0;
3683: regs.z = ((BYTE)(newv)) == 0;
3684: regs.v = (flgs != flgo) && (flgn != flgo);
3685: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
3686: regs.n = flgn != 0;
3687: put_byte(dsta,newv);
3688: }}}}}}
3689: void op_5739(UWORD opcode)
3690: {
3691: ULONG srcreg = 3;
3692: {{ ULONG src = srcreg;
3693: { CPTR dsta = nextilong();
3694: BYTE dst = get_byte(dsta);
3695: { ULONG newv = dst - src;
3696: { bool flgs = ((BYTE)(src)) < 0;
3697: bool flgo = ((BYTE)(dst)) < 0;
3698: bool flgn = ((BYTE)(newv)) < 0;
3699: regs.z = ((BYTE)(newv)) == 0;
3700: regs.v = (flgs != flgo) && (flgn != flgo);
3701: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
3702: regs.n = flgn != 0;
3703: put_byte(dsta,newv);
3704: }}}}}}
3705: void op_5740(UWORD opcode)
3706: {
3707: ULONG srcreg = 3;
3708: ULONG dstreg = (opcode & 7) >> 0;
3709: {{ ULONG src = srcreg;
3710: { WORD dst = regs.d[dstreg];
3711: { ULONG newv = dst - src;
3712: { bool flgs = ((WORD)(src)) < 0;
3713: bool flgo = ((WORD)(dst)) < 0;
3714: bool flgn = ((WORD)(newv)) < 0;
3715: regs.z = ((WORD)(newv)) == 0;
3716: regs.v = (flgs != flgo) && (flgn != flgo);
3717: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
3718: regs.n = flgn != 0;
3719: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
3720: }}}}}}
3721: void op_5748(UWORD opcode)
3722: {
3723: ULONG srcreg = 3;
3724: ULONG dstreg = (opcode & 7) >> 0;
3725: {{ ULONG src = srcreg;
3726: { LONG dst = regs.a[dstreg];
3727: { ULONG newv = dst - src;
3728: regs.a[dstreg] = (newv);
3729: }}}}}
3730: void op_5750(UWORD opcode)
3731: {
3732: ULONG srcreg = 3;
3733: ULONG dstreg = (opcode & 7) >> 0;
3734: {{ ULONG src = srcreg;
3735: { CPTR dsta = regs.a[dstreg];
3736: WORD dst = get_word(dsta);
3737: { ULONG newv = dst - src;
3738: { bool flgs = ((WORD)(src)) < 0;
3739: bool flgo = ((WORD)(dst)) < 0;
3740: bool flgn = ((WORD)(newv)) < 0;
3741: regs.z = ((WORD)(newv)) == 0;
3742: regs.v = (flgs != flgo) && (flgn != flgo);
3743: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
3744: regs.n = flgn != 0;
3745: put_word(dsta,newv);
3746: }}}}}}
3747: void op_5758(UWORD opcode)
3748: {
3749: ULONG srcreg = 3;
3750: ULONG dstreg = (opcode & 7) >> 0;
3751: {{ ULONG src = srcreg;
3752: { CPTR dsta = regs.a[dstreg];
3753: WORD dst = get_word(dsta);
3754: { regs.a[dstreg] += 2;
3755: { ULONG newv = dst - src;
3756: { bool flgs = ((WORD)(src)) < 0;
3757: bool flgo = ((WORD)(dst)) < 0;
3758: bool flgn = ((WORD)(newv)) < 0;
3759: regs.z = ((WORD)(newv)) == 0;
3760: regs.v = (flgs != flgo) && (flgn != flgo);
3761: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
3762: regs.n = flgn != 0;
3763: put_word(dsta,newv);
3764: }}}}}}}
3765: void op_5760(UWORD opcode)
3766: {
3767: ULONG srcreg = 3;
3768: ULONG dstreg = (opcode & 7) >> 0;
3769: {{ ULONG src = srcreg;
3770: { regs.a[dstreg] -= 2;
3771: { CPTR dsta = regs.a[dstreg];
3772: WORD dst = get_word(dsta);
3773: { ULONG newv = dst - src;
3774: { bool flgs = ((WORD)(src)) < 0;
3775: bool flgo = ((WORD)(dst)) < 0;
3776: bool flgn = ((WORD)(newv)) < 0;
3777: regs.z = ((WORD)(newv)) == 0;
3778: regs.v = (flgs != flgo) && (flgn != flgo);
3779: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
3780: regs.n = flgn != 0;
3781: put_word(dsta,newv);
3782: }}}}}}}
3783: void op_5768(UWORD opcode)
3784: {
3785: ULONG srcreg = 3;
3786: ULONG dstreg = (opcode & 7) >> 0;
3787: {{ ULONG src = srcreg;
3788: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
3789: WORD dst = get_word(dsta);
3790: { ULONG newv = dst - src;
3791: { bool flgs = ((WORD)(src)) < 0;
3792: bool flgo = ((WORD)(dst)) < 0;
3793: bool flgn = ((WORD)(newv)) < 0;
3794: regs.z = ((WORD)(newv)) == 0;
3795: regs.v = (flgs != flgo) && (flgn != flgo);
3796: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
3797: regs.n = flgn != 0;
3798: put_word(dsta,newv);
3799: }}}}}}
3800: void op_5770(UWORD opcode)
3801: {
3802: ULONG srcreg = 3;
3803: ULONG dstreg = (opcode & 7) >> 0;
3804: {{ ULONG src = srcreg;
3805: { CPTR dsta = regs.a[dstreg];
3806: UWORD dstdp = nextiword();
3807: dsta += (LONG)(BYTE)(dstdp & 0xFF);
3808: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
3809: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
3810: dsta += dstdpr;
3811: { WORD dst = get_word(dsta);
3812: { ULONG newv = dst - src;
3813: { bool flgs = ((WORD)(src)) < 0;
3814: bool flgo = ((WORD)(dst)) < 0;
3815: bool flgn = ((WORD)(newv)) < 0;
3816: regs.z = ((WORD)(newv)) == 0;
3817: regs.v = (flgs != flgo) && (flgn != flgo);
3818: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
3819: regs.n = flgn != 0;
3820: put_word(dsta,newv);
3821: }}}}}}}}
3822: void op_5778(UWORD opcode)
3823: {
3824: ULONG srcreg = 3;
3825: {{ ULONG src = srcreg;
3826: { CPTR dsta = (LONG)(WORD)nextiword();
3827: WORD dst = get_word(dsta);
3828: { ULONG newv = dst - src;
3829: { bool flgs = ((WORD)(src)) < 0;
3830: bool flgo = ((WORD)(dst)) < 0;
3831: bool flgn = ((WORD)(newv)) < 0;
3832: regs.z = ((WORD)(newv)) == 0;
3833: regs.v = (flgs != flgo) && (flgn != flgo);
3834: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
3835: regs.n = flgn != 0;
3836: put_word(dsta,newv);
3837: }}}}}}
3838: void op_5779(UWORD opcode)
3839: {
3840: ULONG srcreg = 3;
3841: {{ ULONG src = srcreg;
3842: { CPTR dsta = nextilong();
3843: WORD dst = get_word(dsta);
3844: { ULONG newv = dst - src;
3845: { bool flgs = ((WORD)(src)) < 0;
3846: bool flgo = ((WORD)(dst)) < 0;
3847: bool flgn = ((WORD)(newv)) < 0;
3848: regs.z = ((WORD)(newv)) == 0;
3849: regs.v = (flgs != flgo) && (flgn != flgo);
3850: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
3851: regs.n = flgn != 0;
3852: put_word(dsta,newv);
3853: }}}}}}
3854: void op_5780(UWORD opcode)
3855: {
3856: ULONG srcreg = 3;
3857: ULONG dstreg = (opcode & 7) >> 0;
3858: {{ ULONG src = srcreg;
3859: { LONG dst = regs.d[dstreg];
3860: { ULONG newv = dst - src;
3861: { bool flgs = ((LONG)(src)) < 0;
3862: bool flgo = ((LONG)(dst)) < 0;
3863: bool flgn = ((LONG)(newv)) < 0;
3864: regs.z = ((LONG)(newv)) == 0;
3865: regs.v = (flgs != flgo) && (flgn != flgo);
3866: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
3867: regs.n = flgn != 0;
3868: regs.d[dstreg] = (newv);
3869: }}}}}}
3870: void op_5788(UWORD opcode)
3871: {
3872: ULONG srcreg = 3;
3873: ULONG dstreg = (opcode & 7) >> 0;
3874: {{ ULONG src = srcreg;
3875: { LONG dst = regs.a[dstreg];
3876: { ULONG newv = dst - src;
3877: regs.a[dstreg] = (newv);
3878: }}}}}
3879: void op_5790(UWORD opcode)
3880: {
3881: ULONG srcreg = 3;
3882: ULONG dstreg = (opcode & 7) >> 0;
3883: {{ ULONG src = srcreg;
3884: { CPTR dsta = regs.a[dstreg];
3885: LONG dst = get_long(dsta);
3886: { ULONG newv = dst - src;
3887: { bool flgs = ((LONG)(src)) < 0;
3888: bool flgo = ((LONG)(dst)) < 0;
3889: bool flgn = ((LONG)(newv)) < 0;
3890: regs.z = ((LONG)(newv)) == 0;
3891: regs.v = (flgs != flgo) && (flgn != flgo);
3892: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
3893: regs.n = flgn != 0;
3894: put_long(dsta,newv);
3895: }}}}}}
3896: void op_5798(UWORD opcode)
3897: {
3898: ULONG srcreg = 3;
3899: ULONG dstreg = (opcode & 7) >> 0;
3900: {{ ULONG src = srcreg;
3901: { CPTR dsta = regs.a[dstreg];
3902: LONG dst = get_long(dsta);
3903: { regs.a[dstreg] += 4;
3904: { ULONG newv = dst - src;
3905: { bool flgs = ((LONG)(src)) < 0;
3906: bool flgo = ((LONG)(dst)) < 0;
3907: bool flgn = ((LONG)(newv)) < 0;
3908: regs.z = ((LONG)(newv)) == 0;
3909: regs.v = (flgs != flgo) && (flgn != flgo);
3910: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
3911: regs.n = flgn != 0;
3912: put_long(dsta,newv);
3913: }}}}}}}
3914: void op_57a0(UWORD opcode)
3915: {
3916: ULONG srcreg = 3;
3917: ULONG dstreg = (opcode & 7) >> 0;
3918: {{ ULONG src = srcreg;
3919: { regs.a[dstreg] -= 4;
3920: { CPTR dsta = regs.a[dstreg];
3921: LONG dst = get_long(dsta);
3922: { ULONG newv = dst - src;
3923: { bool flgs = ((LONG)(src)) < 0;
3924: bool flgo = ((LONG)(dst)) < 0;
3925: bool flgn = ((LONG)(newv)) < 0;
3926: regs.z = ((LONG)(newv)) == 0;
3927: regs.v = (flgs != flgo) && (flgn != flgo);
3928: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
3929: regs.n = flgn != 0;
3930: put_long(dsta,newv);
3931: }}}}}}}
3932: void op_57a8(UWORD opcode)
3933: {
3934: ULONG srcreg = 3;
3935: ULONG dstreg = (opcode & 7) >> 0;
3936: {{ ULONG src = srcreg;
3937: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
3938: LONG dst = get_long(dsta);
3939: { ULONG newv = dst - src;
3940: { bool flgs = ((LONG)(src)) < 0;
3941: bool flgo = ((LONG)(dst)) < 0;
3942: bool flgn = ((LONG)(newv)) < 0;
3943: regs.z = ((LONG)(newv)) == 0;
3944: regs.v = (flgs != flgo) && (flgn != flgo);
3945: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
3946: regs.n = flgn != 0;
3947: put_long(dsta,newv);
3948: }}}}}}
3949: void op_57b0(UWORD opcode)
3950: {
3951: ULONG srcreg = 3;
3952: ULONG dstreg = (opcode & 7) >> 0;
3953: {{ ULONG src = srcreg;
3954: { CPTR dsta = regs.a[dstreg];
3955: UWORD dstdp = nextiword();
3956: dsta += (LONG)(BYTE)(dstdp & 0xFF);
3957: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
3958: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
3959: dsta += dstdpr;
3960: { LONG dst = get_long(dsta);
3961: { ULONG newv = dst - src;
3962: { bool flgs = ((LONG)(src)) < 0;
3963: bool flgo = ((LONG)(dst)) < 0;
3964: bool flgn = ((LONG)(newv)) < 0;
3965: regs.z = ((LONG)(newv)) == 0;
3966: regs.v = (flgs != flgo) && (flgn != flgo);
3967: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
3968: regs.n = flgn != 0;
3969: put_long(dsta,newv);
3970: }}}}}}}}
3971: void op_57b8(UWORD opcode)
3972: {
3973: ULONG srcreg = 3;
3974: {{ ULONG src = srcreg;
3975: { CPTR dsta = (LONG)(WORD)nextiword();
3976: LONG dst = get_long(dsta);
3977: { ULONG newv = dst - src;
3978: { bool flgs = ((LONG)(src)) < 0;
3979: bool flgo = ((LONG)(dst)) < 0;
3980: bool flgn = ((LONG)(newv)) < 0;
3981: regs.z = ((LONG)(newv)) == 0;
3982: regs.v = (flgs != flgo) && (flgn != flgo);
3983: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
3984: regs.n = flgn != 0;
3985: put_long(dsta,newv);
3986: }}}}}}
3987: void op_57b9(UWORD opcode)
3988: {
3989: ULONG srcreg = 3;
3990: {{ ULONG src = srcreg;
3991: { CPTR dsta = nextilong();
3992: LONG dst = get_long(dsta);
3993: { ULONG newv = dst - src;
3994: { bool flgs = ((LONG)(src)) < 0;
3995: bool flgo = ((LONG)(dst)) < 0;
3996: bool flgn = ((LONG)(newv)) < 0;
3997: regs.z = ((LONG)(newv)) == 0;
3998: regs.v = (flgs != flgo) && (flgn != flgo);
3999: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
4000: regs.n = flgn != 0;
4001: put_long(dsta,newv);
4002: }}}}}}
4003: void op_57c0(UWORD opcode)
4004: {
4005: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4006: {{{ int val = cctrue(7) ? 0xff : 0;
4007: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
4008: }}}}
4009: void op_57c8(UWORD opcode)
4010: {
4011: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4012: {{ WORD src = regs.d[srcreg];
4013: { WORD offs = nextiword();
4014: if (!cctrue(7)) {
4015: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
4016: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
4017: }
4018: }}}}
4019: void op_57d0(UWORD opcode)
4020: {
4021: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4022: {{ CPTR srca = regs.a[srcreg];
4023: { int val = cctrue(7) ? 0xff : 0;
4024: put_byte(srca,val);
4025: }}}}
4026: void op_57d8(UWORD opcode)
4027: {
4028: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4029: {{ CPTR srca = regs.a[srcreg];
4030: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
4031: { int val = cctrue(7) ? 0xff : 0;
4032: put_byte(srca,val);
4033: }}}}}
4034: void op_57e0(UWORD opcode)
4035: {
4036: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4037: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
4038: { CPTR srca = regs.a[srcreg];
4039: { int val = cctrue(7) ? 0xff : 0;
4040: put_byte(srca,val);
4041: }}}}}
4042: void op_57e8(UWORD opcode)
4043: {
4044: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4045: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
4046: { int val = cctrue(7) ? 0xff : 0;
4047: put_byte(srca,val);
4048: }}}}
4049: void op_57f0(UWORD opcode)
4050: {
4051: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4052: {{ CPTR srca = regs.a[srcreg];
4053: UWORD srcdp = nextiword();
4054: srca += (LONG)(BYTE)(srcdp & 0xFF);
4055: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
4056: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
4057: srca += srcdpr;
4058: { int val = cctrue(7) ? 0xff : 0;
4059: put_byte(srca,val);
4060: }}}}}
4061: void op_57f8(UWORD opcode)
4062: {
4063: {{ CPTR srca = (LONG)(WORD)nextiword();
4064: { int val = cctrue(7) ? 0xff : 0;
4065: put_byte(srca,val);
4066: }}}}
4067: void op_57f9(UWORD opcode)
4068: {
4069: {{ CPTR srca = nextilong();
4070: { int val = cctrue(7) ? 0xff : 0;
4071: put_byte(srca,val);
4072: }}}}
4073: void op_5800(UWORD opcode)
4074: {
4075: ULONG srcreg = 4;
4076: ULONG dstreg = (opcode & 7) >> 0;
4077: {{ ULONG src = srcreg;
4078: { BYTE dst = regs.d[dstreg];
4079: { ULONG newv = dst + src;
4080: { bool flgs = ((BYTE)(src)) < 0;
4081: bool flgo = ((BYTE)(dst)) < 0;
4082: bool flgn = ((BYTE)(newv)) < 0;
4083: regs.z = ((BYTE)(newv)) == 0;
4084: regs.v = (flgs == flgo) && (flgn != flgo);
4085: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
4086: regs.n = flgn != 0;
4087: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
4088: }}}}}}
4089: void op_5810(UWORD opcode)
4090: {
4091: ULONG srcreg = 4;
4092: ULONG dstreg = (opcode & 7) >> 0;
4093: {{ ULONG src = srcreg;
4094: { CPTR dsta = regs.a[dstreg];
4095: BYTE dst = get_byte(dsta);
4096: { ULONG newv = dst + src;
4097: { bool flgs = ((BYTE)(src)) < 0;
4098: bool flgo = ((BYTE)(dst)) < 0;
4099: bool flgn = ((BYTE)(newv)) < 0;
4100: regs.z = ((BYTE)(newv)) == 0;
4101: regs.v = (flgs == flgo) && (flgn != flgo);
4102: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
4103: regs.n = flgn != 0;
4104: put_byte(dsta,newv);
4105: }}}}}}
4106: void op_5818(UWORD opcode)
4107: {
4108: ULONG srcreg = 4;
4109: ULONG dstreg = (opcode & 7) >> 0;
4110: {{ ULONG src = srcreg;
4111: { CPTR dsta = regs.a[dstreg];
4112: BYTE dst = get_byte(dsta);
4113: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
4114: { ULONG newv = dst + src;
4115: { bool flgs = ((BYTE)(src)) < 0;
4116: bool flgo = ((BYTE)(dst)) < 0;
4117: bool flgn = ((BYTE)(newv)) < 0;
4118: regs.z = ((BYTE)(newv)) == 0;
4119: regs.v = (flgs == flgo) && (flgn != flgo);
4120: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
4121: regs.n = flgn != 0;
4122: put_byte(dsta,newv);
4123: }}}}}}}
4124: void op_5820(UWORD opcode)
4125: {
4126: ULONG srcreg = 4;
4127: ULONG dstreg = (opcode & 7) >> 0;
4128: {{ ULONG src = srcreg;
4129: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
4130: { CPTR dsta = regs.a[dstreg];
4131: BYTE dst = get_byte(dsta);
4132: { ULONG newv = dst + src;
4133: { bool flgs = ((BYTE)(src)) < 0;
4134: bool flgo = ((BYTE)(dst)) < 0;
4135: bool flgn = ((BYTE)(newv)) < 0;
4136: regs.z = ((BYTE)(newv)) == 0;
4137: regs.v = (flgs == flgo) && (flgn != flgo);
4138: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
4139: regs.n = flgn != 0;
4140: put_byte(dsta,newv);
4141: }}}}}}}
4142: void op_5828(UWORD opcode)
4143: {
4144: ULONG srcreg = 4;
4145: ULONG dstreg = (opcode & 7) >> 0;
4146: {{ ULONG src = srcreg;
4147: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
4148: BYTE dst = get_byte(dsta);
4149: { ULONG newv = dst + src;
4150: { bool flgs = ((BYTE)(src)) < 0;
4151: bool flgo = ((BYTE)(dst)) < 0;
4152: bool flgn = ((BYTE)(newv)) < 0;
4153: regs.z = ((BYTE)(newv)) == 0;
4154: regs.v = (flgs == flgo) && (flgn != flgo);
4155: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
4156: regs.n = flgn != 0;
4157: put_byte(dsta,newv);
4158: }}}}}}
4159: void op_5830(UWORD opcode)
4160: {
4161: ULONG srcreg = 4;
4162: ULONG dstreg = (opcode & 7) >> 0;
4163: {{ ULONG src = srcreg;
4164: { CPTR dsta = regs.a[dstreg];
4165: UWORD dstdp = nextiword();
4166: dsta += (LONG)(BYTE)(dstdp & 0xFF);
4167: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
4168: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
4169: dsta += dstdpr;
4170: { BYTE dst = get_byte(dsta);
4171: { ULONG newv = dst + src;
4172: { bool flgs = ((BYTE)(src)) < 0;
4173: bool flgo = ((BYTE)(dst)) < 0;
4174: bool flgn = ((BYTE)(newv)) < 0;
4175: regs.z = ((BYTE)(newv)) == 0;
4176: regs.v = (flgs == flgo) && (flgn != flgo);
4177: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
4178: regs.n = flgn != 0;
4179: put_byte(dsta,newv);
4180: }}}}}}}}
4181: void op_5838(UWORD opcode)
4182: {
4183: ULONG srcreg = 4;
4184: {{ ULONG src = srcreg;
4185: { CPTR dsta = (LONG)(WORD)nextiword();
4186: BYTE dst = get_byte(dsta);
4187: { ULONG newv = dst + src;
4188: { bool flgs = ((BYTE)(src)) < 0;
4189: bool flgo = ((BYTE)(dst)) < 0;
4190: bool flgn = ((BYTE)(newv)) < 0;
4191: regs.z = ((BYTE)(newv)) == 0;
4192: regs.v = (flgs == flgo) && (flgn != flgo);
4193: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
4194: regs.n = flgn != 0;
4195: put_byte(dsta,newv);
4196: }}}}}}
4197: void op_5839(UWORD opcode)
4198: {
4199: ULONG srcreg = 4;
4200: {{ ULONG src = srcreg;
4201: { CPTR dsta = nextilong();
4202: BYTE dst = get_byte(dsta);
4203: { ULONG newv = dst + src;
4204: { bool flgs = ((BYTE)(src)) < 0;
4205: bool flgo = ((BYTE)(dst)) < 0;
4206: bool flgn = ((BYTE)(newv)) < 0;
4207: regs.z = ((BYTE)(newv)) == 0;
4208: regs.v = (flgs == flgo) && (flgn != flgo);
4209: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
4210: regs.n = flgn != 0;
4211: put_byte(dsta,newv);
4212: }}}}}}
4213: void op_5840(UWORD opcode)
4214: {
4215: ULONG srcreg = 4;
4216: ULONG dstreg = (opcode & 7) >> 0;
4217: {{ ULONG src = srcreg;
4218: { WORD dst = regs.d[dstreg];
4219: { ULONG newv = dst + src;
4220: { bool flgs = ((WORD)(src)) < 0;
4221: bool flgo = ((WORD)(dst)) < 0;
4222: bool flgn = ((WORD)(newv)) < 0;
4223: regs.z = ((WORD)(newv)) == 0;
4224: regs.v = (flgs == flgo) && (flgn != flgo);
4225: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
4226: regs.n = flgn != 0;
4227: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
4228: }}}}}}
4229: void op_5848(UWORD opcode)
4230: {
4231: ULONG srcreg = 4;
4232: ULONG dstreg = (opcode & 7) >> 0;
4233: {{ ULONG src = srcreg;
4234: { LONG dst = regs.a[dstreg];
4235: { ULONG newv = dst + src;
4236: regs.a[dstreg] = (newv);
4237: }}}}}
4238: void op_5850(UWORD opcode)
4239: {
4240: ULONG srcreg = 4;
4241: ULONG dstreg = (opcode & 7) >> 0;
4242: {{ ULONG src = srcreg;
4243: { CPTR dsta = regs.a[dstreg];
4244: WORD dst = get_word(dsta);
4245: { ULONG newv = dst + src;
4246: { bool flgs = ((WORD)(src)) < 0;
4247: bool flgo = ((WORD)(dst)) < 0;
4248: bool flgn = ((WORD)(newv)) < 0;
4249: regs.z = ((WORD)(newv)) == 0;
4250: regs.v = (flgs == flgo) && (flgn != flgo);
4251: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
4252: regs.n = flgn != 0;
4253: put_word(dsta,newv);
4254: }}}}}}
4255: void op_5858(UWORD opcode)
4256: {
4257: ULONG srcreg = 4;
4258: ULONG dstreg = (opcode & 7) >> 0;
4259: {{ ULONG src = srcreg;
4260: { CPTR dsta = regs.a[dstreg];
4261: WORD dst = get_word(dsta);
4262: { regs.a[dstreg] += 2;
4263: { ULONG newv = dst + src;
4264: { bool flgs = ((WORD)(src)) < 0;
4265: bool flgo = ((WORD)(dst)) < 0;
4266: bool flgn = ((WORD)(newv)) < 0;
4267: regs.z = ((WORD)(newv)) == 0;
4268: regs.v = (flgs == flgo) && (flgn != flgo);
4269: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
4270: regs.n = flgn != 0;
4271: put_word(dsta,newv);
4272: }}}}}}}
4273: void op_5860(UWORD opcode)
4274: {
4275: ULONG srcreg = 4;
4276: ULONG dstreg = (opcode & 7) >> 0;
4277: {{ ULONG src = srcreg;
4278: { regs.a[dstreg] -= 2;
4279: { CPTR dsta = regs.a[dstreg];
4280: WORD dst = get_word(dsta);
4281: { ULONG newv = dst + src;
4282: { bool flgs = ((WORD)(src)) < 0;
4283: bool flgo = ((WORD)(dst)) < 0;
4284: bool flgn = ((WORD)(newv)) < 0;
4285: regs.z = ((WORD)(newv)) == 0;
4286: regs.v = (flgs == flgo) && (flgn != flgo);
4287: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
4288: regs.n = flgn != 0;
4289: put_word(dsta,newv);
4290: }}}}}}}
4291: void op_5868(UWORD opcode)
4292: {
4293: ULONG srcreg = 4;
4294: ULONG dstreg = (opcode & 7) >> 0;
4295: {{ ULONG src = srcreg;
4296: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
4297: WORD dst = get_word(dsta);
4298: { ULONG newv = dst + src;
4299: { bool flgs = ((WORD)(src)) < 0;
4300: bool flgo = ((WORD)(dst)) < 0;
4301: bool flgn = ((WORD)(newv)) < 0;
4302: regs.z = ((WORD)(newv)) == 0;
4303: regs.v = (flgs == flgo) && (flgn != flgo);
4304: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
4305: regs.n = flgn != 0;
4306: put_word(dsta,newv);
4307: }}}}}}
4308: void op_5870(UWORD opcode)
4309: {
4310: ULONG srcreg = 4;
4311: ULONG dstreg = (opcode & 7) >> 0;
4312: {{ ULONG src = srcreg;
4313: { CPTR dsta = regs.a[dstreg];
4314: UWORD dstdp = nextiword();
4315: dsta += (LONG)(BYTE)(dstdp & 0xFF);
4316: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
4317: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
4318: dsta += dstdpr;
4319: { WORD dst = get_word(dsta);
4320: { ULONG newv = dst + src;
4321: { bool flgs = ((WORD)(src)) < 0;
4322: bool flgo = ((WORD)(dst)) < 0;
4323: bool flgn = ((WORD)(newv)) < 0;
4324: regs.z = ((WORD)(newv)) == 0;
4325: regs.v = (flgs == flgo) && (flgn != flgo);
4326: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
4327: regs.n = flgn != 0;
4328: put_word(dsta,newv);
4329: }}}}}}}}
4330: void op_5878(UWORD opcode)
4331: {
4332: ULONG srcreg = 4;
4333: {{ ULONG src = srcreg;
4334: { CPTR dsta = (LONG)(WORD)nextiword();
4335: WORD dst = get_word(dsta);
4336: { ULONG newv = dst + src;
4337: { bool flgs = ((WORD)(src)) < 0;
4338: bool flgo = ((WORD)(dst)) < 0;
4339: bool flgn = ((WORD)(newv)) < 0;
4340: regs.z = ((WORD)(newv)) == 0;
4341: regs.v = (flgs == flgo) && (flgn != flgo);
4342: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
4343: regs.n = flgn != 0;
4344: put_word(dsta,newv);
4345: }}}}}}
4346: void op_5879(UWORD opcode)
4347: {
4348: ULONG srcreg = 4;
4349: {{ ULONG src = srcreg;
4350: { CPTR dsta = nextilong();
4351: WORD dst = get_word(dsta);
4352: { ULONG newv = dst + src;
4353: { bool flgs = ((WORD)(src)) < 0;
4354: bool flgo = ((WORD)(dst)) < 0;
4355: bool flgn = ((WORD)(newv)) < 0;
4356: regs.z = ((WORD)(newv)) == 0;
4357: regs.v = (flgs == flgo) && (flgn != flgo);
4358: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
4359: regs.n = flgn != 0;
4360: put_word(dsta,newv);
4361: }}}}}}
4362: void op_5880(UWORD opcode)
4363: {
4364: ULONG srcreg = 4;
4365: ULONG dstreg = (opcode & 7) >> 0;
4366: {{ ULONG src = srcreg;
4367: { LONG dst = regs.d[dstreg];
4368: { ULONG newv = dst + src;
4369: { bool flgs = ((LONG)(src)) < 0;
4370: bool flgo = ((LONG)(dst)) < 0;
4371: bool flgn = ((LONG)(newv)) < 0;
4372: regs.z = ((LONG)(newv)) == 0;
4373: regs.v = (flgs == flgo) && (flgn != flgo);
4374: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
4375: regs.n = flgn != 0;
4376: regs.d[dstreg] = (newv);
4377: }}}}}}
4378: void op_5888(UWORD opcode)
4379: {
4380: ULONG srcreg = 4;
4381: ULONG dstreg = (opcode & 7) >> 0;
4382: {{ ULONG src = srcreg;
4383: { LONG dst = regs.a[dstreg];
4384: { ULONG newv = dst + src;
4385: regs.a[dstreg] = (newv);
4386: }}}}}
4387: void op_5890(UWORD opcode)
4388: {
4389: ULONG srcreg = 4;
4390: ULONG dstreg = (opcode & 7) >> 0;
4391: {{ ULONG src = srcreg;
4392: { CPTR dsta = regs.a[dstreg];
4393: LONG dst = get_long(dsta);
4394: { ULONG newv = dst + src;
4395: { bool flgs = ((LONG)(src)) < 0;
4396: bool flgo = ((LONG)(dst)) < 0;
4397: bool flgn = ((LONG)(newv)) < 0;
4398: regs.z = ((LONG)(newv)) == 0;
4399: regs.v = (flgs == flgo) && (flgn != flgo);
4400: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
4401: regs.n = flgn != 0;
4402: put_long(dsta,newv);
4403: }}}}}}
4404: void op_5898(UWORD opcode)
4405: {
4406: ULONG srcreg = 4;
4407: ULONG dstreg = (opcode & 7) >> 0;
4408: {{ ULONG src = srcreg;
4409: { CPTR dsta = regs.a[dstreg];
4410: LONG dst = get_long(dsta);
4411: { regs.a[dstreg] += 4;
4412: { ULONG newv = dst + src;
4413: { bool flgs = ((LONG)(src)) < 0;
4414: bool flgo = ((LONG)(dst)) < 0;
4415: bool flgn = ((LONG)(newv)) < 0;
4416: regs.z = ((LONG)(newv)) == 0;
4417: regs.v = (flgs == flgo) && (flgn != flgo);
4418: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
4419: regs.n = flgn != 0;
4420: put_long(dsta,newv);
4421: }}}}}}}
4422: void op_58a0(UWORD opcode)
4423: {
4424: ULONG srcreg = 4;
4425: ULONG dstreg = (opcode & 7) >> 0;
4426: {{ ULONG src = srcreg;
4427: { regs.a[dstreg] -= 4;
4428: { CPTR dsta = regs.a[dstreg];
4429: LONG dst = get_long(dsta);
4430: { ULONG newv = dst + src;
4431: { bool flgs = ((LONG)(src)) < 0;
4432: bool flgo = ((LONG)(dst)) < 0;
4433: bool flgn = ((LONG)(newv)) < 0;
4434: regs.z = ((LONG)(newv)) == 0;
4435: regs.v = (flgs == flgo) && (flgn != flgo);
4436: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
4437: regs.n = flgn != 0;
4438: put_long(dsta,newv);
4439: }}}}}}}
4440: void op_58a8(UWORD opcode)
4441: {
4442: ULONG srcreg = 4;
4443: ULONG dstreg = (opcode & 7) >> 0;
4444: {{ ULONG src = srcreg;
4445: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
4446: LONG dst = get_long(dsta);
4447: { ULONG newv = dst + src;
4448: { bool flgs = ((LONG)(src)) < 0;
4449: bool flgo = ((LONG)(dst)) < 0;
4450: bool flgn = ((LONG)(newv)) < 0;
4451: regs.z = ((LONG)(newv)) == 0;
4452: regs.v = (flgs == flgo) && (flgn != flgo);
4453: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
4454: regs.n = flgn != 0;
4455: put_long(dsta,newv);
4456: }}}}}}
4457: void op_58b0(UWORD opcode)
4458: {
4459: ULONG srcreg = 4;
4460: ULONG dstreg = (opcode & 7) >> 0;
4461: {{ ULONG src = srcreg;
4462: { CPTR dsta = regs.a[dstreg];
4463: UWORD dstdp = nextiword();
4464: dsta += (LONG)(BYTE)(dstdp & 0xFF);
4465: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
4466: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
4467: dsta += dstdpr;
4468: { LONG dst = get_long(dsta);
4469: { ULONG newv = dst + src;
4470: { bool flgs = ((LONG)(src)) < 0;
4471: bool flgo = ((LONG)(dst)) < 0;
4472: bool flgn = ((LONG)(newv)) < 0;
4473: regs.z = ((LONG)(newv)) == 0;
4474: regs.v = (flgs == flgo) && (flgn != flgo);
4475: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
4476: regs.n = flgn != 0;
4477: put_long(dsta,newv);
4478: }}}}}}}}
4479: void op_58b8(UWORD opcode)
4480: {
4481: ULONG srcreg = 4;
4482: {{ ULONG src = srcreg;
4483: { CPTR dsta = (LONG)(WORD)nextiword();
4484: LONG dst = get_long(dsta);
4485: { ULONG newv = dst + src;
4486: { bool flgs = ((LONG)(src)) < 0;
4487: bool flgo = ((LONG)(dst)) < 0;
4488: bool flgn = ((LONG)(newv)) < 0;
4489: regs.z = ((LONG)(newv)) == 0;
4490: regs.v = (flgs == flgo) && (flgn != flgo);
4491: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
4492: regs.n = flgn != 0;
4493: put_long(dsta,newv);
4494: }}}}}}
4495: void op_58b9(UWORD opcode)
4496: {
4497: ULONG srcreg = 4;
4498: {{ ULONG src = srcreg;
4499: { CPTR dsta = nextilong();
4500: LONG dst = get_long(dsta);
4501: { ULONG newv = dst + src;
4502: { bool flgs = ((LONG)(src)) < 0;
4503: bool flgo = ((LONG)(dst)) < 0;
4504: bool flgn = ((LONG)(newv)) < 0;
4505: regs.z = ((LONG)(newv)) == 0;
4506: regs.v = (flgs == flgo) && (flgn != flgo);
4507: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
4508: regs.n = flgn != 0;
4509: put_long(dsta,newv);
4510: }}}}}}
4511: void op_58c0(UWORD opcode)
4512: {
4513: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4514: {{{ int val = cctrue(8) ? 0xff : 0;
4515: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
4516: }}}}
4517: void op_58c8(UWORD opcode)
4518: {
4519: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4520: {{ WORD src = regs.d[srcreg];
4521: { WORD offs = nextiword();
4522: if (!cctrue(8)) {
4523: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
4524: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
4525: }
4526: }}}}
4527: void op_58d0(UWORD opcode)
4528: {
4529: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4530: {{ CPTR srca = regs.a[srcreg];
4531: { int val = cctrue(8) ? 0xff : 0;
4532: put_byte(srca,val);
4533: }}}}
4534: void op_58d8(UWORD opcode)
4535: {
4536: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4537: {{ CPTR srca = regs.a[srcreg];
4538: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
4539: { int val = cctrue(8) ? 0xff : 0;
4540: put_byte(srca,val);
4541: }}}}}
4542: void op_58e0(UWORD opcode)
4543: {
4544: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4545: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
4546: { CPTR srca = regs.a[srcreg];
4547: { int val = cctrue(8) ? 0xff : 0;
4548: put_byte(srca,val);
4549: }}}}}
4550: void op_58e8(UWORD opcode)
4551: {
4552: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4553: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
4554: { int val = cctrue(8) ? 0xff : 0;
4555: put_byte(srca,val);
4556: }}}}
4557: void op_58f0(UWORD opcode)
4558: {
4559: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
4560: {{ CPTR srca = regs.a[srcreg];
4561: UWORD srcdp = nextiword();
4562: srca += (LONG)(BYTE)(srcdp & 0xFF);
4563: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
4564: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
4565: srca += srcdpr;
4566: { int val = cctrue(8) ? 0xff : 0;
4567: put_byte(srca,val);
4568: }}}}}
4569: void op_58f8(UWORD opcode)
4570: {
4571: {{ CPTR srca = (LONG)(WORD)nextiword();
4572: { int val = cctrue(8) ? 0xff : 0;
4573: put_byte(srca,val);
4574: }}}}
4575: void op_58f9(UWORD opcode)
4576: {
4577: {{ CPTR srca = nextilong();
4578: { int val = cctrue(8) ? 0xff : 0;
4579: put_byte(srca,val);
4580: }}}}
4581: void op_5900(UWORD opcode)
4582: {
4583: ULONG srcreg = 4;
4584: ULONG dstreg = (opcode & 7) >> 0;
4585: {{ ULONG src = srcreg;
4586: { BYTE dst = regs.d[dstreg];
4587: { ULONG newv = dst - src;
4588: { bool flgs = ((BYTE)(src)) < 0;
4589: bool flgo = ((BYTE)(dst)) < 0;
4590: bool flgn = ((BYTE)(newv)) < 0;
4591: regs.z = ((BYTE)(newv)) == 0;
4592: regs.v = (flgs != flgo) && (flgn != flgo);
4593: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
4594: regs.n = flgn != 0;
4595: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
4596: }}}}}}
4597: void op_5910(UWORD opcode)
4598: {
4599: ULONG srcreg = 4;
4600: ULONG dstreg = (opcode & 7) >> 0;
4601: {{ ULONG src = srcreg;
4602: { CPTR dsta = regs.a[dstreg];
4603: BYTE dst = get_byte(dsta);
4604: { ULONG newv = dst - src;
4605: { bool flgs = ((BYTE)(src)) < 0;
4606: bool flgo = ((BYTE)(dst)) < 0;
4607: bool flgn = ((BYTE)(newv)) < 0;
4608: regs.z = ((BYTE)(newv)) == 0;
4609: regs.v = (flgs != flgo) && (flgn != flgo);
4610: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
4611: regs.n = flgn != 0;
4612: put_byte(dsta,newv);
4613: }}}}}}
4614: void op_5918(UWORD opcode)
4615: {
4616: ULONG srcreg = 4;
4617: ULONG dstreg = (opcode & 7) >> 0;
4618: {{ ULONG src = srcreg;
4619: { CPTR dsta = regs.a[dstreg];
4620: BYTE dst = get_byte(dsta);
4621: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
4622: { ULONG newv = dst - src;
4623: { bool flgs = ((BYTE)(src)) < 0;
4624: bool flgo = ((BYTE)(dst)) < 0;
4625: bool flgn = ((BYTE)(newv)) < 0;
4626: regs.z = ((BYTE)(newv)) == 0;
4627: regs.v = (flgs != flgo) && (flgn != flgo);
4628: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
4629: regs.n = flgn != 0;
4630: put_byte(dsta,newv);
4631: }}}}}}}
4632: void op_5920(UWORD opcode)
4633: {
4634: ULONG srcreg = 4;
4635: ULONG dstreg = (opcode & 7) >> 0;
4636: {{ ULONG src = srcreg;
4637: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
4638: { CPTR dsta = regs.a[dstreg];
4639: BYTE dst = get_byte(dsta);
4640: { ULONG newv = dst - src;
4641: { bool flgs = ((BYTE)(src)) < 0;
4642: bool flgo = ((BYTE)(dst)) < 0;
4643: bool flgn = ((BYTE)(newv)) < 0;
4644: regs.z = ((BYTE)(newv)) == 0;
4645: regs.v = (flgs != flgo) && (flgn != flgo);
4646: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
4647: regs.n = flgn != 0;
4648: put_byte(dsta,newv);
4649: }}}}}}}
4650: void op_5928(UWORD opcode)
4651: {
4652: ULONG srcreg = 4;
4653: ULONG dstreg = (opcode & 7) >> 0;
4654: {{ ULONG src = srcreg;
4655: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
4656: BYTE dst = get_byte(dsta);
4657: { ULONG newv = dst - src;
4658: { bool flgs = ((BYTE)(src)) < 0;
4659: bool flgo = ((BYTE)(dst)) < 0;
4660: bool flgn = ((BYTE)(newv)) < 0;
4661: regs.z = ((BYTE)(newv)) == 0;
4662: regs.v = (flgs != flgo) && (flgn != flgo);
4663: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
4664: regs.n = flgn != 0;
4665: put_byte(dsta,newv);
4666: }}}}}}
4667: void op_5930(UWORD opcode)
4668: {
4669: ULONG srcreg = 4;
4670: ULONG dstreg = (opcode & 7) >> 0;
4671: {{ ULONG src = srcreg;
4672: { CPTR dsta = regs.a[dstreg];
4673: UWORD dstdp = nextiword();
4674: dsta += (LONG)(BYTE)(dstdp & 0xFF);
4675: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
4676: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
4677: dsta += dstdpr;
4678: { BYTE dst = get_byte(dsta);
4679: { ULONG newv = dst - src;
4680: { bool flgs = ((BYTE)(src)) < 0;
4681: bool flgo = ((BYTE)(dst)) < 0;
4682: bool flgn = ((BYTE)(newv)) < 0;
4683: regs.z = ((BYTE)(newv)) == 0;
4684: regs.v = (flgs != flgo) && (flgn != flgo);
4685: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
4686: regs.n = flgn != 0;
4687: put_byte(dsta,newv);
4688: }}}}}}}}
4689: void op_5938(UWORD opcode)
4690: {
4691: ULONG srcreg = 4;
4692: {{ ULONG src = srcreg;
4693: { CPTR dsta = (LONG)(WORD)nextiword();
4694: BYTE dst = get_byte(dsta);
4695: { ULONG newv = dst - src;
4696: { bool flgs = ((BYTE)(src)) < 0;
4697: bool flgo = ((BYTE)(dst)) < 0;
4698: bool flgn = ((BYTE)(newv)) < 0;
4699: regs.z = ((BYTE)(newv)) == 0;
4700: regs.v = (flgs != flgo) && (flgn != flgo);
4701: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
4702: regs.n = flgn != 0;
4703: put_byte(dsta,newv);
4704: }}}}}}
4705: void op_5939(UWORD opcode)
4706: {
4707: ULONG srcreg = 4;
4708: {{ ULONG src = srcreg;
4709: { CPTR dsta = nextilong();
4710: BYTE dst = get_byte(dsta);
4711: { ULONG newv = dst - src;
4712: { bool flgs = ((BYTE)(src)) < 0;
4713: bool flgo = ((BYTE)(dst)) < 0;
4714: bool flgn = ((BYTE)(newv)) < 0;
4715: regs.z = ((BYTE)(newv)) == 0;
4716: regs.v = (flgs != flgo) && (flgn != flgo);
4717: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
4718: regs.n = flgn != 0;
4719: put_byte(dsta,newv);
4720: }}}}}}
4721: void op_5940(UWORD opcode)
4722: {
4723: ULONG srcreg = 4;
4724: ULONG dstreg = (opcode & 7) >> 0;
4725: {{ ULONG src = srcreg;
4726: { WORD dst = regs.d[dstreg];
4727: { ULONG newv = dst - src;
4728: { bool flgs = ((WORD)(src)) < 0;
4729: bool flgo = ((WORD)(dst)) < 0;
4730: bool flgn = ((WORD)(newv)) < 0;
4731: regs.z = ((WORD)(newv)) == 0;
4732: regs.v = (flgs != flgo) && (flgn != flgo);
4733: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
4734: regs.n = flgn != 0;
4735: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
4736: }}}}}}
4737: void op_5948(UWORD opcode)
4738: {
4739: ULONG srcreg = 4;
4740: ULONG dstreg = (opcode & 7) >> 0;
4741: {{ ULONG src = srcreg;
4742: { LONG dst = regs.a[dstreg];
4743: { ULONG newv = dst - src;
4744: regs.a[dstreg] = (newv);
4745: }}}}}
4746: void op_5950(UWORD opcode)
4747: {
4748: ULONG srcreg = 4;
4749: ULONG dstreg = (opcode & 7) >> 0;
4750: {{ ULONG src = srcreg;
4751: { CPTR dsta = regs.a[dstreg];
4752: WORD dst = get_word(dsta);
4753: { ULONG newv = dst - src;
4754: { bool flgs = ((WORD)(src)) < 0;
4755: bool flgo = ((WORD)(dst)) < 0;
4756: bool flgn = ((WORD)(newv)) < 0;
4757: regs.z = ((WORD)(newv)) == 0;
4758: regs.v = (flgs != flgo) && (flgn != flgo);
4759: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
4760: regs.n = flgn != 0;
4761: put_word(dsta,newv);
4762: }}}}}}
4763: void op_5958(UWORD opcode)
4764: {
4765: ULONG srcreg = 4;
4766: ULONG dstreg = (opcode & 7) >> 0;
4767: {{ ULONG src = srcreg;
4768: { CPTR dsta = regs.a[dstreg];
4769: WORD dst = get_word(dsta);
4770: { regs.a[dstreg] += 2;
4771: { ULONG newv = dst - src;
4772: { bool flgs = ((WORD)(src)) < 0;
4773: bool flgo = ((WORD)(dst)) < 0;
4774: bool flgn = ((WORD)(newv)) < 0;
4775: regs.z = ((WORD)(newv)) == 0;
4776: regs.v = (flgs != flgo) && (flgn != flgo);
4777: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
4778: regs.n = flgn != 0;
4779: put_word(dsta,newv);
4780: }}}}}}}
4781: void op_5960(UWORD opcode)
4782: {
4783: ULONG srcreg = 4;
4784: ULONG dstreg = (opcode & 7) >> 0;
4785: {{ ULONG src = srcreg;
4786: { regs.a[dstreg] -= 2;
4787: { CPTR dsta = regs.a[dstreg];
4788: WORD dst = get_word(dsta);
4789: { ULONG newv = dst - src;
4790: { bool flgs = ((WORD)(src)) < 0;
4791: bool flgo = ((WORD)(dst)) < 0;
4792: bool flgn = ((WORD)(newv)) < 0;
4793: regs.z = ((WORD)(newv)) == 0;
4794: regs.v = (flgs != flgo) && (flgn != flgo);
4795: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
4796: regs.n = flgn != 0;
4797: put_word(dsta,newv);
4798: }}}}}}}
4799: void op_5968(UWORD opcode)
4800: {
4801: ULONG srcreg = 4;
4802: ULONG dstreg = (opcode & 7) >> 0;
4803: {{ ULONG src = srcreg;
4804: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
4805: WORD dst = get_word(dsta);
4806: { ULONG newv = dst - src;
4807: { bool flgs = ((WORD)(src)) < 0;
4808: bool flgo = ((WORD)(dst)) < 0;
4809: bool flgn = ((WORD)(newv)) < 0;
4810: regs.z = ((WORD)(newv)) == 0;
4811: regs.v = (flgs != flgo) && (flgn != flgo);
4812: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
4813: regs.n = flgn != 0;
4814: put_word(dsta,newv);
4815: }}}}}}
4816: void op_5970(UWORD opcode)
4817: {
4818: ULONG srcreg = 4;
4819: ULONG dstreg = (opcode & 7) >> 0;
4820: {{ ULONG src = srcreg;
4821: { CPTR dsta = regs.a[dstreg];
4822: UWORD dstdp = nextiword();
4823: dsta += (LONG)(BYTE)(dstdp & 0xFF);
4824: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
4825: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
4826: dsta += dstdpr;
4827: { WORD dst = get_word(dsta);
4828: { ULONG newv = dst - src;
4829: { bool flgs = ((WORD)(src)) < 0;
4830: bool flgo = ((WORD)(dst)) < 0;
4831: bool flgn = ((WORD)(newv)) < 0;
4832: regs.z = ((WORD)(newv)) == 0;
4833: regs.v = (flgs != flgo) && (flgn != flgo);
4834: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
4835: regs.n = flgn != 0;
4836: put_word(dsta,newv);
4837: }}}}}}}}
4838: void op_5978(UWORD opcode)
4839: {
4840: ULONG srcreg = 4;
4841: {{ ULONG src = srcreg;
4842: { CPTR dsta = (LONG)(WORD)nextiword();
4843: WORD dst = get_word(dsta);
4844: { ULONG newv = dst - src;
4845: { bool flgs = ((WORD)(src)) < 0;
4846: bool flgo = ((WORD)(dst)) < 0;
4847: bool flgn = ((WORD)(newv)) < 0;
4848: regs.z = ((WORD)(newv)) == 0;
4849: regs.v = (flgs != flgo) && (flgn != flgo);
4850: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
4851: regs.n = flgn != 0;
4852: put_word(dsta,newv);
4853: }}}}}}
4854: void op_5979(UWORD opcode)
4855: {
4856: ULONG srcreg = 4;
4857: {{ ULONG src = srcreg;
4858: { CPTR dsta = nextilong();
4859: WORD dst = get_word(dsta);
4860: { ULONG newv = dst - src;
4861: { bool flgs = ((WORD)(src)) < 0;
4862: bool flgo = ((WORD)(dst)) < 0;
4863: bool flgn = ((WORD)(newv)) < 0;
4864: regs.z = ((WORD)(newv)) == 0;
4865: regs.v = (flgs != flgo) && (flgn != flgo);
4866: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
4867: regs.n = flgn != 0;
4868: put_word(dsta,newv);
4869: }}}}}}
4870: void op_5980(UWORD opcode)
4871: {
4872: ULONG srcreg = 4;
4873: ULONG dstreg = (opcode & 7) >> 0;
4874: {{ ULONG src = srcreg;
4875: { LONG dst = regs.d[dstreg];
4876: { ULONG newv = dst - src;
4877: { bool flgs = ((LONG)(src)) < 0;
4878: bool flgo = ((LONG)(dst)) < 0;
4879: bool flgn = ((LONG)(newv)) < 0;
4880: regs.z = ((LONG)(newv)) == 0;
4881: regs.v = (flgs != flgo) && (flgn != flgo);
4882: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
4883: regs.n = flgn != 0;
4884: regs.d[dstreg] = (newv);
4885: }}}}}}
4886: void op_5988(UWORD opcode)
4887: {
4888: ULONG srcreg = 4;
4889: ULONG dstreg = (opcode & 7) >> 0;
4890: {{ ULONG src = srcreg;
4891: { LONG dst = regs.a[dstreg];
4892: { ULONG newv = dst - src;
4893: regs.a[dstreg] = (newv);
4894: }}}}}
4895: void op_5990(UWORD opcode)
4896: {
4897: ULONG srcreg = 4;
4898: ULONG dstreg = (opcode & 7) >> 0;
4899: {{ ULONG src = srcreg;
4900: { CPTR dsta = regs.a[dstreg];
4901: LONG dst = get_long(dsta);
4902: { ULONG newv = dst - src;
4903: { bool flgs = ((LONG)(src)) < 0;
4904: bool flgo = ((LONG)(dst)) < 0;
4905: bool flgn = ((LONG)(newv)) < 0;
4906: regs.z = ((LONG)(newv)) == 0;
4907: regs.v = (flgs != flgo) && (flgn != flgo);
4908: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
4909: regs.n = flgn != 0;
4910: put_long(dsta,newv);
4911: }}}}}}
4912: void op_5998(UWORD opcode)
4913: {
4914: ULONG srcreg = 4;
4915: ULONG dstreg = (opcode & 7) >> 0;
4916: {{ ULONG src = srcreg;
4917: { CPTR dsta = regs.a[dstreg];
4918: LONG dst = get_long(dsta);
4919: { regs.a[dstreg] += 4;
4920: { ULONG newv = dst - src;
4921: { bool flgs = ((LONG)(src)) < 0;
4922: bool flgo = ((LONG)(dst)) < 0;
4923: bool flgn = ((LONG)(newv)) < 0;
4924: regs.z = ((LONG)(newv)) == 0;
4925: regs.v = (flgs != flgo) && (flgn != flgo);
4926: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
4927: regs.n = flgn != 0;
4928: put_long(dsta,newv);
4929: }}}}}}}
4930: void op_59a0(UWORD opcode)
4931: {
4932: ULONG srcreg = 4;
4933: ULONG dstreg = (opcode & 7) >> 0;
4934: {{ ULONG src = srcreg;
4935: { regs.a[dstreg] -= 4;
4936: { CPTR dsta = regs.a[dstreg];
4937: LONG dst = get_long(dsta);
4938: { ULONG newv = dst - src;
4939: { bool flgs = ((LONG)(src)) < 0;
4940: bool flgo = ((LONG)(dst)) < 0;
4941: bool flgn = ((LONG)(newv)) < 0;
4942: regs.z = ((LONG)(newv)) == 0;
4943: regs.v = (flgs != flgo) && (flgn != flgo);
4944: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
4945: regs.n = flgn != 0;
4946: put_long(dsta,newv);
4947: }}}}}}}
4948: void op_59a8(UWORD opcode)
4949: {
4950: ULONG srcreg = 4;
4951: ULONG dstreg = (opcode & 7) >> 0;
4952: {{ ULONG src = srcreg;
4953: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
4954: LONG dst = get_long(dsta);
4955: { ULONG newv = dst - src;
4956: { bool flgs = ((LONG)(src)) < 0;
4957: bool flgo = ((LONG)(dst)) < 0;
4958: bool flgn = ((LONG)(newv)) < 0;
4959: regs.z = ((LONG)(newv)) == 0;
4960: regs.v = (flgs != flgo) && (flgn != flgo);
4961: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
4962: regs.n = flgn != 0;
4963: put_long(dsta,newv);
4964: }}}}}}
4965: void op_59b0(UWORD opcode)
4966: {
4967: ULONG srcreg = 4;
4968: ULONG dstreg = (opcode & 7) >> 0;
4969: {{ ULONG src = srcreg;
4970: { CPTR dsta = regs.a[dstreg];
4971: UWORD dstdp = nextiword();
4972: dsta += (LONG)(BYTE)(dstdp & 0xFF);
4973: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
4974: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
4975: dsta += dstdpr;
4976: { LONG dst = get_long(dsta);
4977: { ULONG newv = dst - src;
4978: { bool flgs = ((LONG)(src)) < 0;
4979: bool flgo = ((LONG)(dst)) < 0;
4980: bool flgn = ((LONG)(newv)) < 0;
4981: regs.z = ((LONG)(newv)) == 0;
4982: regs.v = (flgs != flgo) && (flgn != flgo);
4983: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
4984: regs.n = flgn != 0;
4985: put_long(dsta,newv);
4986: }}}}}}}}
4987: void op_59b8(UWORD opcode)
4988: {
4989: ULONG srcreg = 4;
4990: {{ ULONG src = srcreg;
4991: { CPTR dsta = (LONG)(WORD)nextiword();
4992: LONG dst = get_long(dsta);
4993: { ULONG newv = dst - src;
4994: { bool flgs = ((LONG)(src)) < 0;
4995: bool flgo = ((LONG)(dst)) < 0;
4996: bool flgn = ((LONG)(newv)) < 0;
4997: regs.z = ((LONG)(newv)) == 0;
4998: regs.v = (flgs != flgo) && (flgn != flgo);
4999: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
5000: regs.n = flgn != 0;
5001: put_long(dsta,newv);
5002: }}}}}}
5003: void op_59b9(UWORD opcode)
5004: {
5005: ULONG srcreg = 4;
5006: {{ ULONG src = srcreg;
5007: { CPTR dsta = nextilong();
5008: LONG dst = get_long(dsta);
5009: { ULONG newv = dst - src;
5010: { bool flgs = ((LONG)(src)) < 0;
5011: bool flgo = ((LONG)(dst)) < 0;
5012: bool flgn = ((LONG)(newv)) < 0;
5013: regs.z = ((LONG)(newv)) == 0;
5014: regs.v = (flgs != flgo) && (flgn != flgo);
5015: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
5016: regs.n = flgn != 0;
5017: put_long(dsta,newv);
5018: }}}}}}
5019: void op_59c0(UWORD opcode)
5020: {
5021: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5022: {{{ int val = cctrue(9) ? 0xff : 0;
5023: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
5024: }}}}
5025: void op_59c8(UWORD opcode)
5026: {
5027: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5028: {{ WORD src = regs.d[srcreg];
5029: { WORD offs = nextiword();
5030: if (!cctrue(9)) {
5031: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
5032: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
5033: }
5034: }}}}
5035: void op_59d0(UWORD opcode)
5036: {
5037: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5038: {{ CPTR srca = regs.a[srcreg];
5039: { int val = cctrue(9) ? 0xff : 0;
5040: put_byte(srca,val);
5041: }}}}
5042: void op_59d8(UWORD opcode)
5043: {
5044: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5045: {{ CPTR srca = regs.a[srcreg];
5046: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
5047: { int val = cctrue(9) ? 0xff : 0;
5048: put_byte(srca,val);
5049: }}}}}
5050: void op_59e0(UWORD opcode)
5051: {
5052: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5053: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
5054: { CPTR srca = regs.a[srcreg];
5055: { int val = cctrue(9) ? 0xff : 0;
5056: put_byte(srca,val);
5057: }}}}}
5058: void op_59e8(UWORD opcode)
5059: {
5060: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5061: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
5062: { int val = cctrue(9) ? 0xff : 0;
5063: put_byte(srca,val);
5064: }}}}
5065: void op_59f0(UWORD opcode)
5066: {
5067: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5068: {{ CPTR srca = regs.a[srcreg];
5069: UWORD srcdp = nextiword();
5070: srca += (LONG)(BYTE)(srcdp & 0xFF);
5071: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
5072: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
5073: srca += srcdpr;
5074: { int val = cctrue(9) ? 0xff : 0;
5075: put_byte(srca,val);
5076: }}}}}
5077: void op_59f8(UWORD opcode)
5078: {
5079: {{ CPTR srca = (LONG)(WORD)nextiword();
5080: { int val = cctrue(9) ? 0xff : 0;
5081: put_byte(srca,val);
5082: }}}}
5083: void op_59f9(UWORD opcode)
5084: {
5085: {{ CPTR srca = nextilong();
5086: { int val = cctrue(9) ? 0xff : 0;
5087: put_byte(srca,val);
5088: }}}}
5089: void op_5a00(UWORD opcode)
5090: {
5091: ULONG srcreg = 5;
5092: ULONG dstreg = (opcode & 7) >> 0;
5093: {{ ULONG src = srcreg;
5094: { BYTE dst = regs.d[dstreg];
5095: { ULONG newv = dst + src;
5096: { bool flgs = ((BYTE)(src)) < 0;
5097: bool flgo = ((BYTE)(dst)) < 0;
5098: bool flgn = ((BYTE)(newv)) < 0;
5099: regs.z = ((BYTE)(newv)) == 0;
5100: regs.v = (flgs == flgo) && (flgn != flgo);
5101: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
5102: regs.n = flgn != 0;
5103: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
5104: }}}}}}
5105: void op_5a10(UWORD opcode)
5106: {
5107: ULONG srcreg = 5;
5108: ULONG dstreg = (opcode & 7) >> 0;
5109: {{ ULONG src = srcreg;
5110: { CPTR dsta = regs.a[dstreg];
5111: BYTE dst = get_byte(dsta);
5112: { ULONG newv = dst + src;
5113: { bool flgs = ((BYTE)(src)) < 0;
5114: bool flgo = ((BYTE)(dst)) < 0;
5115: bool flgn = ((BYTE)(newv)) < 0;
5116: regs.z = ((BYTE)(newv)) == 0;
5117: regs.v = (flgs == flgo) && (flgn != flgo);
5118: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
5119: regs.n = flgn != 0;
5120: put_byte(dsta,newv);
5121: }}}}}}
5122: void op_5a18(UWORD opcode)
5123: {
5124: ULONG srcreg = 5;
5125: ULONG dstreg = (opcode & 7) >> 0;
5126: {{ ULONG src = srcreg;
5127: { CPTR dsta = regs.a[dstreg];
5128: BYTE dst = get_byte(dsta);
5129: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
5130: { ULONG newv = dst + src;
5131: { bool flgs = ((BYTE)(src)) < 0;
5132: bool flgo = ((BYTE)(dst)) < 0;
5133: bool flgn = ((BYTE)(newv)) < 0;
5134: regs.z = ((BYTE)(newv)) == 0;
5135: regs.v = (flgs == flgo) && (flgn != flgo);
5136: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
5137: regs.n = flgn != 0;
5138: put_byte(dsta,newv);
5139: }}}}}}}
5140: void op_5a20(UWORD opcode)
5141: {
5142: ULONG srcreg = 5;
5143: ULONG dstreg = (opcode & 7) >> 0;
5144: {{ ULONG src = srcreg;
5145: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
5146: { CPTR dsta = regs.a[dstreg];
5147: BYTE dst = get_byte(dsta);
5148: { ULONG newv = dst + src;
5149: { bool flgs = ((BYTE)(src)) < 0;
5150: bool flgo = ((BYTE)(dst)) < 0;
5151: bool flgn = ((BYTE)(newv)) < 0;
5152: regs.z = ((BYTE)(newv)) == 0;
5153: regs.v = (flgs == flgo) && (flgn != flgo);
5154: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
5155: regs.n = flgn != 0;
5156: put_byte(dsta,newv);
5157: }}}}}}}
5158: void op_5a28(UWORD opcode)
5159: {
5160: ULONG srcreg = 5;
5161: ULONG dstreg = (opcode & 7) >> 0;
5162: {{ ULONG src = srcreg;
5163: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
5164: BYTE dst = get_byte(dsta);
5165: { ULONG newv = dst + src;
5166: { bool flgs = ((BYTE)(src)) < 0;
5167: bool flgo = ((BYTE)(dst)) < 0;
5168: bool flgn = ((BYTE)(newv)) < 0;
5169: regs.z = ((BYTE)(newv)) == 0;
5170: regs.v = (flgs == flgo) && (flgn != flgo);
5171: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
5172: regs.n = flgn != 0;
5173: put_byte(dsta,newv);
5174: }}}}}}
5175: void op_5a30(UWORD opcode)
5176: {
5177: ULONG srcreg = 5;
5178: ULONG dstreg = (opcode & 7) >> 0;
5179: {{ ULONG src = srcreg;
5180: { CPTR dsta = regs.a[dstreg];
5181: UWORD dstdp = nextiword();
5182: dsta += (LONG)(BYTE)(dstdp & 0xFF);
5183: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
5184: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
5185: dsta += dstdpr;
5186: { BYTE dst = get_byte(dsta);
5187: { ULONG newv = dst + src;
5188: { bool flgs = ((BYTE)(src)) < 0;
5189: bool flgo = ((BYTE)(dst)) < 0;
5190: bool flgn = ((BYTE)(newv)) < 0;
5191: regs.z = ((BYTE)(newv)) == 0;
5192: regs.v = (flgs == flgo) && (flgn != flgo);
5193: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
5194: regs.n = flgn != 0;
5195: put_byte(dsta,newv);
5196: }}}}}}}}
5197: void op_5a38(UWORD opcode)
5198: {
5199: ULONG srcreg = 5;
5200: {{ ULONG src = srcreg;
5201: { CPTR dsta = (LONG)(WORD)nextiword();
5202: BYTE dst = get_byte(dsta);
5203: { ULONG newv = dst + src;
5204: { bool flgs = ((BYTE)(src)) < 0;
5205: bool flgo = ((BYTE)(dst)) < 0;
5206: bool flgn = ((BYTE)(newv)) < 0;
5207: regs.z = ((BYTE)(newv)) == 0;
5208: regs.v = (flgs == flgo) && (flgn != flgo);
5209: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
5210: regs.n = flgn != 0;
5211: put_byte(dsta,newv);
5212: }}}}}}
5213: void op_5a39(UWORD opcode)
5214: {
5215: ULONG srcreg = 5;
5216: {{ ULONG src = srcreg;
5217: { CPTR dsta = nextilong();
5218: BYTE dst = get_byte(dsta);
5219: { ULONG newv = dst + src;
5220: { bool flgs = ((BYTE)(src)) < 0;
5221: bool flgo = ((BYTE)(dst)) < 0;
5222: bool flgn = ((BYTE)(newv)) < 0;
5223: regs.z = ((BYTE)(newv)) == 0;
5224: regs.v = (flgs == flgo) && (flgn != flgo);
5225: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
5226: regs.n = flgn != 0;
5227: put_byte(dsta,newv);
5228: }}}}}}
5229: void op_5a40(UWORD opcode)
5230: {
5231: ULONG srcreg = 5;
5232: ULONG dstreg = (opcode & 7) >> 0;
5233: {{ ULONG src = srcreg;
5234: { WORD dst = regs.d[dstreg];
5235: { ULONG newv = dst + src;
5236: { bool flgs = ((WORD)(src)) < 0;
5237: bool flgo = ((WORD)(dst)) < 0;
5238: bool flgn = ((WORD)(newv)) < 0;
5239: regs.z = ((WORD)(newv)) == 0;
5240: regs.v = (flgs == flgo) && (flgn != flgo);
5241: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
5242: regs.n = flgn != 0;
5243: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
5244: }}}}}}
5245: void op_5a48(UWORD opcode)
5246: {
5247: ULONG srcreg = 5;
5248: ULONG dstreg = (opcode & 7) >> 0;
5249: {{ ULONG src = srcreg;
5250: { LONG dst = regs.a[dstreg];
5251: { ULONG newv = dst + src;
5252: regs.a[dstreg] = (newv);
5253: }}}}}
5254: void op_5a50(UWORD opcode)
5255: {
5256: ULONG srcreg = 5;
5257: ULONG dstreg = (opcode & 7) >> 0;
5258: {{ ULONG src = srcreg;
5259: { CPTR dsta = regs.a[dstreg];
5260: WORD dst = get_word(dsta);
5261: { ULONG newv = dst + src;
5262: { bool flgs = ((WORD)(src)) < 0;
5263: bool flgo = ((WORD)(dst)) < 0;
5264: bool flgn = ((WORD)(newv)) < 0;
5265: regs.z = ((WORD)(newv)) == 0;
5266: regs.v = (flgs == flgo) && (flgn != flgo);
5267: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
5268: regs.n = flgn != 0;
5269: put_word(dsta,newv);
5270: }}}}}}
5271: void op_5a58(UWORD opcode)
5272: {
5273: ULONG srcreg = 5;
5274: ULONG dstreg = (opcode & 7) >> 0;
5275: {{ ULONG src = srcreg;
5276: { CPTR dsta = regs.a[dstreg];
5277: WORD dst = get_word(dsta);
5278: { regs.a[dstreg] += 2;
5279: { ULONG newv = dst + src;
5280: { bool flgs = ((WORD)(src)) < 0;
5281: bool flgo = ((WORD)(dst)) < 0;
5282: bool flgn = ((WORD)(newv)) < 0;
5283: regs.z = ((WORD)(newv)) == 0;
5284: regs.v = (flgs == flgo) && (flgn != flgo);
5285: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
5286: regs.n = flgn != 0;
5287: put_word(dsta,newv);
5288: }}}}}}}
5289: void op_5a60(UWORD opcode)
5290: {
5291: ULONG srcreg = 5;
5292: ULONG dstreg = (opcode & 7) >> 0;
5293: {{ ULONG src = srcreg;
5294: { regs.a[dstreg] -= 2;
5295: { CPTR dsta = regs.a[dstreg];
5296: WORD dst = get_word(dsta);
5297: { ULONG newv = dst + src;
5298: { bool flgs = ((WORD)(src)) < 0;
5299: bool flgo = ((WORD)(dst)) < 0;
5300: bool flgn = ((WORD)(newv)) < 0;
5301: regs.z = ((WORD)(newv)) == 0;
5302: regs.v = (flgs == flgo) && (flgn != flgo);
5303: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
5304: regs.n = flgn != 0;
5305: put_word(dsta,newv);
5306: }}}}}}}
5307: void op_5a68(UWORD opcode)
5308: {
5309: ULONG srcreg = 5;
5310: ULONG dstreg = (opcode & 7) >> 0;
5311: {{ ULONG src = srcreg;
5312: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
5313: WORD dst = get_word(dsta);
5314: { ULONG newv = dst + src;
5315: { bool flgs = ((WORD)(src)) < 0;
5316: bool flgo = ((WORD)(dst)) < 0;
5317: bool flgn = ((WORD)(newv)) < 0;
5318: regs.z = ((WORD)(newv)) == 0;
5319: regs.v = (flgs == flgo) && (flgn != flgo);
5320: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
5321: regs.n = flgn != 0;
5322: put_word(dsta,newv);
5323: }}}}}}
5324: void op_5a70(UWORD opcode)
5325: {
5326: ULONG srcreg = 5;
5327: ULONG dstreg = (opcode & 7) >> 0;
5328: {{ ULONG src = srcreg;
5329: { CPTR dsta = regs.a[dstreg];
5330: UWORD dstdp = nextiword();
5331: dsta += (LONG)(BYTE)(dstdp & 0xFF);
5332: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
5333: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
5334: dsta += dstdpr;
5335: { WORD dst = get_word(dsta);
5336: { ULONG newv = dst + src;
5337: { bool flgs = ((WORD)(src)) < 0;
5338: bool flgo = ((WORD)(dst)) < 0;
5339: bool flgn = ((WORD)(newv)) < 0;
5340: regs.z = ((WORD)(newv)) == 0;
5341: regs.v = (flgs == flgo) && (flgn != flgo);
5342: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
5343: regs.n = flgn != 0;
5344: put_word(dsta,newv);
5345: }}}}}}}}
5346: void op_5a78(UWORD opcode)
5347: {
5348: ULONG srcreg = 5;
5349: {{ ULONG src = srcreg;
5350: { CPTR dsta = (LONG)(WORD)nextiword();
5351: WORD dst = get_word(dsta);
5352: { ULONG newv = dst + src;
5353: { bool flgs = ((WORD)(src)) < 0;
5354: bool flgo = ((WORD)(dst)) < 0;
5355: bool flgn = ((WORD)(newv)) < 0;
5356: regs.z = ((WORD)(newv)) == 0;
5357: regs.v = (flgs == flgo) && (flgn != flgo);
5358: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
5359: regs.n = flgn != 0;
5360: put_word(dsta,newv);
5361: }}}}}}
5362: void op_5a79(UWORD opcode)
5363: {
5364: ULONG srcreg = 5;
5365: {{ ULONG src = srcreg;
5366: { CPTR dsta = nextilong();
5367: WORD dst = get_word(dsta);
5368: { ULONG newv = dst + src;
5369: { bool flgs = ((WORD)(src)) < 0;
5370: bool flgo = ((WORD)(dst)) < 0;
5371: bool flgn = ((WORD)(newv)) < 0;
5372: regs.z = ((WORD)(newv)) == 0;
5373: regs.v = (flgs == flgo) && (flgn != flgo);
5374: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
5375: regs.n = flgn != 0;
5376: put_word(dsta,newv);
5377: }}}}}}
5378: void op_5a80(UWORD opcode)
5379: {
5380: ULONG srcreg = 5;
5381: ULONG dstreg = (opcode & 7) >> 0;
5382: {{ ULONG src = srcreg;
5383: { LONG dst = regs.d[dstreg];
5384: { ULONG newv = dst + src;
5385: { bool flgs = ((LONG)(src)) < 0;
5386: bool flgo = ((LONG)(dst)) < 0;
5387: bool flgn = ((LONG)(newv)) < 0;
5388: regs.z = ((LONG)(newv)) == 0;
5389: regs.v = (flgs == flgo) && (flgn != flgo);
5390: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
5391: regs.n = flgn != 0;
5392: regs.d[dstreg] = (newv);
5393: }}}}}}
5394: void op_5a88(UWORD opcode)
5395: {
5396: ULONG srcreg = 5;
5397: ULONG dstreg = (opcode & 7) >> 0;
5398: {{ ULONG src = srcreg;
5399: { LONG dst = regs.a[dstreg];
5400: { ULONG newv = dst + src;
5401: regs.a[dstreg] = (newv);
5402: }}}}}
5403: void op_5a90(UWORD opcode)
5404: {
5405: ULONG srcreg = 5;
5406: ULONG dstreg = (opcode & 7) >> 0;
5407: {{ ULONG src = srcreg;
5408: { CPTR dsta = regs.a[dstreg];
5409: LONG dst = get_long(dsta);
5410: { ULONG newv = dst + src;
5411: { bool flgs = ((LONG)(src)) < 0;
5412: bool flgo = ((LONG)(dst)) < 0;
5413: bool flgn = ((LONG)(newv)) < 0;
5414: regs.z = ((LONG)(newv)) == 0;
5415: regs.v = (flgs == flgo) && (flgn != flgo);
5416: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
5417: regs.n = flgn != 0;
5418: put_long(dsta,newv);
5419: }}}}}}
5420: void op_5a98(UWORD opcode)
5421: {
5422: ULONG srcreg = 5;
5423: ULONG dstreg = (opcode & 7) >> 0;
5424: {{ ULONG src = srcreg;
5425: { CPTR dsta = regs.a[dstreg];
5426: LONG dst = get_long(dsta);
5427: { regs.a[dstreg] += 4;
5428: { ULONG newv = dst + src;
5429: { bool flgs = ((LONG)(src)) < 0;
5430: bool flgo = ((LONG)(dst)) < 0;
5431: bool flgn = ((LONG)(newv)) < 0;
5432: regs.z = ((LONG)(newv)) == 0;
5433: regs.v = (flgs == flgo) && (flgn != flgo);
5434: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
5435: regs.n = flgn != 0;
5436: put_long(dsta,newv);
5437: }}}}}}}
5438: void op_5aa0(UWORD opcode)
5439: {
5440: ULONG srcreg = 5;
5441: ULONG dstreg = (opcode & 7) >> 0;
5442: {{ ULONG src = srcreg;
5443: { regs.a[dstreg] -= 4;
5444: { CPTR dsta = regs.a[dstreg];
5445: LONG dst = get_long(dsta);
5446: { ULONG newv = dst + src;
5447: { bool flgs = ((LONG)(src)) < 0;
5448: bool flgo = ((LONG)(dst)) < 0;
5449: bool flgn = ((LONG)(newv)) < 0;
5450: regs.z = ((LONG)(newv)) == 0;
5451: regs.v = (flgs == flgo) && (flgn != flgo);
5452: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
5453: regs.n = flgn != 0;
5454: put_long(dsta,newv);
5455: }}}}}}}
5456: void op_5aa8(UWORD opcode)
5457: {
5458: ULONG srcreg = 5;
5459: ULONG dstreg = (opcode & 7) >> 0;
5460: {{ ULONG src = srcreg;
5461: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
5462: LONG dst = get_long(dsta);
5463: { ULONG newv = dst + src;
5464: { bool flgs = ((LONG)(src)) < 0;
5465: bool flgo = ((LONG)(dst)) < 0;
5466: bool flgn = ((LONG)(newv)) < 0;
5467: regs.z = ((LONG)(newv)) == 0;
5468: regs.v = (flgs == flgo) && (flgn != flgo);
5469: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
5470: regs.n = flgn != 0;
5471: put_long(dsta,newv);
5472: }}}}}}
5473: void op_5ab0(UWORD opcode)
5474: {
5475: ULONG srcreg = 5;
5476: ULONG dstreg = (opcode & 7) >> 0;
5477: {{ ULONG src = srcreg;
5478: { CPTR dsta = regs.a[dstreg];
5479: UWORD dstdp = nextiword();
5480: dsta += (LONG)(BYTE)(dstdp & 0xFF);
5481: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
5482: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
5483: dsta += dstdpr;
5484: { LONG dst = get_long(dsta);
5485: { ULONG newv = dst + src;
5486: { bool flgs = ((LONG)(src)) < 0;
5487: bool flgo = ((LONG)(dst)) < 0;
5488: bool flgn = ((LONG)(newv)) < 0;
5489: regs.z = ((LONG)(newv)) == 0;
5490: regs.v = (flgs == flgo) && (flgn != flgo);
5491: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
5492: regs.n = flgn != 0;
5493: put_long(dsta,newv);
5494: }}}}}}}}
5495: void op_5ab8(UWORD opcode)
5496: {
5497: ULONG srcreg = 5;
5498: {{ ULONG src = srcreg;
5499: { CPTR dsta = (LONG)(WORD)nextiword();
5500: LONG dst = get_long(dsta);
5501: { ULONG newv = dst + src;
5502: { bool flgs = ((LONG)(src)) < 0;
5503: bool flgo = ((LONG)(dst)) < 0;
5504: bool flgn = ((LONG)(newv)) < 0;
5505: regs.z = ((LONG)(newv)) == 0;
5506: regs.v = (flgs == flgo) && (flgn != flgo);
5507: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
5508: regs.n = flgn != 0;
5509: put_long(dsta,newv);
5510: }}}}}}
5511: void op_5ab9(UWORD opcode)
5512: {
5513: ULONG srcreg = 5;
5514: {{ ULONG src = srcreg;
5515: { CPTR dsta = nextilong();
5516: LONG dst = get_long(dsta);
5517: { ULONG newv = dst + src;
5518: { bool flgs = ((LONG)(src)) < 0;
5519: bool flgo = ((LONG)(dst)) < 0;
5520: bool flgn = ((LONG)(newv)) < 0;
5521: regs.z = ((LONG)(newv)) == 0;
5522: regs.v = (flgs == flgo) && (flgn != flgo);
5523: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
5524: regs.n = flgn != 0;
5525: put_long(dsta,newv);
5526: }}}}}}
5527: void op_5ac0(UWORD opcode)
5528: {
5529: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5530: {{{ int val = cctrue(10) ? 0xff : 0;
5531: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
5532: }}}}
5533: void op_5ac8(UWORD opcode)
5534: {
5535: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5536: {{ WORD src = regs.d[srcreg];
5537: { WORD offs = nextiword();
5538: if (!cctrue(10)) {
5539: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
5540: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
5541: }
5542: }}}}
5543: void op_5ad0(UWORD opcode)
5544: {
5545: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5546: {{ CPTR srca = regs.a[srcreg];
5547: { int val = cctrue(10) ? 0xff : 0;
5548: put_byte(srca,val);
5549: }}}}
5550: void op_5ad8(UWORD opcode)
5551: {
5552: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5553: {{ CPTR srca = regs.a[srcreg];
5554: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
5555: { int val = cctrue(10) ? 0xff : 0;
5556: put_byte(srca,val);
5557: }}}}}
5558: void op_5ae0(UWORD opcode)
5559: {
5560: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5561: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
5562: { CPTR srca = regs.a[srcreg];
5563: { int val = cctrue(10) ? 0xff : 0;
5564: put_byte(srca,val);
5565: }}}}}
5566: void op_5ae8(UWORD opcode)
5567: {
5568: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5569: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
5570: { int val = cctrue(10) ? 0xff : 0;
5571: put_byte(srca,val);
5572: }}}}
5573: void op_5af0(UWORD opcode)
5574: {
5575: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
5576: {{ CPTR srca = regs.a[srcreg];
5577: UWORD srcdp = nextiword();
5578: srca += (LONG)(BYTE)(srcdp & 0xFF);
5579: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
5580: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
5581: srca += srcdpr;
5582: { int val = cctrue(10) ? 0xff : 0;
5583: put_byte(srca,val);
5584: }}}}}
5585: void op_5af8(UWORD opcode)
5586: {
5587: {{ CPTR srca = (LONG)(WORD)nextiword();
5588: { int val = cctrue(10) ? 0xff : 0;
5589: put_byte(srca,val);
5590: }}}}
5591: void op_5af9(UWORD opcode)
5592: {
5593: {{ CPTR srca = nextilong();
5594: { int val = cctrue(10) ? 0xff : 0;
5595: put_byte(srca,val);
5596: }}}}
5597: void op_5b00(UWORD opcode)
5598: {
5599: ULONG srcreg = 5;
5600: ULONG dstreg = (opcode & 7) >> 0;
5601: {{ ULONG src = srcreg;
5602: { BYTE dst = regs.d[dstreg];
5603: { ULONG newv = dst - src;
5604: { bool flgs = ((BYTE)(src)) < 0;
5605: bool flgo = ((BYTE)(dst)) < 0;
5606: bool flgn = ((BYTE)(newv)) < 0;
5607: regs.z = ((BYTE)(newv)) == 0;
5608: regs.v = (flgs != flgo) && (flgn != flgo);
5609: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
5610: regs.n = flgn != 0;
5611: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
5612: }}}}}}
5613: void op_5b10(UWORD opcode)
5614: {
5615: ULONG srcreg = 5;
5616: ULONG dstreg = (opcode & 7) >> 0;
5617: {{ ULONG src = srcreg;
5618: { CPTR dsta = regs.a[dstreg];
5619: BYTE dst = get_byte(dsta);
5620: { ULONG newv = dst - src;
5621: { bool flgs = ((BYTE)(src)) < 0;
5622: bool flgo = ((BYTE)(dst)) < 0;
5623: bool flgn = ((BYTE)(newv)) < 0;
5624: regs.z = ((BYTE)(newv)) == 0;
5625: regs.v = (flgs != flgo) && (flgn != flgo);
5626: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
5627: regs.n = flgn != 0;
5628: put_byte(dsta,newv);
5629: }}}}}}
5630: void op_5b18(UWORD opcode)
5631: {
5632: ULONG srcreg = 5;
5633: ULONG dstreg = (opcode & 7) >> 0;
5634: {{ ULONG src = srcreg;
5635: { CPTR dsta = regs.a[dstreg];
5636: BYTE dst = get_byte(dsta);
5637: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
5638: { ULONG newv = dst - src;
5639: { bool flgs = ((BYTE)(src)) < 0;
5640: bool flgo = ((BYTE)(dst)) < 0;
5641: bool flgn = ((BYTE)(newv)) < 0;
5642: regs.z = ((BYTE)(newv)) == 0;
5643: regs.v = (flgs != flgo) && (flgn != flgo);
5644: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
5645: regs.n = flgn != 0;
5646: put_byte(dsta,newv);
5647: }}}}}}}
5648: void op_5b20(UWORD opcode)
5649: {
5650: ULONG srcreg = 5;
5651: ULONG dstreg = (opcode & 7) >> 0;
5652: {{ ULONG src = srcreg;
5653: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
5654: { CPTR dsta = regs.a[dstreg];
5655: BYTE dst = get_byte(dsta);
5656: { ULONG newv = dst - src;
5657: { bool flgs = ((BYTE)(src)) < 0;
5658: bool flgo = ((BYTE)(dst)) < 0;
5659: bool flgn = ((BYTE)(newv)) < 0;
5660: regs.z = ((BYTE)(newv)) == 0;
5661: regs.v = (flgs != flgo) && (flgn != flgo);
5662: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
5663: regs.n = flgn != 0;
5664: put_byte(dsta,newv);
5665: }}}}}}}
5666: void op_5b28(UWORD opcode)
5667: {
5668: ULONG srcreg = 5;
5669: ULONG dstreg = (opcode & 7) >> 0;
5670: {{ ULONG src = srcreg;
5671: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
5672: BYTE dst = get_byte(dsta);
5673: { ULONG newv = dst - src;
5674: { bool flgs = ((BYTE)(src)) < 0;
5675: bool flgo = ((BYTE)(dst)) < 0;
5676: bool flgn = ((BYTE)(newv)) < 0;
5677: regs.z = ((BYTE)(newv)) == 0;
5678: regs.v = (flgs != flgo) && (flgn != flgo);
5679: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
5680: regs.n = flgn != 0;
5681: put_byte(dsta,newv);
5682: }}}}}}
5683: void op_5b30(UWORD opcode)
5684: {
5685: ULONG srcreg = 5;
5686: ULONG dstreg = (opcode & 7) >> 0;
5687: {{ ULONG src = srcreg;
5688: { CPTR dsta = regs.a[dstreg];
5689: UWORD dstdp = nextiword();
5690: dsta += (LONG)(BYTE)(dstdp & 0xFF);
5691: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
5692: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
5693: dsta += dstdpr;
5694: { BYTE dst = get_byte(dsta);
5695: { ULONG newv = dst - src;
5696: { bool flgs = ((BYTE)(src)) < 0;
5697: bool flgo = ((BYTE)(dst)) < 0;
5698: bool flgn = ((BYTE)(newv)) < 0;
5699: regs.z = ((BYTE)(newv)) == 0;
5700: regs.v = (flgs != flgo) && (flgn != flgo);
5701: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
5702: regs.n = flgn != 0;
5703: put_byte(dsta,newv);
5704: }}}}}}}}
5705: void op_5b38(UWORD opcode)
5706: {
5707: ULONG srcreg = 5;
5708: {{ ULONG src = srcreg;
5709: { CPTR dsta = (LONG)(WORD)nextiword();
5710: BYTE dst = get_byte(dsta);
5711: { ULONG newv = dst - src;
5712: { bool flgs = ((BYTE)(src)) < 0;
5713: bool flgo = ((BYTE)(dst)) < 0;
5714: bool flgn = ((BYTE)(newv)) < 0;
5715: regs.z = ((BYTE)(newv)) == 0;
5716: regs.v = (flgs != flgo) && (flgn != flgo);
5717: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
5718: regs.n = flgn != 0;
5719: put_byte(dsta,newv);
5720: }}}}}}
5721: void op_5b39(UWORD opcode)
5722: {
5723: ULONG srcreg = 5;
5724: {{ ULONG src = srcreg;
5725: { CPTR dsta = nextilong();
5726: BYTE dst = get_byte(dsta);
5727: { ULONG newv = dst - src;
5728: { bool flgs = ((BYTE)(src)) < 0;
5729: bool flgo = ((BYTE)(dst)) < 0;
5730: bool flgn = ((BYTE)(newv)) < 0;
5731: regs.z = ((BYTE)(newv)) == 0;
5732: regs.v = (flgs != flgo) && (flgn != flgo);
5733: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
5734: regs.n = flgn != 0;
5735: put_byte(dsta,newv);
5736: }}}}}}
5737: void op_5b40(UWORD opcode)
5738: {
5739: ULONG srcreg = 5;
5740: ULONG dstreg = (opcode & 7) >> 0;
5741: {{ ULONG src = srcreg;
5742: { WORD dst = regs.d[dstreg];
5743: { ULONG newv = dst - src;
5744: { bool flgs = ((WORD)(src)) < 0;
5745: bool flgo = ((WORD)(dst)) < 0;
5746: bool flgn = ((WORD)(newv)) < 0;
5747: regs.z = ((WORD)(newv)) == 0;
5748: regs.v = (flgs != flgo) && (flgn != flgo);
5749: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
5750: regs.n = flgn != 0;
5751: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
5752: }}}}}}
5753: void op_5b48(UWORD opcode)
5754: {
5755: ULONG srcreg = 5;
5756: ULONG dstreg = (opcode & 7) >> 0;
5757: {{ ULONG src = srcreg;
5758: { LONG dst = regs.a[dstreg];
5759: { ULONG newv = dst - src;
5760: regs.a[dstreg] = (newv);
5761: }}}}}
5762: void op_5b50(UWORD opcode)
5763: {
5764: ULONG srcreg = 5;
5765: ULONG dstreg = (opcode & 7) >> 0;
5766: {{ ULONG src = srcreg;
5767: { CPTR dsta = regs.a[dstreg];
5768: WORD dst = get_word(dsta);
5769: { ULONG newv = dst - src;
5770: { bool flgs = ((WORD)(src)) < 0;
5771: bool flgo = ((WORD)(dst)) < 0;
5772: bool flgn = ((WORD)(newv)) < 0;
5773: regs.z = ((WORD)(newv)) == 0;
5774: regs.v = (flgs != flgo) && (flgn != flgo);
5775: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
5776: regs.n = flgn != 0;
5777: put_word(dsta,newv);
5778: }}}}}}
5779: void op_5b58(UWORD opcode)
5780: {
5781: ULONG srcreg = 5;
5782: ULONG dstreg = (opcode & 7) >> 0;
5783: {{ ULONG src = srcreg;
5784: { CPTR dsta = regs.a[dstreg];
5785: WORD dst = get_word(dsta);
5786: { regs.a[dstreg] += 2;
5787: { ULONG newv = dst - src;
5788: { bool flgs = ((WORD)(src)) < 0;
5789: bool flgo = ((WORD)(dst)) < 0;
5790: bool flgn = ((WORD)(newv)) < 0;
5791: regs.z = ((WORD)(newv)) == 0;
5792: regs.v = (flgs != flgo) && (flgn != flgo);
5793: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
5794: regs.n = flgn != 0;
5795: put_word(dsta,newv);
5796: }}}}}}}
5797: void op_5b60(UWORD opcode)
5798: {
5799: ULONG srcreg = 5;
5800: ULONG dstreg = (opcode & 7) >> 0;
5801: {{ ULONG src = srcreg;
5802: { regs.a[dstreg] -= 2;
5803: { CPTR dsta = regs.a[dstreg];
5804: WORD dst = get_word(dsta);
5805: { ULONG newv = dst - src;
5806: { bool flgs = ((WORD)(src)) < 0;
5807: bool flgo = ((WORD)(dst)) < 0;
5808: bool flgn = ((WORD)(newv)) < 0;
5809: regs.z = ((WORD)(newv)) == 0;
5810: regs.v = (flgs != flgo) && (flgn != flgo);
5811: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
5812: regs.n = flgn != 0;
5813: put_word(dsta,newv);
5814: }}}}}}}
5815: void op_5b68(UWORD opcode)
5816: {
5817: ULONG srcreg = 5;
5818: ULONG dstreg = (opcode & 7) >> 0;
5819: {{ ULONG src = srcreg;
5820: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
5821: WORD dst = get_word(dsta);
5822: { ULONG newv = dst - src;
5823: { bool flgs = ((WORD)(src)) < 0;
5824: bool flgo = ((WORD)(dst)) < 0;
5825: bool flgn = ((WORD)(newv)) < 0;
5826: regs.z = ((WORD)(newv)) == 0;
5827: regs.v = (flgs != flgo) && (flgn != flgo);
5828: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
5829: regs.n = flgn != 0;
5830: put_word(dsta,newv);
5831: }}}}}}
5832: void op_5b70(UWORD opcode)
5833: {
5834: ULONG srcreg = 5;
5835: ULONG dstreg = (opcode & 7) >> 0;
5836: {{ ULONG src = srcreg;
5837: { CPTR dsta = regs.a[dstreg];
5838: UWORD dstdp = nextiword();
5839: dsta += (LONG)(BYTE)(dstdp & 0xFF);
5840: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
5841: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
5842: dsta += dstdpr;
5843: { WORD dst = get_word(dsta);
5844: { ULONG newv = dst - src;
5845: { bool flgs = ((WORD)(src)) < 0;
5846: bool flgo = ((WORD)(dst)) < 0;
5847: bool flgn = ((WORD)(newv)) < 0;
5848: regs.z = ((WORD)(newv)) == 0;
5849: regs.v = (flgs != flgo) && (flgn != flgo);
5850: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
5851: regs.n = flgn != 0;
5852: put_word(dsta,newv);
5853: }}}}}}}}
5854: void op_5b78(UWORD opcode)
5855: {
5856: ULONG srcreg = 5;
5857: {{ ULONG src = srcreg;
5858: { CPTR dsta = (LONG)(WORD)nextiword();
5859: WORD dst = get_word(dsta);
5860: { ULONG newv = dst - src;
5861: { bool flgs = ((WORD)(src)) < 0;
5862: bool flgo = ((WORD)(dst)) < 0;
5863: bool flgn = ((WORD)(newv)) < 0;
5864: regs.z = ((WORD)(newv)) == 0;
5865: regs.v = (flgs != flgo) && (flgn != flgo);
5866: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
5867: regs.n = flgn != 0;
5868: put_word(dsta,newv);
5869: }}}}}}
5870: void op_5b79(UWORD opcode)
5871: {
5872: ULONG srcreg = 5;
5873: {{ ULONG src = srcreg;
5874: { CPTR dsta = nextilong();
5875: WORD dst = get_word(dsta);
5876: { ULONG newv = dst - src;
5877: { bool flgs = ((WORD)(src)) < 0;
5878: bool flgo = ((WORD)(dst)) < 0;
5879: bool flgn = ((WORD)(newv)) < 0;
5880: regs.z = ((WORD)(newv)) == 0;
5881: regs.v = (flgs != flgo) && (flgn != flgo);
5882: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
5883: regs.n = flgn != 0;
5884: put_word(dsta,newv);
5885: }}}}}}
5886: void op_5b80(UWORD opcode)
5887: {
5888: ULONG srcreg = 5;
5889: ULONG dstreg = (opcode & 7) >> 0;
5890: {{ ULONG src = srcreg;
5891: { LONG dst = regs.d[dstreg];
5892: { ULONG newv = dst - src;
5893: { bool flgs = ((LONG)(src)) < 0;
5894: bool flgo = ((LONG)(dst)) < 0;
5895: bool flgn = ((LONG)(newv)) < 0;
5896: regs.z = ((LONG)(newv)) == 0;
5897: regs.v = (flgs != flgo) && (flgn != flgo);
5898: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
5899: regs.n = flgn != 0;
5900: regs.d[dstreg] = (newv);
5901: }}}}}}
5902: void op_5b88(UWORD opcode)
5903: {
5904: ULONG srcreg = 5;
5905: ULONG dstreg = (opcode & 7) >> 0;
5906: {{ ULONG src = srcreg;
5907: { LONG dst = regs.a[dstreg];
5908: { ULONG newv = dst - src;
5909: regs.a[dstreg] = (newv);
5910: }}}}}
5911: void op_5b90(UWORD opcode)
5912: {
5913: ULONG srcreg = 5;
5914: ULONG dstreg = (opcode & 7) >> 0;
5915: {{ ULONG src = srcreg;
5916: { CPTR dsta = regs.a[dstreg];
5917: LONG dst = get_long(dsta);
5918: { ULONG newv = dst - src;
5919: { bool flgs = ((LONG)(src)) < 0;
5920: bool flgo = ((LONG)(dst)) < 0;
5921: bool flgn = ((LONG)(newv)) < 0;
5922: regs.z = ((LONG)(newv)) == 0;
5923: regs.v = (flgs != flgo) && (flgn != flgo);
5924: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
5925: regs.n = flgn != 0;
5926: put_long(dsta,newv);
5927: }}}}}}
5928: void op_5b98(UWORD opcode)
5929: {
5930: ULONG srcreg = 5;
5931: ULONG dstreg = (opcode & 7) >> 0;
5932: {{ ULONG src = srcreg;
5933: { CPTR dsta = regs.a[dstreg];
5934: LONG dst = get_long(dsta);
5935: { regs.a[dstreg] += 4;
5936: { ULONG newv = dst - src;
5937: { bool flgs = ((LONG)(src)) < 0;
5938: bool flgo = ((LONG)(dst)) < 0;
5939: bool flgn = ((LONG)(newv)) < 0;
5940: regs.z = ((LONG)(newv)) == 0;
5941: regs.v = (flgs != flgo) && (flgn != flgo);
5942: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
5943: regs.n = flgn != 0;
5944: put_long(dsta,newv);
5945: }}}}}}}
5946: void op_5ba0(UWORD opcode)
5947: {
5948: ULONG srcreg = 5;
5949: ULONG dstreg = (opcode & 7) >> 0;
5950: {{ ULONG src = srcreg;
5951: { regs.a[dstreg] -= 4;
5952: { CPTR dsta = regs.a[dstreg];
5953: LONG dst = get_long(dsta);
5954: { ULONG newv = dst - src;
5955: { bool flgs = ((LONG)(src)) < 0;
5956: bool flgo = ((LONG)(dst)) < 0;
5957: bool flgn = ((LONG)(newv)) < 0;
5958: regs.z = ((LONG)(newv)) == 0;
5959: regs.v = (flgs != flgo) && (flgn != flgo);
5960: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
5961: regs.n = flgn != 0;
5962: put_long(dsta,newv);
5963: }}}}}}}
5964: void op_5ba8(UWORD opcode)
5965: {
5966: ULONG srcreg = 5;
5967: ULONG dstreg = (opcode & 7) >> 0;
5968: {{ ULONG src = srcreg;
5969: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
5970: LONG dst = get_long(dsta);
5971: { ULONG newv = dst - src;
5972: { bool flgs = ((LONG)(src)) < 0;
5973: bool flgo = ((LONG)(dst)) < 0;
5974: bool flgn = ((LONG)(newv)) < 0;
5975: regs.z = ((LONG)(newv)) == 0;
5976: regs.v = (flgs != flgo) && (flgn != flgo);
5977: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
5978: regs.n = flgn != 0;
5979: put_long(dsta,newv);
5980: }}}}}}
5981: void op_5bb0(UWORD opcode)
5982: {
5983: ULONG srcreg = 5;
5984: ULONG dstreg = (opcode & 7) >> 0;
5985: {{ ULONG src = srcreg;
5986: { CPTR dsta = regs.a[dstreg];
5987: UWORD dstdp = nextiword();
5988: dsta += (LONG)(BYTE)(dstdp & 0xFF);
5989: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
5990: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
5991: dsta += dstdpr;
5992: { LONG dst = get_long(dsta);
5993: { ULONG newv = dst - src;
5994: { bool flgs = ((LONG)(src)) < 0;
5995: bool flgo = ((LONG)(dst)) < 0;
5996: bool flgn = ((LONG)(newv)) < 0;
5997: regs.z = ((LONG)(newv)) == 0;
5998: regs.v = (flgs != flgo) && (flgn != flgo);
5999: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
6000: regs.n = flgn != 0;
6001: put_long(dsta,newv);
6002: }}}}}}}}
6003: void op_5bb8(UWORD opcode)
6004: {
6005: ULONG srcreg = 5;
6006: {{ ULONG src = srcreg;
6007: { CPTR dsta = (LONG)(WORD)nextiword();
6008: LONG dst = get_long(dsta);
6009: { ULONG newv = dst - src;
6010: { bool flgs = ((LONG)(src)) < 0;
6011: bool flgo = ((LONG)(dst)) < 0;
6012: bool flgn = ((LONG)(newv)) < 0;
6013: regs.z = ((LONG)(newv)) == 0;
6014: regs.v = (flgs != flgo) && (flgn != flgo);
6015: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
6016: regs.n = flgn != 0;
6017: put_long(dsta,newv);
6018: }}}}}}
6019: void op_5bb9(UWORD opcode)
6020: {
6021: ULONG srcreg = 5;
6022: {{ ULONG src = srcreg;
6023: { CPTR dsta = nextilong();
6024: LONG dst = get_long(dsta);
6025: { ULONG newv = dst - src;
6026: { bool flgs = ((LONG)(src)) < 0;
6027: bool flgo = ((LONG)(dst)) < 0;
6028: bool flgn = ((LONG)(newv)) < 0;
6029: regs.z = ((LONG)(newv)) == 0;
6030: regs.v = (flgs != flgo) && (flgn != flgo);
6031: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
6032: regs.n = flgn != 0;
6033: put_long(dsta,newv);
6034: }}}}}}
6035: void op_5bc0(UWORD opcode)
6036: {
6037: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6038: {{{ int val = cctrue(11) ? 0xff : 0;
6039: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
6040: }}}}
6041: void op_5bc8(UWORD opcode)
6042: {
6043: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6044: {{ WORD src = regs.d[srcreg];
6045: { WORD offs = nextiword();
6046: if (!cctrue(11)) {
6047: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
6048: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
6049: }
6050: }}}}
6051: void op_5bd0(UWORD opcode)
6052: {
6053: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6054: {{ CPTR srca = regs.a[srcreg];
6055: { int val = cctrue(11) ? 0xff : 0;
6056: put_byte(srca,val);
6057: }}}}
6058: void op_5bd8(UWORD opcode)
6059: {
6060: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6061: {{ CPTR srca = regs.a[srcreg];
6062: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
6063: { int val = cctrue(11) ? 0xff : 0;
6064: put_byte(srca,val);
6065: }}}}}
6066: void op_5be0(UWORD opcode)
6067: {
6068: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6069: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
6070: { CPTR srca = regs.a[srcreg];
6071: { int val = cctrue(11) ? 0xff : 0;
6072: put_byte(srca,val);
6073: }}}}}
6074: void op_5be8(UWORD opcode)
6075: {
6076: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6077: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
6078: { int val = cctrue(11) ? 0xff : 0;
6079: put_byte(srca,val);
6080: }}}}
6081: void op_5bf0(UWORD opcode)
6082: {
6083: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6084: {{ CPTR srca = regs.a[srcreg];
6085: UWORD srcdp = nextiword();
6086: srca += (LONG)(BYTE)(srcdp & 0xFF);
6087: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
6088: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
6089: srca += srcdpr;
6090: { int val = cctrue(11) ? 0xff : 0;
6091: put_byte(srca,val);
6092: }}}}}
6093: void op_5bf8(UWORD opcode)
6094: {
6095: {{ CPTR srca = (LONG)(WORD)nextiword();
6096: { int val = cctrue(11) ? 0xff : 0;
6097: put_byte(srca,val);
6098: }}}}
6099: void op_5bf9(UWORD opcode)
6100: {
6101: {{ CPTR srca = nextilong();
6102: { int val = cctrue(11) ? 0xff : 0;
6103: put_byte(srca,val);
6104: }}}}
6105: void op_5c00(UWORD opcode)
6106: {
6107: ULONG srcreg = 6;
6108: ULONG dstreg = (opcode & 7) >> 0;
6109: {{ ULONG src = srcreg;
6110: { BYTE dst = regs.d[dstreg];
6111: { ULONG newv = dst + src;
6112: { bool flgs = ((BYTE)(src)) < 0;
6113: bool flgo = ((BYTE)(dst)) < 0;
6114: bool flgn = ((BYTE)(newv)) < 0;
6115: regs.z = ((BYTE)(newv)) == 0;
6116: regs.v = (flgs == flgo) && (flgn != flgo);
6117: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
6118: regs.n = flgn != 0;
6119: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
6120: }}}}}}
6121: void op_5c10(UWORD opcode)
6122: {
6123: ULONG srcreg = 6;
6124: ULONG dstreg = (opcode & 7) >> 0;
6125: {{ ULONG src = srcreg;
6126: { CPTR dsta = regs.a[dstreg];
6127: BYTE dst = get_byte(dsta);
6128: { ULONG newv = dst + src;
6129: { bool flgs = ((BYTE)(src)) < 0;
6130: bool flgo = ((BYTE)(dst)) < 0;
6131: bool flgn = ((BYTE)(newv)) < 0;
6132: regs.z = ((BYTE)(newv)) == 0;
6133: regs.v = (flgs == flgo) && (flgn != flgo);
6134: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
6135: regs.n = flgn != 0;
6136: put_byte(dsta,newv);
6137: }}}}}}
6138: void op_5c18(UWORD opcode)
6139: {
6140: ULONG srcreg = 6;
6141: ULONG dstreg = (opcode & 7) >> 0;
6142: {{ ULONG src = srcreg;
6143: { CPTR dsta = regs.a[dstreg];
6144: BYTE dst = get_byte(dsta);
6145: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
6146: { ULONG newv = dst + src;
6147: { bool flgs = ((BYTE)(src)) < 0;
6148: bool flgo = ((BYTE)(dst)) < 0;
6149: bool flgn = ((BYTE)(newv)) < 0;
6150: regs.z = ((BYTE)(newv)) == 0;
6151: regs.v = (flgs == flgo) && (flgn != flgo);
6152: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
6153: regs.n = flgn != 0;
6154: put_byte(dsta,newv);
6155: }}}}}}}
6156: void op_5c20(UWORD opcode)
6157: {
6158: ULONG srcreg = 6;
6159: ULONG dstreg = (opcode & 7) >> 0;
6160: {{ ULONG src = srcreg;
6161: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
6162: { CPTR dsta = regs.a[dstreg];
6163: BYTE dst = get_byte(dsta);
6164: { ULONG newv = dst + src;
6165: { bool flgs = ((BYTE)(src)) < 0;
6166: bool flgo = ((BYTE)(dst)) < 0;
6167: bool flgn = ((BYTE)(newv)) < 0;
6168: regs.z = ((BYTE)(newv)) == 0;
6169: regs.v = (flgs == flgo) && (flgn != flgo);
6170: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
6171: regs.n = flgn != 0;
6172: put_byte(dsta,newv);
6173: }}}}}}}
6174: void op_5c28(UWORD opcode)
6175: {
6176: ULONG srcreg = 6;
6177: ULONG dstreg = (opcode & 7) >> 0;
6178: {{ ULONG src = srcreg;
6179: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
6180: BYTE dst = get_byte(dsta);
6181: { ULONG newv = dst + src;
6182: { bool flgs = ((BYTE)(src)) < 0;
6183: bool flgo = ((BYTE)(dst)) < 0;
6184: bool flgn = ((BYTE)(newv)) < 0;
6185: regs.z = ((BYTE)(newv)) == 0;
6186: regs.v = (flgs == flgo) && (flgn != flgo);
6187: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
6188: regs.n = flgn != 0;
6189: put_byte(dsta,newv);
6190: }}}}}}
6191: void op_5c30(UWORD opcode)
6192: {
6193: ULONG srcreg = 6;
6194: ULONG dstreg = (opcode & 7) >> 0;
6195: {{ ULONG src = srcreg;
6196: { CPTR dsta = regs.a[dstreg];
6197: UWORD dstdp = nextiword();
6198: dsta += (LONG)(BYTE)(dstdp & 0xFF);
6199: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
6200: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
6201: dsta += dstdpr;
6202: { BYTE dst = get_byte(dsta);
6203: { ULONG newv = dst + src;
6204: { bool flgs = ((BYTE)(src)) < 0;
6205: bool flgo = ((BYTE)(dst)) < 0;
6206: bool flgn = ((BYTE)(newv)) < 0;
6207: regs.z = ((BYTE)(newv)) == 0;
6208: regs.v = (flgs == flgo) && (flgn != flgo);
6209: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
6210: regs.n = flgn != 0;
6211: put_byte(dsta,newv);
6212: }}}}}}}}
6213: void op_5c38(UWORD opcode)
6214: {
6215: ULONG srcreg = 6;
6216: {{ ULONG src = srcreg;
6217: { CPTR dsta = (LONG)(WORD)nextiword();
6218: BYTE dst = get_byte(dsta);
6219: { ULONG newv = dst + src;
6220: { bool flgs = ((BYTE)(src)) < 0;
6221: bool flgo = ((BYTE)(dst)) < 0;
6222: bool flgn = ((BYTE)(newv)) < 0;
6223: regs.z = ((BYTE)(newv)) == 0;
6224: regs.v = (flgs == flgo) && (flgn != flgo);
6225: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
6226: regs.n = flgn != 0;
6227: put_byte(dsta,newv);
6228: }}}}}}
6229: void op_5c39(UWORD opcode)
6230: {
6231: ULONG srcreg = 6;
6232: {{ ULONG src = srcreg;
6233: { CPTR dsta = nextilong();
6234: BYTE dst = get_byte(dsta);
6235: { ULONG newv = dst + src;
6236: { bool flgs = ((BYTE)(src)) < 0;
6237: bool flgo = ((BYTE)(dst)) < 0;
6238: bool flgn = ((BYTE)(newv)) < 0;
6239: regs.z = ((BYTE)(newv)) == 0;
6240: regs.v = (flgs == flgo) && (flgn != flgo);
6241: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
6242: regs.n = flgn != 0;
6243: put_byte(dsta,newv);
6244: }}}}}}
6245: void op_5c40(UWORD opcode)
6246: {
6247: ULONG srcreg = 6;
6248: ULONG dstreg = (opcode & 7) >> 0;
6249: {{ ULONG src = srcreg;
6250: { WORD dst = regs.d[dstreg];
6251: { ULONG newv = dst + src;
6252: { bool flgs = ((WORD)(src)) < 0;
6253: bool flgo = ((WORD)(dst)) < 0;
6254: bool flgn = ((WORD)(newv)) < 0;
6255: regs.z = ((WORD)(newv)) == 0;
6256: regs.v = (flgs == flgo) && (flgn != flgo);
6257: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
6258: regs.n = flgn != 0;
6259: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
6260: }}}}}}
6261: void op_5c48(UWORD opcode)
6262: {
6263: ULONG srcreg = 6;
6264: ULONG dstreg = (opcode & 7) >> 0;
6265: {{ ULONG src = srcreg;
6266: { LONG dst = regs.a[dstreg];
6267: { ULONG newv = dst + src;
6268: regs.a[dstreg] = (newv);
6269: }}}}}
6270: void op_5c50(UWORD opcode)
6271: {
6272: ULONG srcreg = 6;
6273: ULONG dstreg = (opcode & 7) >> 0;
6274: {{ ULONG src = srcreg;
6275: { CPTR dsta = regs.a[dstreg];
6276: WORD dst = get_word(dsta);
6277: { ULONG newv = dst + src;
6278: { bool flgs = ((WORD)(src)) < 0;
6279: bool flgo = ((WORD)(dst)) < 0;
6280: bool flgn = ((WORD)(newv)) < 0;
6281: regs.z = ((WORD)(newv)) == 0;
6282: regs.v = (flgs == flgo) && (flgn != flgo);
6283: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
6284: regs.n = flgn != 0;
6285: put_word(dsta,newv);
6286: }}}}}}
6287: void op_5c58(UWORD opcode)
6288: {
6289: ULONG srcreg = 6;
6290: ULONG dstreg = (opcode & 7) >> 0;
6291: {{ ULONG src = srcreg;
6292: { CPTR dsta = regs.a[dstreg];
6293: WORD dst = get_word(dsta);
6294: { regs.a[dstreg] += 2;
6295: { ULONG newv = dst + src;
6296: { bool flgs = ((WORD)(src)) < 0;
6297: bool flgo = ((WORD)(dst)) < 0;
6298: bool flgn = ((WORD)(newv)) < 0;
6299: regs.z = ((WORD)(newv)) == 0;
6300: regs.v = (flgs == flgo) && (flgn != flgo);
6301: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
6302: regs.n = flgn != 0;
6303: put_word(dsta,newv);
6304: }}}}}}}
6305: void op_5c60(UWORD opcode)
6306: {
6307: ULONG srcreg = 6;
6308: ULONG dstreg = (opcode & 7) >> 0;
6309: {{ ULONG src = srcreg;
6310: { regs.a[dstreg] -= 2;
6311: { CPTR dsta = regs.a[dstreg];
6312: WORD dst = get_word(dsta);
6313: { ULONG newv = dst + src;
6314: { bool flgs = ((WORD)(src)) < 0;
6315: bool flgo = ((WORD)(dst)) < 0;
6316: bool flgn = ((WORD)(newv)) < 0;
6317: regs.z = ((WORD)(newv)) == 0;
6318: regs.v = (flgs == flgo) && (flgn != flgo);
6319: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
6320: regs.n = flgn != 0;
6321: put_word(dsta,newv);
6322: }}}}}}}
6323: void op_5c68(UWORD opcode)
6324: {
6325: ULONG srcreg = 6;
6326: ULONG dstreg = (opcode & 7) >> 0;
6327: {{ ULONG src = srcreg;
6328: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
6329: WORD dst = get_word(dsta);
6330: { ULONG newv = dst + src;
6331: { bool flgs = ((WORD)(src)) < 0;
6332: bool flgo = ((WORD)(dst)) < 0;
6333: bool flgn = ((WORD)(newv)) < 0;
6334: regs.z = ((WORD)(newv)) == 0;
6335: regs.v = (flgs == flgo) && (flgn != flgo);
6336: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
6337: regs.n = flgn != 0;
6338: put_word(dsta,newv);
6339: }}}}}}
6340: void op_5c70(UWORD opcode)
6341: {
6342: ULONG srcreg = 6;
6343: ULONG dstreg = (opcode & 7) >> 0;
6344: {{ ULONG src = srcreg;
6345: { CPTR dsta = regs.a[dstreg];
6346: UWORD dstdp = nextiword();
6347: dsta += (LONG)(BYTE)(dstdp & 0xFF);
6348: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
6349: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
6350: dsta += dstdpr;
6351: { WORD dst = get_word(dsta);
6352: { ULONG newv = dst + src;
6353: { bool flgs = ((WORD)(src)) < 0;
6354: bool flgo = ((WORD)(dst)) < 0;
6355: bool flgn = ((WORD)(newv)) < 0;
6356: regs.z = ((WORD)(newv)) == 0;
6357: regs.v = (flgs == flgo) && (flgn != flgo);
6358: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
6359: regs.n = flgn != 0;
6360: put_word(dsta,newv);
6361: }}}}}}}}
6362: void op_5c78(UWORD opcode)
6363: {
6364: ULONG srcreg = 6;
6365: {{ ULONG src = srcreg;
6366: { CPTR dsta = (LONG)(WORD)nextiword();
6367: WORD dst = get_word(dsta);
6368: { ULONG newv = dst + src;
6369: { bool flgs = ((WORD)(src)) < 0;
6370: bool flgo = ((WORD)(dst)) < 0;
6371: bool flgn = ((WORD)(newv)) < 0;
6372: regs.z = ((WORD)(newv)) == 0;
6373: regs.v = (flgs == flgo) && (flgn != flgo);
6374: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
6375: regs.n = flgn != 0;
6376: put_word(dsta,newv);
6377: }}}}}}
6378: void op_5c79(UWORD opcode)
6379: {
6380: ULONG srcreg = 6;
6381: {{ ULONG src = srcreg;
6382: { CPTR dsta = nextilong();
6383: WORD dst = get_word(dsta);
6384: { ULONG newv = dst + src;
6385: { bool flgs = ((WORD)(src)) < 0;
6386: bool flgo = ((WORD)(dst)) < 0;
6387: bool flgn = ((WORD)(newv)) < 0;
6388: regs.z = ((WORD)(newv)) == 0;
6389: regs.v = (flgs == flgo) && (flgn != flgo);
6390: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
6391: regs.n = flgn != 0;
6392: put_word(dsta,newv);
6393: }}}}}}
6394: void op_5c80(UWORD opcode)
6395: {
6396: ULONG srcreg = 6;
6397: ULONG dstreg = (opcode & 7) >> 0;
6398: {{ ULONG src = srcreg;
6399: { LONG dst = regs.d[dstreg];
6400: { ULONG newv = dst + src;
6401: { bool flgs = ((LONG)(src)) < 0;
6402: bool flgo = ((LONG)(dst)) < 0;
6403: bool flgn = ((LONG)(newv)) < 0;
6404: regs.z = ((LONG)(newv)) == 0;
6405: regs.v = (flgs == flgo) && (flgn != flgo);
6406: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
6407: regs.n = flgn != 0;
6408: regs.d[dstreg] = (newv);
6409: }}}}}}
6410: void op_5c88(UWORD opcode)
6411: {
6412: ULONG srcreg = 6;
6413: ULONG dstreg = (opcode & 7) >> 0;
6414: {{ ULONG src = srcreg;
6415: { LONG dst = regs.a[dstreg];
6416: { ULONG newv = dst + src;
6417: regs.a[dstreg] = (newv);
6418: }}}}}
6419: void op_5c90(UWORD opcode)
6420: {
6421: ULONG srcreg = 6;
6422: ULONG dstreg = (opcode & 7) >> 0;
6423: {{ ULONG src = srcreg;
6424: { CPTR dsta = regs.a[dstreg];
6425: LONG dst = get_long(dsta);
6426: { ULONG newv = dst + src;
6427: { bool flgs = ((LONG)(src)) < 0;
6428: bool flgo = ((LONG)(dst)) < 0;
6429: bool flgn = ((LONG)(newv)) < 0;
6430: regs.z = ((LONG)(newv)) == 0;
6431: regs.v = (flgs == flgo) && (flgn != flgo);
6432: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
6433: regs.n = flgn != 0;
6434: put_long(dsta,newv);
6435: }}}}}}
6436: void op_5c98(UWORD opcode)
6437: {
6438: ULONG srcreg = 6;
6439: ULONG dstreg = (opcode & 7) >> 0;
6440: {{ ULONG src = srcreg;
6441: { CPTR dsta = regs.a[dstreg];
6442: LONG dst = get_long(dsta);
6443: { regs.a[dstreg] += 4;
6444: { ULONG newv = dst + src;
6445: { bool flgs = ((LONG)(src)) < 0;
6446: bool flgo = ((LONG)(dst)) < 0;
6447: bool flgn = ((LONG)(newv)) < 0;
6448: regs.z = ((LONG)(newv)) == 0;
6449: regs.v = (flgs == flgo) && (flgn != flgo);
6450: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
6451: regs.n = flgn != 0;
6452: put_long(dsta,newv);
6453: }}}}}}}
6454: void op_5ca0(UWORD opcode)
6455: {
6456: ULONG srcreg = 6;
6457: ULONG dstreg = (opcode & 7) >> 0;
6458: {{ ULONG src = srcreg;
6459: { regs.a[dstreg] -= 4;
6460: { CPTR dsta = regs.a[dstreg];
6461: LONG dst = get_long(dsta);
6462: { ULONG newv = dst + src;
6463: { bool flgs = ((LONG)(src)) < 0;
6464: bool flgo = ((LONG)(dst)) < 0;
6465: bool flgn = ((LONG)(newv)) < 0;
6466: regs.z = ((LONG)(newv)) == 0;
6467: regs.v = (flgs == flgo) && (flgn != flgo);
6468: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
6469: regs.n = flgn != 0;
6470: put_long(dsta,newv);
6471: }}}}}}}
6472: void op_5ca8(UWORD opcode)
6473: {
6474: ULONG srcreg = 6;
6475: ULONG dstreg = (opcode & 7) >> 0;
6476: {{ ULONG src = srcreg;
6477: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
6478: LONG dst = get_long(dsta);
6479: { ULONG newv = dst + src;
6480: { bool flgs = ((LONG)(src)) < 0;
6481: bool flgo = ((LONG)(dst)) < 0;
6482: bool flgn = ((LONG)(newv)) < 0;
6483: regs.z = ((LONG)(newv)) == 0;
6484: regs.v = (flgs == flgo) && (flgn != flgo);
6485: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
6486: regs.n = flgn != 0;
6487: put_long(dsta,newv);
6488: }}}}}}
6489: void op_5cb0(UWORD opcode)
6490: {
6491: ULONG srcreg = 6;
6492: ULONG dstreg = (opcode & 7) >> 0;
6493: {{ ULONG src = srcreg;
6494: { CPTR dsta = regs.a[dstreg];
6495: UWORD dstdp = nextiword();
6496: dsta += (LONG)(BYTE)(dstdp & 0xFF);
6497: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
6498: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
6499: dsta += dstdpr;
6500: { LONG dst = get_long(dsta);
6501: { ULONG newv = dst + src;
6502: { bool flgs = ((LONG)(src)) < 0;
6503: bool flgo = ((LONG)(dst)) < 0;
6504: bool flgn = ((LONG)(newv)) < 0;
6505: regs.z = ((LONG)(newv)) == 0;
6506: regs.v = (flgs == flgo) && (flgn != flgo);
6507: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
6508: regs.n = flgn != 0;
6509: put_long(dsta,newv);
6510: }}}}}}}}
6511: void op_5cb8(UWORD opcode)
6512: {
6513: ULONG srcreg = 6;
6514: {{ ULONG src = srcreg;
6515: { CPTR dsta = (LONG)(WORD)nextiword();
6516: LONG dst = get_long(dsta);
6517: { ULONG newv = dst + src;
6518: { bool flgs = ((LONG)(src)) < 0;
6519: bool flgo = ((LONG)(dst)) < 0;
6520: bool flgn = ((LONG)(newv)) < 0;
6521: regs.z = ((LONG)(newv)) == 0;
6522: regs.v = (flgs == flgo) && (flgn != flgo);
6523: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
6524: regs.n = flgn != 0;
6525: put_long(dsta,newv);
6526: }}}}}}
6527: void op_5cb9(UWORD opcode)
6528: {
6529: ULONG srcreg = 6;
6530: {{ ULONG src = srcreg;
6531: { CPTR dsta = nextilong();
6532: LONG dst = get_long(dsta);
6533: { ULONG newv = dst + src;
6534: { bool flgs = ((LONG)(src)) < 0;
6535: bool flgo = ((LONG)(dst)) < 0;
6536: bool flgn = ((LONG)(newv)) < 0;
6537: regs.z = ((LONG)(newv)) == 0;
6538: regs.v = (flgs == flgo) && (flgn != flgo);
6539: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
6540: regs.n = flgn != 0;
6541: put_long(dsta,newv);
6542: }}}}}}
6543: void op_5cc0(UWORD opcode)
6544: {
6545: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6546: {{{ int val = cctrue(12) ? 0xff : 0;
6547: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
6548: }}}}
6549: void op_5cc8(UWORD opcode)
6550: {
6551: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6552: {{ WORD src = regs.d[srcreg];
6553: { WORD offs = nextiword();
6554: if (!cctrue(12)) {
6555: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
6556: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
6557: }
6558: }}}}
6559: void op_5cd0(UWORD opcode)
6560: {
6561: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6562: {{ CPTR srca = regs.a[srcreg];
6563: { int val = cctrue(12) ? 0xff : 0;
6564: put_byte(srca,val);
6565: }}}}
6566: void op_5cd8(UWORD opcode)
6567: {
6568: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6569: {{ CPTR srca = regs.a[srcreg];
6570: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
6571: { int val = cctrue(12) ? 0xff : 0;
6572: put_byte(srca,val);
6573: }}}}}
6574: void op_5ce0(UWORD opcode)
6575: {
6576: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6577: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
6578: { CPTR srca = regs.a[srcreg];
6579: { int val = cctrue(12) ? 0xff : 0;
6580: put_byte(srca,val);
6581: }}}}}
6582: void op_5ce8(UWORD opcode)
6583: {
6584: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6585: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
6586: { int val = cctrue(12) ? 0xff : 0;
6587: put_byte(srca,val);
6588: }}}}
6589: void op_5cf0(UWORD opcode)
6590: {
6591: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
6592: {{ CPTR srca = regs.a[srcreg];
6593: UWORD srcdp = nextiword();
6594: srca += (LONG)(BYTE)(srcdp & 0xFF);
6595: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
6596: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
6597: srca += srcdpr;
6598: { int val = cctrue(12) ? 0xff : 0;
6599: put_byte(srca,val);
6600: }}}}}
6601: void op_5cf8(UWORD opcode)
6602: {
6603: {{ CPTR srca = (LONG)(WORD)nextiword();
6604: { int val = cctrue(12) ? 0xff : 0;
6605: put_byte(srca,val);
6606: }}}}
6607: void op_5cf9(UWORD opcode)
6608: {
6609: {{ CPTR srca = nextilong();
6610: { int val = cctrue(12) ? 0xff : 0;
6611: put_byte(srca,val);
6612: }}}}
6613: void op_5d00(UWORD opcode)
6614: {
6615: ULONG srcreg = 6;
6616: ULONG dstreg = (opcode & 7) >> 0;
6617: {{ ULONG src = srcreg;
6618: { BYTE dst = regs.d[dstreg];
6619: { ULONG newv = dst - src;
6620: { bool flgs = ((BYTE)(src)) < 0;
6621: bool flgo = ((BYTE)(dst)) < 0;
6622: bool flgn = ((BYTE)(newv)) < 0;
6623: regs.z = ((BYTE)(newv)) == 0;
6624: regs.v = (flgs != flgo) && (flgn != flgo);
6625: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
6626: regs.n = flgn != 0;
6627: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
6628: }}}}}}
6629: void op_5d10(UWORD opcode)
6630: {
6631: ULONG srcreg = 6;
6632: ULONG dstreg = (opcode & 7) >> 0;
6633: {{ ULONG src = srcreg;
6634: { CPTR dsta = regs.a[dstreg];
6635: BYTE dst = get_byte(dsta);
6636: { ULONG newv = dst - src;
6637: { bool flgs = ((BYTE)(src)) < 0;
6638: bool flgo = ((BYTE)(dst)) < 0;
6639: bool flgn = ((BYTE)(newv)) < 0;
6640: regs.z = ((BYTE)(newv)) == 0;
6641: regs.v = (flgs != flgo) && (flgn != flgo);
6642: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
6643: regs.n = flgn != 0;
6644: put_byte(dsta,newv);
6645: }}}}}}
6646: void op_5d18(UWORD opcode)
6647: {
6648: ULONG srcreg = 6;
6649: ULONG dstreg = (opcode & 7) >> 0;
6650: {{ ULONG src = srcreg;
6651: { CPTR dsta = regs.a[dstreg];
6652: BYTE dst = get_byte(dsta);
6653: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
6654: { ULONG newv = dst - src;
6655: { bool flgs = ((BYTE)(src)) < 0;
6656: bool flgo = ((BYTE)(dst)) < 0;
6657: bool flgn = ((BYTE)(newv)) < 0;
6658: regs.z = ((BYTE)(newv)) == 0;
6659: regs.v = (flgs != flgo) && (flgn != flgo);
6660: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
6661: regs.n = flgn != 0;
6662: put_byte(dsta,newv);
6663: }}}}}}}
6664: void op_5d20(UWORD opcode)
6665: {
6666: ULONG srcreg = 6;
6667: ULONG dstreg = (opcode & 7) >> 0;
6668: {{ ULONG src = srcreg;
6669: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
6670: { CPTR dsta = regs.a[dstreg];
6671: BYTE dst = get_byte(dsta);
6672: { ULONG newv = dst - src;
6673: { bool flgs = ((BYTE)(src)) < 0;
6674: bool flgo = ((BYTE)(dst)) < 0;
6675: bool flgn = ((BYTE)(newv)) < 0;
6676: regs.z = ((BYTE)(newv)) == 0;
6677: regs.v = (flgs != flgo) && (flgn != flgo);
6678: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
6679: regs.n = flgn != 0;
6680: put_byte(dsta,newv);
6681: }}}}}}}
6682: void op_5d28(UWORD opcode)
6683: {
6684: ULONG srcreg = 6;
6685: ULONG dstreg = (opcode & 7) >> 0;
6686: {{ ULONG src = srcreg;
6687: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
6688: BYTE dst = get_byte(dsta);
6689: { ULONG newv = dst - src;
6690: { bool flgs = ((BYTE)(src)) < 0;
6691: bool flgo = ((BYTE)(dst)) < 0;
6692: bool flgn = ((BYTE)(newv)) < 0;
6693: regs.z = ((BYTE)(newv)) == 0;
6694: regs.v = (flgs != flgo) && (flgn != flgo);
6695: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
6696: regs.n = flgn != 0;
6697: put_byte(dsta,newv);
6698: }}}}}}
6699: void op_5d30(UWORD opcode)
6700: {
6701: ULONG srcreg = 6;
6702: ULONG dstreg = (opcode & 7) >> 0;
6703: {{ ULONG src = srcreg;
6704: { CPTR dsta = regs.a[dstreg];
6705: UWORD dstdp = nextiword();
6706: dsta += (LONG)(BYTE)(dstdp & 0xFF);
6707: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
6708: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
6709: dsta += dstdpr;
6710: { BYTE dst = get_byte(dsta);
6711: { ULONG newv = dst - src;
6712: { bool flgs = ((BYTE)(src)) < 0;
6713: bool flgo = ((BYTE)(dst)) < 0;
6714: bool flgn = ((BYTE)(newv)) < 0;
6715: regs.z = ((BYTE)(newv)) == 0;
6716: regs.v = (flgs != flgo) && (flgn != flgo);
6717: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
6718: regs.n = flgn != 0;
6719: put_byte(dsta,newv);
6720: }}}}}}}}
6721: void op_5d38(UWORD opcode)
6722: {
6723: ULONG srcreg = 6;
6724: {{ ULONG src = srcreg;
6725: { CPTR dsta = (LONG)(WORD)nextiword();
6726: BYTE dst = get_byte(dsta);
6727: { ULONG newv = dst - src;
6728: { bool flgs = ((BYTE)(src)) < 0;
6729: bool flgo = ((BYTE)(dst)) < 0;
6730: bool flgn = ((BYTE)(newv)) < 0;
6731: regs.z = ((BYTE)(newv)) == 0;
6732: regs.v = (flgs != flgo) && (flgn != flgo);
6733: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
6734: regs.n = flgn != 0;
6735: put_byte(dsta,newv);
6736: }}}}}}
6737: void op_5d39(UWORD opcode)
6738: {
6739: ULONG srcreg = 6;
6740: {{ ULONG src = srcreg;
6741: { CPTR dsta = nextilong();
6742: BYTE dst = get_byte(dsta);
6743: { ULONG newv = dst - src;
6744: { bool flgs = ((BYTE)(src)) < 0;
6745: bool flgo = ((BYTE)(dst)) < 0;
6746: bool flgn = ((BYTE)(newv)) < 0;
6747: regs.z = ((BYTE)(newv)) == 0;
6748: regs.v = (flgs != flgo) && (flgn != flgo);
6749: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
6750: regs.n = flgn != 0;
6751: put_byte(dsta,newv);
6752: }}}}}}
6753: void op_5d40(UWORD opcode)
6754: {
6755: ULONG srcreg = 6;
6756: ULONG dstreg = (opcode & 7) >> 0;
6757: {{ ULONG src = srcreg;
6758: { WORD dst = regs.d[dstreg];
6759: { ULONG newv = dst - src;
6760: { bool flgs = ((WORD)(src)) < 0;
6761: bool flgo = ((WORD)(dst)) < 0;
6762: bool flgn = ((WORD)(newv)) < 0;
6763: regs.z = ((WORD)(newv)) == 0;
6764: regs.v = (flgs != flgo) && (flgn != flgo);
6765: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
6766: regs.n = flgn != 0;
6767: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
6768: }}}}}}
6769: void op_5d48(UWORD opcode)
6770: {
6771: ULONG srcreg = 6;
6772: ULONG dstreg = (opcode & 7) >> 0;
6773: {{ ULONG src = srcreg;
6774: { LONG dst = regs.a[dstreg];
6775: { ULONG newv = dst - src;
6776: regs.a[dstreg] = (newv);
6777: }}}}}
6778: void op_5d50(UWORD opcode)
6779: {
6780: ULONG srcreg = 6;
6781: ULONG dstreg = (opcode & 7) >> 0;
6782: {{ ULONG src = srcreg;
6783: { CPTR dsta = regs.a[dstreg];
6784: WORD dst = get_word(dsta);
6785: { ULONG newv = dst - src;
6786: { bool flgs = ((WORD)(src)) < 0;
6787: bool flgo = ((WORD)(dst)) < 0;
6788: bool flgn = ((WORD)(newv)) < 0;
6789: regs.z = ((WORD)(newv)) == 0;
6790: regs.v = (flgs != flgo) && (flgn != flgo);
6791: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
6792: regs.n = flgn != 0;
6793: put_word(dsta,newv);
6794: }}}}}}
6795: void op_5d58(UWORD opcode)
6796: {
6797: ULONG srcreg = 6;
6798: ULONG dstreg = (opcode & 7) >> 0;
6799: {{ ULONG src = srcreg;
6800: { CPTR dsta = regs.a[dstreg];
6801: WORD dst = get_word(dsta);
6802: { regs.a[dstreg] += 2;
6803: { ULONG newv = dst - src;
6804: { bool flgs = ((WORD)(src)) < 0;
6805: bool flgo = ((WORD)(dst)) < 0;
6806: bool flgn = ((WORD)(newv)) < 0;
6807: regs.z = ((WORD)(newv)) == 0;
6808: regs.v = (flgs != flgo) && (flgn != flgo);
6809: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
6810: regs.n = flgn != 0;
6811: put_word(dsta,newv);
6812: }}}}}}}
6813: void op_5d60(UWORD opcode)
6814: {
6815: ULONG srcreg = 6;
6816: ULONG dstreg = (opcode & 7) >> 0;
6817: {{ ULONG src = srcreg;
6818: { regs.a[dstreg] -= 2;
6819: { CPTR dsta = regs.a[dstreg];
6820: WORD dst = get_word(dsta);
6821: { ULONG newv = dst - src;
6822: { bool flgs = ((WORD)(src)) < 0;
6823: bool flgo = ((WORD)(dst)) < 0;
6824: bool flgn = ((WORD)(newv)) < 0;
6825: regs.z = ((WORD)(newv)) == 0;
6826: regs.v = (flgs != flgo) && (flgn != flgo);
6827: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
6828: regs.n = flgn != 0;
6829: put_word(dsta,newv);
6830: }}}}}}}
6831: void op_5d68(UWORD opcode)
6832: {
6833: ULONG srcreg = 6;
6834: ULONG dstreg = (opcode & 7) >> 0;
6835: {{ ULONG src = srcreg;
6836: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
6837: WORD dst = get_word(dsta);
6838: { ULONG newv = dst - src;
6839: { bool flgs = ((WORD)(src)) < 0;
6840: bool flgo = ((WORD)(dst)) < 0;
6841: bool flgn = ((WORD)(newv)) < 0;
6842: regs.z = ((WORD)(newv)) == 0;
6843: regs.v = (flgs != flgo) && (flgn != flgo);
6844: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
6845: regs.n = flgn != 0;
6846: put_word(dsta,newv);
6847: }}}}}}
6848: void op_5d70(UWORD opcode)
6849: {
6850: ULONG srcreg = 6;
6851: ULONG dstreg = (opcode & 7) >> 0;
6852: {{ ULONG src = srcreg;
6853: { CPTR dsta = regs.a[dstreg];
6854: UWORD dstdp = nextiword();
6855: dsta += (LONG)(BYTE)(dstdp & 0xFF);
6856: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
6857: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
6858: dsta += dstdpr;
6859: { WORD dst = get_word(dsta);
6860: { ULONG newv = dst - src;
6861: { bool flgs = ((WORD)(src)) < 0;
6862: bool flgo = ((WORD)(dst)) < 0;
6863: bool flgn = ((WORD)(newv)) < 0;
6864: regs.z = ((WORD)(newv)) == 0;
6865: regs.v = (flgs != flgo) && (flgn != flgo);
6866: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
6867: regs.n = flgn != 0;
6868: put_word(dsta,newv);
6869: }}}}}}}}
6870: void op_5d78(UWORD opcode)
6871: {
6872: ULONG srcreg = 6;
6873: {{ ULONG src = srcreg;
6874: { CPTR dsta = (LONG)(WORD)nextiword();
6875: WORD dst = get_word(dsta);
6876: { ULONG newv = dst - src;
6877: { bool flgs = ((WORD)(src)) < 0;
6878: bool flgo = ((WORD)(dst)) < 0;
6879: bool flgn = ((WORD)(newv)) < 0;
6880: regs.z = ((WORD)(newv)) == 0;
6881: regs.v = (flgs != flgo) && (flgn != flgo);
6882: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
6883: regs.n = flgn != 0;
6884: put_word(dsta,newv);
6885: }}}}}}
6886: void op_5d79(UWORD opcode)
6887: {
6888: ULONG srcreg = 6;
6889: {{ ULONG src = srcreg;
6890: { CPTR dsta = nextilong();
6891: WORD dst = get_word(dsta);
6892: { ULONG newv = dst - src;
6893: { bool flgs = ((WORD)(src)) < 0;
6894: bool flgo = ((WORD)(dst)) < 0;
6895: bool flgn = ((WORD)(newv)) < 0;
6896: regs.z = ((WORD)(newv)) == 0;
6897: regs.v = (flgs != flgo) && (flgn != flgo);
6898: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
6899: regs.n = flgn != 0;
6900: put_word(dsta,newv);
6901: }}}}}}
6902: void op_5d80(UWORD opcode)
6903: {
6904: ULONG srcreg = 6;
6905: ULONG dstreg = (opcode & 7) >> 0;
6906: {{ ULONG src = srcreg;
6907: { LONG dst = regs.d[dstreg];
6908: { ULONG newv = dst - src;
6909: { bool flgs = ((LONG)(src)) < 0;
6910: bool flgo = ((LONG)(dst)) < 0;
6911: bool flgn = ((LONG)(newv)) < 0;
6912: regs.z = ((LONG)(newv)) == 0;
6913: regs.v = (flgs != flgo) && (flgn != flgo);
6914: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
6915: regs.n = flgn != 0;
6916: regs.d[dstreg] = (newv);
6917: }}}}}}
6918: void op_5d88(UWORD opcode)
6919: {
6920: ULONG srcreg = 6;
6921: ULONG dstreg = (opcode & 7) >> 0;
6922: {{ ULONG src = srcreg;
6923: { LONG dst = regs.a[dstreg];
6924: { ULONG newv = dst - src;
6925: regs.a[dstreg] = (newv);
6926: }}}}}
6927: void op_5d90(UWORD opcode)
6928: {
6929: ULONG srcreg = 6;
6930: ULONG dstreg = (opcode & 7) >> 0;
6931: {{ ULONG src = srcreg;
6932: { CPTR dsta = regs.a[dstreg];
6933: LONG dst = get_long(dsta);
6934: { ULONG newv = dst - src;
6935: { bool flgs = ((LONG)(src)) < 0;
6936: bool flgo = ((LONG)(dst)) < 0;
6937: bool flgn = ((LONG)(newv)) < 0;
6938: regs.z = ((LONG)(newv)) == 0;
6939: regs.v = (flgs != flgo) && (flgn != flgo);
6940: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
6941: regs.n = flgn != 0;
6942: put_long(dsta,newv);
6943: }}}}}}
6944: void op_5d98(UWORD opcode)
6945: {
6946: ULONG srcreg = 6;
6947: ULONG dstreg = (opcode & 7) >> 0;
6948: {{ ULONG src = srcreg;
6949: { CPTR dsta = regs.a[dstreg];
6950: LONG dst = get_long(dsta);
6951: { regs.a[dstreg] += 4;
6952: { ULONG newv = dst - src;
6953: { bool flgs = ((LONG)(src)) < 0;
6954: bool flgo = ((LONG)(dst)) < 0;
6955: bool flgn = ((LONG)(newv)) < 0;
6956: regs.z = ((LONG)(newv)) == 0;
6957: regs.v = (flgs != flgo) && (flgn != flgo);
6958: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
6959: regs.n = flgn != 0;
6960: put_long(dsta,newv);
6961: }}}}}}}
6962: void op_5da0(UWORD opcode)
6963: {
6964: ULONG srcreg = 6;
6965: ULONG dstreg = (opcode & 7) >> 0;
6966: {{ ULONG src = srcreg;
6967: { regs.a[dstreg] -= 4;
6968: { CPTR dsta = regs.a[dstreg];
6969: LONG dst = get_long(dsta);
6970: { ULONG newv = dst - src;
6971: { bool flgs = ((LONG)(src)) < 0;
6972: bool flgo = ((LONG)(dst)) < 0;
6973: bool flgn = ((LONG)(newv)) < 0;
6974: regs.z = ((LONG)(newv)) == 0;
6975: regs.v = (flgs != flgo) && (flgn != flgo);
6976: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
6977: regs.n = flgn != 0;
6978: put_long(dsta,newv);
6979: }}}}}}}
6980: void op_5da8(UWORD opcode)
6981: {
6982: ULONG srcreg = 6;
6983: ULONG dstreg = (opcode & 7) >> 0;
6984: {{ ULONG src = srcreg;
6985: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
6986: LONG dst = get_long(dsta);
6987: { ULONG newv = dst - src;
6988: { bool flgs = ((LONG)(src)) < 0;
6989: bool flgo = ((LONG)(dst)) < 0;
6990: bool flgn = ((LONG)(newv)) < 0;
6991: regs.z = ((LONG)(newv)) == 0;
6992: regs.v = (flgs != flgo) && (flgn != flgo);
6993: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
6994: regs.n = flgn != 0;
6995: put_long(dsta,newv);
6996: }}}}}}
6997: void op_5db0(UWORD opcode)
6998: {
6999: ULONG srcreg = 6;
7000: ULONG dstreg = (opcode & 7) >> 0;
7001: {{ ULONG src = srcreg;
7002: { CPTR dsta = regs.a[dstreg];
7003: UWORD dstdp = nextiword();
7004: dsta += (LONG)(BYTE)(dstdp & 0xFF);
7005: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
7006: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
7007: dsta += dstdpr;
7008: { LONG dst = get_long(dsta);
7009: { ULONG newv = dst - src;
7010: { bool flgs = ((LONG)(src)) < 0;
7011: bool flgo = ((LONG)(dst)) < 0;
7012: bool flgn = ((LONG)(newv)) < 0;
7013: regs.z = ((LONG)(newv)) == 0;
7014: regs.v = (flgs != flgo) && (flgn != flgo);
7015: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
7016: regs.n = flgn != 0;
7017: put_long(dsta,newv);
7018: }}}}}}}}
7019: void op_5db8(UWORD opcode)
7020: {
7021: ULONG srcreg = 6;
7022: {{ ULONG src = srcreg;
7023: { CPTR dsta = (LONG)(WORD)nextiword();
7024: LONG dst = get_long(dsta);
7025: { ULONG newv = dst - src;
7026: { bool flgs = ((LONG)(src)) < 0;
7027: bool flgo = ((LONG)(dst)) < 0;
7028: bool flgn = ((LONG)(newv)) < 0;
7029: regs.z = ((LONG)(newv)) == 0;
7030: regs.v = (flgs != flgo) && (flgn != flgo);
7031: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
7032: regs.n = flgn != 0;
7033: put_long(dsta,newv);
7034: }}}}}}
7035: void op_5db9(UWORD opcode)
7036: {
7037: ULONG srcreg = 6;
7038: {{ ULONG src = srcreg;
7039: { CPTR dsta = nextilong();
7040: LONG dst = get_long(dsta);
7041: { ULONG newv = dst - src;
7042: { bool flgs = ((LONG)(src)) < 0;
7043: bool flgo = ((LONG)(dst)) < 0;
7044: bool flgn = ((LONG)(newv)) < 0;
7045: regs.z = ((LONG)(newv)) == 0;
7046: regs.v = (flgs != flgo) && (flgn != flgo);
7047: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
7048: regs.n = flgn != 0;
7049: put_long(dsta,newv);
7050: }}}}}}
7051: void op_5dc0(UWORD opcode)
7052: {
7053: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7054: {{{ int val = cctrue(13) ? 0xff : 0;
7055: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
7056: }}}}
7057: void op_5dc8(UWORD opcode)
7058: {
7059: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7060: {{ WORD src = regs.d[srcreg];
7061: { WORD offs = nextiword();
7062: if (!cctrue(13)) {
7063: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
7064: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
7065: }
7066: }}}}
7067: void op_5dd0(UWORD opcode)
7068: {
7069: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7070: {{ CPTR srca = regs.a[srcreg];
7071: { int val = cctrue(13) ? 0xff : 0;
7072: put_byte(srca,val);
7073: }}}}
7074: void op_5dd8(UWORD opcode)
7075: {
7076: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7077: {{ CPTR srca = regs.a[srcreg];
7078: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
7079: { int val = cctrue(13) ? 0xff : 0;
7080: put_byte(srca,val);
7081: }}}}}
7082: void op_5de0(UWORD opcode)
7083: {
7084: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7085: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
7086: { CPTR srca = regs.a[srcreg];
7087: { int val = cctrue(13) ? 0xff : 0;
7088: put_byte(srca,val);
7089: }}}}}
7090: void op_5de8(UWORD opcode)
7091: {
7092: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7093: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
7094: { int val = cctrue(13) ? 0xff : 0;
7095: put_byte(srca,val);
7096: }}}}
7097: void op_5df0(UWORD opcode)
7098: {
7099: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7100: {{ CPTR srca = regs.a[srcreg];
7101: UWORD srcdp = nextiword();
7102: srca += (LONG)(BYTE)(srcdp & 0xFF);
7103: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
7104: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
7105: srca += srcdpr;
7106: { int val = cctrue(13) ? 0xff : 0;
7107: put_byte(srca,val);
7108: }}}}}
7109: void op_5df8(UWORD opcode)
7110: {
7111: {{ CPTR srca = (LONG)(WORD)nextiword();
7112: { int val = cctrue(13) ? 0xff : 0;
7113: put_byte(srca,val);
7114: }}}}
7115: void op_5df9(UWORD opcode)
7116: {
7117: {{ CPTR srca = nextilong();
7118: { int val = cctrue(13) ? 0xff : 0;
7119: put_byte(srca,val);
7120: }}}}
7121: void op_5e00(UWORD opcode)
7122: {
7123: ULONG srcreg = 7;
7124: ULONG dstreg = (opcode & 7) >> 0;
7125: {{ ULONG src = srcreg;
7126: { BYTE dst = regs.d[dstreg];
7127: { ULONG newv = dst + src;
7128: { bool flgs = ((BYTE)(src)) < 0;
7129: bool flgo = ((BYTE)(dst)) < 0;
7130: bool flgn = ((BYTE)(newv)) < 0;
7131: regs.z = ((BYTE)(newv)) == 0;
7132: regs.v = (flgs == flgo) && (flgn != flgo);
7133: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
7134: regs.n = flgn != 0;
7135: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
7136: }}}}}}
7137: void op_5e10(UWORD opcode)
7138: {
7139: ULONG srcreg = 7;
7140: ULONG dstreg = (opcode & 7) >> 0;
7141: {{ ULONG src = srcreg;
7142: { CPTR dsta = regs.a[dstreg];
7143: BYTE dst = get_byte(dsta);
7144: { ULONG newv = dst + src;
7145: { bool flgs = ((BYTE)(src)) < 0;
7146: bool flgo = ((BYTE)(dst)) < 0;
7147: bool flgn = ((BYTE)(newv)) < 0;
7148: regs.z = ((BYTE)(newv)) == 0;
7149: regs.v = (flgs == flgo) && (flgn != flgo);
7150: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
7151: regs.n = flgn != 0;
7152: put_byte(dsta,newv);
7153: }}}}}}
7154: void op_5e18(UWORD opcode)
7155: {
7156: ULONG srcreg = 7;
7157: ULONG dstreg = (opcode & 7) >> 0;
7158: {{ ULONG src = srcreg;
7159: { CPTR dsta = regs.a[dstreg];
7160: BYTE dst = get_byte(dsta);
7161: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
7162: { ULONG newv = dst + src;
7163: { bool flgs = ((BYTE)(src)) < 0;
7164: bool flgo = ((BYTE)(dst)) < 0;
7165: bool flgn = ((BYTE)(newv)) < 0;
7166: regs.z = ((BYTE)(newv)) == 0;
7167: regs.v = (flgs == flgo) && (flgn != flgo);
7168: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
7169: regs.n = flgn != 0;
7170: put_byte(dsta,newv);
7171: }}}}}}}
7172: void op_5e20(UWORD opcode)
7173: {
7174: ULONG srcreg = 7;
7175: ULONG dstreg = (opcode & 7) >> 0;
7176: {{ ULONG src = srcreg;
7177: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
7178: { CPTR dsta = regs.a[dstreg];
7179: BYTE dst = get_byte(dsta);
7180: { ULONG newv = dst + src;
7181: { bool flgs = ((BYTE)(src)) < 0;
7182: bool flgo = ((BYTE)(dst)) < 0;
7183: bool flgn = ((BYTE)(newv)) < 0;
7184: regs.z = ((BYTE)(newv)) == 0;
7185: regs.v = (flgs == flgo) && (flgn != flgo);
7186: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
7187: regs.n = flgn != 0;
7188: put_byte(dsta,newv);
7189: }}}}}}}
7190: void op_5e28(UWORD opcode)
7191: {
7192: ULONG srcreg = 7;
7193: ULONG dstreg = (opcode & 7) >> 0;
7194: {{ ULONG src = srcreg;
7195: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
7196: BYTE dst = get_byte(dsta);
7197: { ULONG newv = dst + src;
7198: { bool flgs = ((BYTE)(src)) < 0;
7199: bool flgo = ((BYTE)(dst)) < 0;
7200: bool flgn = ((BYTE)(newv)) < 0;
7201: regs.z = ((BYTE)(newv)) == 0;
7202: regs.v = (flgs == flgo) && (flgn != flgo);
7203: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
7204: regs.n = flgn != 0;
7205: put_byte(dsta,newv);
7206: }}}}}}
7207: void op_5e30(UWORD opcode)
7208: {
7209: ULONG srcreg = 7;
7210: ULONG dstreg = (opcode & 7) >> 0;
7211: {{ ULONG src = srcreg;
7212: { CPTR dsta = regs.a[dstreg];
7213: UWORD dstdp = nextiword();
7214: dsta += (LONG)(BYTE)(dstdp & 0xFF);
7215: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
7216: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
7217: dsta += dstdpr;
7218: { BYTE dst = get_byte(dsta);
7219: { ULONG newv = dst + src;
7220: { bool flgs = ((BYTE)(src)) < 0;
7221: bool flgo = ((BYTE)(dst)) < 0;
7222: bool flgn = ((BYTE)(newv)) < 0;
7223: regs.z = ((BYTE)(newv)) == 0;
7224: regs.v = (flgs == flgo) && (flgn != flgo);
7225: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
7226: regs.n = flgn != 0;
7227: put_byte(dsta,newv);
7228: }}}}}}}}
7229: void op_5e38(UWORD opcode)
7230: {
7231: ULONG srcreg = 7;
7232: {{ ULONG src = srcreg;
7233: { CPTR dsta = (LONG)(WORD)nextiword();
7234: BYTE dst = get_byte(dsta);
7235: { ULONG newv = dst + src;
7236: { bool flgs = ((BYTE)(src)) < 0;
7237: bool flgo = ((BYTE)(dst)) < 0;
7238: bool flgn = ((BYTE)(newv)) < 0;
7239: regs.z = ((BYTE)(newv)) == 0;
7240: regs.v = (flgs == flgo) && (flgn != flgo);
7241: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
7242: regs.n = flgn != 0;
7243: put_byte(dsta,newv);
7244: }}}}}}
7245: void op_5e39(UWORD opcode)
7246: {
7247: ULONG srcreg = 7;
7248: {{ ULONG src = srcreg;
7249: { CPTR dsta = nextilong();
7250: BYTE dst = get_byte(dsta);
7251: { ULONG newv = dst + src;
7252: { bool flgs = ((BYTE)(src)) < 0;
7253: bool flgo = ((BYTE)(dst)) < 0;
7254: bool flgn = ((BYTE)(newv)) < 0;
7255: regs.z = ((BYTE)(newv)) == 0;
7256: regs.v = (flgs == flgo) && (flgn != flgo);
7257: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src));
7258: regs.n = flgn != 0;
7259: put_byte(dsta,newv);
7260: }}}}}}
7261: void op_5e40(UWORD opcode)
7262: {
7263: ULONG srcreg = 7;
7264: ULONG dstreg = (opcode & 7) >> 0;
7265: {{ ULONG src = srcreg;
7266: { WORD dst = regs.d[dstreg];
7267: { ULONG newv = dst + src;
7268: { bool flgs = ((WORD)(src)) < 0;
7269: bool flgo = ((WORD)(dst)) < 0;
7270: bool flgn = ((WORD)(newv)) < 0;
7271: regs.z = ((WORD)(newv)) == 0;
7272: regs.v = (flgs == flgo) && (flgn != flgo);
7273: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
7274: regs.n = flgn != 0;
7275: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
7276: }}}}}}
7277: void op_5e48(UWORD opcode)
7278: {
7279: ULONG srcreg = 7;
7280: ULONG dstreg = (opcode & 7) >> 0;
7281: {{ ULONG src = srcreg;
7282: { LONG dst = regs.a[dstreg];
7283: { ULONG newv = dst + src;
7284: regs.a[dstreg] = (newv);
7285: }}}}}
7286: void op_5e50(UWORD opcode)
7287: {
7288: ULONG srcreg = 7;
7289: ULONG dstreg = (opcode & 7) >> 0;
7290: {{ ULONG src = srcreg;
7291: { CPTR dsta = regs.a[dstreg];
7292: WORD dst = get_word(dsta);
7293: { ULONG newv = dst + src;
7294: { bool flgs = ((WORD)(src)) < 0;
7295: bool flgo = ((WORD)(dst)) < 0;
7296: bool flgn = ((WORD)(newv)) < 0;
7297: regs.z = ((WORD)(newv)) == 0;
7298: regs.v = (flgs == flgo) && (flgn != flgo);
7299: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
7300: regs.n = flgn != 0;
7301: put_word(dsta,newv);
7302: }}}}}}
7303: void op_5e58(UWORD opcode)
7304: {
7305: ULONG srcreg = 7;
7306: ULONG dstreg = (opcode & 7) >> 0;
7307: {{ ULONG src = srcreg;
7308: { CPTR dsta = regs.a[dstreg];
7309: WORD dst = get_word(dsta);
7310: { regs.a[dstreg] += 2;
7311: { ULONG newv = dst + src;
7312: { bool flgs = ((WORD)(src)) < 0;
7313: bool flgo = ((WORD)(dst)) < 0;
7314: bool flgn = ((WORD)(newv)) < 0;
7315: regs.z = ((WORD)(newv)) == 0;
7316: regs.v = (flgs == flgo) && (flgn != flgo);
7317: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
7318: regs.n = flgn != 0;
7319: put_word(dsta,newv);
7320: }}}}}}}
7321: void op_5e60(UWORD opcode)
7322: {
7323: ULONG srcreg = 7;
7324: ULONG dstreg = (opcode & 7) >> 0;
7325: {{ ULONG src = srcreg;
7326: { regs.a[dstreg] -= 2;
7327: { CPTR dsta = regs.a[dstreg];
7328: WORD dst = get_word(dsta);
7329: { ULONG newv = dst + src;
7330: { bool flgs = ((WORD)(src)) < 0;
7331: bool flgo = ((WORD)(dst)) < 0;
7332: bool flgn = ((WORD)(newv)) < 0;
7333: regs.z = ((WORD)(newv)) == 0;
7334: regs.v = (flgs == flgo) && (flgn != flgo);
7335: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
7336: regs.n = flgn != 0;
7337: put_word(dsta,newv);
7338: }}}}}}}
7339: void op_5e68(UWORD opcode)
7340: {
7341: ULONG srcreg = 7;
7342: ULONG dstreg = (opcode & 7) >> 0;
7343: {{ ULONG src = srcreg;
7344: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
7345: WORD dst = get_word(dsta);
7346: { ULONG newv = dst + src;
7347: { bool flgs = ((WORD)(src)) < 0;
7348: bool flgo = ((WORD)(dst)) < 0;
7349: bool flgn = ((WORD)(newv)) < 0;
7350: regs.z = ((WORD)(newv)) == 0;
7351: regs.v = (flgs == flgo) && (flgn != flgo);
7352: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
7353: regs.n = flgn != 0;
7354: put_word(dsta,newv);
7355: }}}}}}
7356: void op_5e70(UWORD opcode)
7357: {
7358: ULONG srcreg = 7;
7359: ULONG dstreg = (opcode & 7) >> 0;
7360: {{ ULONG src = srcreg;
7361: { CPTR dsta = regs.a[dstreg];
7362: UWORD dstdp = nextiword();
7363: dsta += (LONG)(BYTE)(dstdp & 0xFF);
7364: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
7365: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
7366: dsta += dstdpr;
7367: { WORD dst = get_word(dsta);
7368: { ULONG newv = dst + src;
7369: { bool flgs = ((WORD)(src)) < 0;
7370: bool flgo = ((WORD)(dst)) < 0;
7371: bool flgn = ((WORD)(newv)) < 0;
7372: regs.z = ((WORD)(newv)) == 0;
7373: regs.v = (flgs == flgo) && (flgn != flgo);
7374: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
7375: regs.n = flgn != 0;
7376: put_word(dsta,newv);
7377: }}}}}}}}
7378: void op_5e78(UWORD opcode)
7379: {
7380: ULONG srcreg = 7;
7381: {{ ULONG src = srcreg;
7382: { CPTR dsta = (LONG)(WORD)nextiword();
7383: WORD dst = get_word(dsta);
7384: { ULONG newv = dst + src;
7385: { bool flgs = ((WORD)(src)) < 0;
7386: bool flgo = ((WORD)(dst)) < 0;
7387: bool flgn = ((WORD)(newv)) < 0;
7388: regs.z = ((WORD)(newv)) == 0;
7389: regs.v = (flgs == flgo) && (flgn != flgo);
7390: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
7391: regs.n = flgn != 0;
7392: put_word(dsta,newv);
7393: }}}}}}
7394: void op_5e79(UWORD opcode)
7395: {
7396: ULONG srcreg = 7;
7397: {{ ULONG src = srcreg;
7398: { CPTR dsta = nextilong();
7399: WORD dst = get_word(dsta);
7400: { ULONG newv = dst + src;
7401: { bool flgs = ((WORD)(src)) < 0;
7402: bool flgo = ((WORD)(dst)) < 0;
7403: bool flgn = ((WORD)(newv)) < 0;
7404: regs.z = ((WORD)(newv)) == 0;
7405: regs.v = (flgs == flgo) && (flgn != flgo);
7406: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src));
7407: regs.n = flgn != 0;
7408: put_word(dsta,newv);
7409: }}}}}}
7410: void op_5e80(UWORD opcode)
7411: {
7412: ULONG srcreg = 7;
7413: ULONG dstreg = (opcode & 7) >> 0;
7414: {{ ULONG src = srcreg;
7415: { LONG dst = regs.d[dstreg];
7416: { ULONG newv = dst + src;
7417: { bool flgs = ((LONG)(src)) < 0;
7418: bool flgo = ((LONG)(dst)) < 0;
7419: bool flgn = ((LONG)(newv)) < 0;
7420: regs.z = ((LONG)(newv)) == 0;
7421: regs.v = (flgs == flgo) && (flgn != flgo);
7422: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
7423: regs.n = flgn != 0;
7424: regs.d[dstreg] = (newv);
7425: }}}}}}
7426: void op_5e88(UWORD opcode)
7427: {
7428: ULONG srcreg = 7;
7429: ULONG dstreg = (opcode & 7) >> 0;
7430: {{ ULONG src = srcreg;
7431: { LONG dst = regs.a[dstreg];
7432: { ULONG newv = dst + src;
7433: regs.a[dstreg] = (newv);
7434: }}}}}
7435: void op_5e90(UWORD opcode)
7436: {
7437: ULONG srcreg = 7;
7438: ULONG dstreg = (opcode & 7) >> 0;
7439: {{ ULONG src = srcreg;
7440: { CPTR dsta = regs.a[dstreg];
7441: LONG dst = get_long(dsta);
7442: { ULONG newv = dst + src;
7443: { bool flgs = ((LONG)(src)) < 0;
7444: bool flgo = ((LONG)(dst)) < 0;
7445: bool flgn = ((LONG)(newv)) < 0;
7446: regs.z = ((LONG)(newv)) == 0;
7447: regs.v = (flgs == flgo) && (flgn != flgo);
7448: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
7449: regs.n = flgn != 0;
7450: put_long(dsta,newv);
7451: }}}}}}
7452: void op_5e98(UWORD opcode)
7453: {
7454: ULONG srcreg = 7;
7455: ULONG dstreg = (opcode & 7) >> 0;
7456: {{ ULONG src = srcreg;
7457: { CPTR dsta = regs.a[dstreg];
7458: LONG dst = get_long(dsta);
7459: { regs.a[dstreg] += 4;
7460: { ULONG newv = dst + src;
7461: { bool flgs = ((LONG)(src)) < 0;
7462: bool flgo = ((LONG)(dst)) < 0;
7463: bool flgn = ((LONG)(newv)) < 0;
7464: regs.z = ((LONG)(newv)) == 0;
7465: regs.v = (flgs == flgo) && (flgn != flgo);
7466: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
7467: regs.n = flgn != 0;
7468: put_long(dsta,newv);
7469: }}}}}}}
7470: void op_5ea0(UWORD opcode)
7471: {
7472: ULONG srcreg = 7;
7473: ULONG dstreg = (opcode & 7) >> 0;
7474: {{ ULONG src = srcreg;
7475: { regs.a[dstreg] -= 4;
7476: { CPTR dsta = regs.a[dstreg];
7477: LONG dst = get_long(dsta);
7478: { ULONG newv = dst + src;
7479: { bool flgs = ((LONG)(src)) < 0;
7480: bool flgo = ((LONG)(dst)) < 0;
7481: bool flgn = ((LONG)(newv)) < 0;
7482: regs.z = ((LONG)(newv)) == 0;
7483: regs.v = (flgs == flgo) && (flgn != flgo);
7484: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
7485: regs.n = flgn != 0;
7486: put_long(dsta,newv);
7487: }}}}}}}
7488: void op_5ea8(UWORD opcode)
7489: {
7490: ULONG srcreg = 7;
7491: ULONG dstreg = (opcode & 7) >> 0;
7492: {{ ULONG src = srcreg;
7493: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
7494: LONG dst = get_long(dsta);
7495: { ULONG newv = dst + src;
7496: { bool flgs = ((LONG)(src)) < 0;
7497: bool flgo = ((LONG)(dst)) < 0;
7498: bool flgn = ((LONG)(newv)) < 0;
7499: regs.z = ((LONG)(newv)) == 0;
7500: regs.v = (flgs == flgo) && (flgn != flgo);
7501: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
7502: regs.n = flgn != 0;
7503: put_long(dsta,newv);
7504: }}}}}}
7505: void op_5eb0(UWORD opcode)
7506: {
7507: ULONG srcreg = 7;
7508: ULONG dstreg = (opcode & 7) >> 0;
7509: {{ ULONG src = srcreg;
7510: { CPTR dsta = regs.a[dstreg];
7511: UWORD dstdp = nextiword();
7512: dsta += (LONG)(BYTE)(dstdp & 0xFF);
7513: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
7514: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
7515: dsta += dstdpr;
7516: { LONG dst = get_long(dsta);
7517: { ULONG newv = dst + src;
7518: { bool flgs = ((LONG)(src)) < 0;
7519: bool flgo = ((LONG)(dst)) < 0;
7520: bool flgn = ((LONG)(newv)) < 0;
7521: regs.z = ((LONG)(newv)) == 0;
7522: regs.v = (flgs == flgo) && (flgn != flgo);
7523: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
7524: regs.n = flgn != 0;
7525: put_long(dsta,newv);
7526: }}}}}}}}
7527: void op_5eb8(UWORD opcode)
7528: {
7529: ULONG srcreg = 7;
7530: {{ ULONG src = srcreg;
7531: { CPTR dsta = (LONG)(WORD)nextiword();
7532: LONG dst = get_long(dsta);
7533: { ULONG newv = dst + src;
7534: { bool flgs = ((LONG)(src)) < 0;
7535: bool flgo = ((LONG)(dst)) < 0;
7536: bool flgn = ((LONG)(newv)) < 0;
7537: regs.z = ((LONG)(newv)) == 0;
7538: regs.v = (flgs == flgo) && (flgn != flgo);
7539: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
7540: regs.n = flgn != 0;
7541: put_long(dsta,newv);
7542: }}}}}}
7543: void op_5eb9(UWORD opcode)
7544: {
7545: ULONG srcreg = 7;
7546: {{ ULONG src = srcreg;
7547: { CPTR dsta = nextilong();
7548: LONG dst = get_long(dsta);
7549: { ULONG newv = dst + src;
7550: { bool flgs = ((LONG)(src)) < 0;
7551: bool flgo = ((LONG)(dst)) < 0;
7552: bool flgn = ((LONG)(newv)) < 0;
7553: regs.z = ((LONG)(newv)) == 0;
7554: regs.v = (flgs == flgo) && (flgn != flgo);
7555: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src));
7556: regs.n = flgn != 0;
7557: put_long(dsta,newv);
7558: }}}}}}
7559: void op_5ec0(UWORD opcode)
7560: {
7561: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7562: {{{ int val = cctrue(14) ? 0xff : 0;
7563: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
7564: }}}}
7565: void op_5ec8(UWORD opcode)
7566: {
7567: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7568: {{ WORD src = regs.d[srcreg];
7569: { WORD offs = nextiword();
7570: if (!cctrue(14)) {
7571: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
7572: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
7573: }
7574: }}}}
7575: void op_5ed0(UWORD opcode)
7576: {
7577: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7578: {{ CPTR srca = regs.a[srcreg];
7579: { int val = cctrue(14) ? 0xff : 0;
7580: put_byte(srca,val);
7581: }}}}
7582: void op_5ed8(UWORD opcode)
7583: {
7584: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7585: {{ CPTR srca = regs.a[srcreg];
7586: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
7587: { int val = cctrue(14) ? 0xff : 0;
7588: put_byte(srca,val);
7589: }}}}}
7590: void op_5ee0(UWORD opcode)
7591: {
7592: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7593: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
7594: { CPTR srca = regs.a[srcreg];
7595: { int val = cctrue(14) ? 0xff : 0;
7596: put_byte(srca,val);
7597: }}}}}
7598: void op_5ee8(UWORD opcode)
7599: {
7600: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7601: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
7602: { int val = cctrue(14) ? 0xff : 0;
7603: put_byte(srca,val);
7604: }}}}
7605: void op_5ef0(UWORD opcode)
7606: {
7607: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
7608: {{ CPTR srca = regs.a[srcreg];
7609: UWORD srcdp = nextiword();
7610: srca += (LONG)(BYTE)(srcdp & 0xFF);
7611: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
7612: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
7613: srca += srcdpr;
7614: { int val = cctrue(14) ? 0xff : 0;
7615: put_byte(srca,val);
7616: }}}}}
7617: void op_5ef8(UWORD opcode)
7618: {
7619: {{ CPTR srca = (LONG)(WORD)nextiword();
7620: { int val = cctrue(14) ? 0xff : 0;
7621: put_byte(srca,val);
7622: }}}}
7623: void op_5ef9(UWORD opcode)
7624: {
7625: {{ CPTR srca = nextilong();
7626: { int val = cctrue(14) ? 0xff : 0;
7627: put_byte(srca,val);
7628: }}}}
7629: void op_5f00(UWORD opcode)
7630: {
7631: ULONG srcreg = 7;
7632: ULONG dstreg = (opcode & 7) >> 0;
7633: {{ ULONG src = srcreg;
7634: { BYTE dst = regs.d[dstreg];
7635: { ULONG newv = dst - src;
7636: { bool flgs = ((BYTE)(src)) < 0;
7637: bool flgo = ((BYTE)(dst)) < 0;
7638: bool flgn = ((BYTE)(newv)) < 0;
7639: regs.z = ((BYTE)(newv)) == 0;
7640: regs.v = (flgs != flgo) && (flgn != flgo);
7641: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
7642: regs.n = flgn != 0;
7643: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff;
7644: }}}}}}
7645: void op_5f10(UWORD opcode)
7646: {
7647: ULONG srcreg = 7;
7648: ULONG dstreg = (opcode & 7) >> 0;
7649: {{ ULONG src = srcreg;
7650: { CPTR dsta = regs.a[dstreg];
7651: BYTE dst = get_byte(dsta);
7652: { ULONG newv = dst - src;
7653: { bool flgs = ((BYTE)(src)) < 0;
7654: bool flgo = ((BYTE)(dst)) < 0;
7655: bool flgn = ((BYTE)(newv)) < 0;
7656: regs.z = ((BYTE)(newv)) == 0;
7657: regs.v = (flgs != flgo) && (flgn != flgo);
7658: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
7659: regs.n = flgn != 0;
7660: put_byte(dsta,newv);
7661: }}}}}}
7662: void op_5f18(UWORD opcode)
7663: {
7664: ULONG srcreg = 7;
7665: ULONG dstreg = (opcode & 7) >> 0;
7666: {{ ULONG src = srcreg;
7667: { CPTR dsta = regs.a[dstreg];
7668: BYTE dst = get_byte(dsta);
7669: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1;
7670: { ULONG newv = dst - src;
7671: { bool flgs = ((BYTE)(src)) < 0;
7672: bool flgo = ((BYTE)(dst)) < 0;
7673: bool flgn = ((BYTE)(newv)) < 0;
7674: regs.z = ((BYTE)(newv)) == 0;
7675: regs.v = (flgs != flgo) && (flgn != flgo);
7676: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
7677: regs.n = flgn != 0;
7678: put_byte(dsta,newv);
7679: }}}}}}}
7680: void op_5f20(UWORD opcode)
7681: {
7682: ULONG srcreg = 7;
7683: ULONG dstreg = (opcode & 7) >> 0;
7684: {{ ULONG src = srcreg;
7685: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1;
7686: { CPTR dsta = regs.a[dstreg];
7687: BYTE dst = get_byte(dsta);
7688: { ULONG newv = dst - src;
7689: { bool flgs = ((BYTE)(src)) < 0;
7690: bool flgo = ((BYTE)(dst)) < 0;
7691: bool flgn = ((BYTE)(newv)) < 0;
7692: regs.z = ((BYTE)(newv)) == 0;
7693: regs.v = (flgs != flgo) && (flgn != flgo);
7694: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
7695: regs.n = flgn != 0;
7696: put_byte(dsta,newv);
7697: }}}}}}}
7698: void op_5f28(UWORD opcode)
7699: {
7700: ULONG srcreg = 7;
7701: ULONG dstreg = (opcode & 7) >> 0;
7702: {{ ULONG src = srcreg;
7703: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
7704: BYTE dst = get_byte(dsta);
7705: { ULONG newv = dst - src;
7706: { bool flgs = ((BYTE)(src)) < 0;
7707: bool flgo = ((BYTE)(dst)) < 0;
7708: bool flgn = ((BYTE)(newv)) < 0;
7709: regs.z = ((BYTE)(newv)) == 0;
7710: regs.v = (flgs != flgo) && (flgn != flgo);
7711: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
7712: regs.n = flgn != 0;
7713: put_byte(dsta,newv);
7714: }}}}}}
7715: void op_5f30(UWORD opcode)
7716: {
7717: ULONG srcreg = 7;
7718: ULONG dstreg = (opcode & 7) >> 0;
7719: {{ ULONG src = srcreg;
7720: { CPTR dsta = regs.a[dstreg];
7721: UWORD dstdp = nextiword();
7722: dsta += (LONG)(BYTE)(dstdp & 0xFF);
7723: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
7724: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
7725: dsta += dstdpr;
7726: { BYTE dst = get_byte(dsta);
7727: { ULONG newv = dst - src;
7728: { bool flgs = ((BYTE)(src)) < 0;
7729: bool flgo = ((BYTE)(dst)) < 0;
7730: bool flgn = ((BYTE)(newv)) < 0;
7731: regs.z = ((BYTE)(newv)) == 0;
7732: regs.v = (flgs != flgo) && (flgn != flgo);
7733: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
7734: regs.n = flgn != 0;
7735: put_byte(dsta,newv);
7736: }}}}}}}}
7737: void op_5f38(UWORD opcode)
7738: {
7739: ULONG srcreg = 7;
7740: {{ ULONG src = srcreg;
7741: { CPTR dsta = (LONG)(WORD)nextiword();
7742: BYTE dst = get_byte(dsta);
7743: { ULONG newv = dst - src;
7744: { bool flgs = ((BYTE)(src)) < 0;
7745: bool flgo = ((BYTE)(dst)) < 0;
7746: bool flgn = ((BYTE)(newv)) < 0;
7747: regs.z = ((BYTE)(newv)) == 0;
7748: regs.v = (flgs != flgo) && (flgn != flgo);
7749: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
7750: regs.n = flgn != 0;
7751: put_byte(dsta,newv);
7752: }}}}}}
7753: void op_5f39(UWORD opcode)
7754: {
7755: ULONG srcreg = 7;
7756: {{ ULONG src = srcreg;
7757: { CPTR dsta = nextilong();
7758: BYTE dst = get_byte(dsta);
7759: { ULONG newv = dst - src;
7760: { bool flgs = ((BYTE)(src)) < 0;
7761: bool flgo = ((BYTE)(dst)) < 0;
7762: bool flgn = ((BYTE)(newv)) < 0;
7763: regs.z = ((BYTE)(newv)) == 0;
7764: regs.v = (flgs != flgo) && (flgn != flgo);
7765: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst));
7766: regs.n = flgn != 0;
7767: put_byte(dsta,newv);
7768: }}}}}}
7769: void op_5f40(UWORD opcode)
7770: {
7771: ULONG srcreg = 7;
7772: ULONG dstreg = (opcode & 7) >> 0;
7773: {{ ULONG src = srcreg;
7774: { WORD dst = regs.d[dstreg];
7775: { ULONG newv = dst - src;
7776: { bool flgs = ((WORD)(src)) < 0;
7777: bool flgo = ((WORD)(dst)) < 0;
7778: bool flgn = ((WORD)(newv)) < 0;
7779: regs.z = ((WORD)(newv)) == 0;
7780: regs.v = (flgs != flgo) && (flgn != flgo);
7781: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
7782: regs.n = flgn != 0;
7783: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff;
7784: }}}}}}
7785: void op_5f48(UWORD opcode)
7786: {
7787: ULONG srcreg = 7;
7788: ULONG dstreg = (opcode & 7) >> 0;
7789: {{ ULONG src = srcreg;
7790: { LONG dst = regs.a[dstreg];
7791: { ULONG newv = dst - src;
7792: regs.a[dstreg] = (newv);
7793: }}}}}
7794: void op_5f50(UWORD opcode)
7795: {
7796: ULONG srcreg = 7;
7797: ULONG dstreg = (opcode & 7) >> 0;
7798: {{ ULONG src = srcreg;
7799: { CPTR dsta = regs.a[dstreg];
7800: WORD dst = get_word(dsta);
7801: { ULONG newv = dst - src;
7802: { bool flgs = ((WORD)(src)) < 0;
7803: bool flgo = ((WORD)(dst)) < 0;
7804: bool flgn = ((WORD)(newv)) < 0;
7805: regs.z = ((WORD)(newv)) == 0;
7806: regs.v = (flgs != flgo) && (flgn != flgo);
7807: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
7808: regs.n = flgn != 0;
7809: put_word(dsta,newv);
7810: }}}}}}
7811: void op_5f58(UWORD opcode)
7812: {
7813: ULONG srcreg = 7;
7814: ULONG dstreg = (opcode & 7) >> 0;
7815: {{ ULONG src = srcreg;
7816: { CPTR dsta = regs.a[dstreg];
7817: WORD dst = get_word(dsta);
7818: { regs.a[dstreg] += 2;
7819: { ULONG newv = dst - src;
7820: { bool flgs = ((WORD)(src)) < 0;
7821: bool flgo = ((WORD)(dst)) < 0;
7822: bool flgn = ((WORD)(newv)) < 0;
7823: regs.z = ((WORD)(newv)) == 0;
7824: regs.v = (flgs != flgo) && (flgn != flgo);
7825: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
7826: regs.n = flgn != 0;
7827: put_word(dsta,newv);
7828: }}}}}}}
7829: void op_5f60(UWORD opcode)
7830: {
7831: ULONG srcreg = 7;
7832: ULONG dstreg = (opcode & 7) >> 0;
7833: {{ ULONG src = srcreg;
7834: { regs.a[dstreg] -= 2;
7835: { CPTR dsta = regs.a[dstreg];
7836: WORD dst = get_word(dsta);
7837: { ULONG newv = dst - src;
7838: { bool flgs = ((WORD)(src)) < 0;
7839: bool flgo = ((WORD)(dst)) < 0;
7840: bool flgn = ((WORD)(newv)) < 0;
7841: regs.z = ((WORD)(newv)) == 0;
7842: regs.v = (flgs != flgo) && (flgn != flgo);
7843: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
7844: regs.n = flgn != 0;
7845: put_word(dsta,newv);
7846: }}}}}}}
7847: void op_5f68(UWORD opcode)
7848: {
7849: ULONG srcreg = 7;
7850: ULONG dstreg = (opcode & 7) >> 0;
7851: {{ ULONG src = srcreg;
7852: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
7853: WORD dst = get_word(dsta);
7854: { ULONG newv = dst - src;
7855: { bool flgs = ((WORD)(src)) < 0;
7856: bool flgo = ((WORD)(dst)) < 0;
7857: bool flgn = ((WORD)(newv)) < 0;
7858: regs.z = ((WORD)(newv)) == 0;
7859: regs.v = (flgs != flgo) && (flgn != flgo);
7860: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
7861: regs.n = flgn != 0;
7862: put_word(dsta,newv);
7863: }}}}}}
7864: void op_5f70(UWORD opcode)
7865: {
7866: ULONG srcreg = 7;
7867: ULONG dstreg = (opcode & 7) >> 0;
7868: {{ ULONG src = srcreg;
7869: { CPTR dsta = regs.a[dstreg];
7870: UWORD dstdp = nextiword();
7871: dsta += (LONG)(BYTE)(dstdp & 0xFF);
7872: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
7873: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
7874: dsta += dstdpr;
7875: { WORD dst = get_word(dsta);
7876: { ULONG newv = dst - src;
7877: { bool flgs = ((WORD)(src)) < 0;
7878: bool flgo = ((WORD)(dst)) < 0;
7879: bool flgn = ((WORD)(newv)) < 0;
7880: regs.z = ((WORD)(newv)) == 0;
7881: regs.v = (flgs != flgo) && (flgn != flgo);
7882: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
7883: regs.n = flgn != 0;
7884: put_word(dsta,newv);
7885: }}}}}}}}
7886: void op_5f78(UWORD opcode)
7887: {
7888: ULONG srcreg = 7;
7889: {{ ULONG src = srcreg;
7890: { CPTR dsta = (LONG)(WORD)nextiword();
7891: WORD dst = get_word(dsta);
7892: { ULONG newv = dst - src;
7893: { bool flgs = ((WORD)(src)) < 0;
7894: bool flgo = ((WORD)(dst)) < 0;
7895: bool flgn = ((WORD)(newv)) < 0;
7896: regs.z = ((WORD)(newv)) == 0;
7897: regs.v = (flgs != flgo) && (flgn != flgo);
7898: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
7899: regs.n = flgn != 0;
7900: put_word(dsta,newv);
7901: }}}}}}
7902: void op_5f79(UWORD opcode)
7903: {
7904: ULONG srcreg = 7;
7905: {{ ULONG src = srcreg;
7906: { CPTR dsta = nextilong();
7907: WORD dst = get_word(dsta);
7908: { ULONG newv = dst - src;
7909: { bool flgs = ((WORD)(src)) < 0;
7910: bool flgo = ((WORD)(dst)) < 0;
7911: bool flgn = ((WORD)(newv)) < 0;
7912: regs.z = ((WORD)(newv)) == 0;
7913: regs.v = (flgs != flgo) && (flgn != flgo);
7914: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst));
7915: regs.n = flgn != 0;
7916: put_word(dsta,newv);
7917: }}}}}}
7918: void op_5f80(UWORD opcode)
7919: {
7920: ULONG srcreg = 7;
7921: ULONG dstreg = (opcode & 7) >> 0;
7922: {{ ULONG src = srcreg;
7923: { LONG dst = regs.d[dstreg];
7924: { ULONG newv = dst - src;
7925: { bool flgs = ((LONG)(src)) < 0;
7926: bool flgo = ((LONG)(dst)) < 0;
7927: bool flgn = ((LONG)(newv)) < 0;
7928: regs.z = ((LONG)(newv)) == 0;
7929: regs.v = (flgs != flgo) && (flgn != flgo);
7930: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
7931: regs.n = flgn != 0;
7932: regs.d[dstreg] = (newv);
7933: }}}}}}
7934: void op_5f88(UWORD opcode)
7935: {
7936: ULONG srcreg = 7;
7937: ULONG dstreg = (opcode & 7) >> 0;
7938: {{ ULONG src = srcreg;
7939: { LONG dst = regs.a[dstreg];
7940: { ULONG newv = dst - src;
7941: regs.a[dstreg] = (newv);
7942: }}}}}
7943: void op_5f90(UWORD opcode)
7944: {
7945: ULONG srcreg = 7;
7946: ULONG dstreg = (opcode & 7) >> 0;
7947: {{ ULONG src = srcreg;
7948: { CPTR dsta = regs.a[dstreg];
7949: LONG dst = get_long(dsta);
7950: { ULONG newv = dst - src;
7951: { bool flgs = ((LONG)(src)) < 0;
7952: bool flgo = ((LONG)(dst)) < 0;
7953: bool flgn = ((LONG)(newv)) < 0;
7954: regs.z = ((LONG)(newv)) == 0;
7955: regs.v = (flgs != flgo) && (flgn != flgo);
7956: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
7957: regs.n = flgn != 0;
7958: put_long(dsta,newv);
7959: }}}}}}
7960: void op_5f98(UWORD opcode)
7961: {
7962: ULONG srcreg = 7;
7963: ULONG dstreg = (opcode & 7) >> 0;
7964: {{ ULONG src = srcreg;
7965: { CPTR dsta = regs.a[dstreg];
7966: LONG dst = get_long(dsta);
7967: { regs.a[dstreg] += 4;
7968: { ULONG newv = dst - src;
7969: { bool flgs = ((LONG)(src)) < 0;
7970: bool flgo = ((LONG)(dst)) < 0;
7971: bool flgn = ((LONG)(newv)) < 0;
7972: regs.z = ((LONG)(newv)) == 0;
7973: regs.v = (flgs != flgo) && (flgn != flgo);
7974: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
7975: regs.n = flgn != 0;
7976: put_long(dsta,newv);
7977: }}}}}}}
7978: void op_5fa0(UWORD opcode)
7979: {
7980: ULONG srcreg = 7;
7981: ULONG dstreg = (opcode & 7) >> 0;
7982: {{ ULONG src = srcreg;
7983: { regs.a[dstreg] -= 4;
7984: { CPTR dsta = regs.a[dstreg];
7985: LONG dst = get_long(dsta);
7986: { ULONG newv = dst - src;
7987: { bool flgs = ((LONG)(src)) < 0;
7988: bool flgo = ((LONG)(dst)) < 0;
7989: bool flgn = ((LONG)(newv)) < 0;
7990: regs.z = ((LONG)(newv)) == 0;
7991: regs.v = (flgs != flgo) && (flgn != flgo);
7992: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
7993: regs.n = flgn != 0;
7994: put_long(dsta,newv);
7995: }}}}}}}
7996: void op_5fa8(UWORD opcode)
7997: {
7998: ULONG srcreg = 7;
7999: ULONG dstreg = (opcode & 7) >> 0;
8000: {{ ULONG src = srcreg;
8001: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword();
8002: LONG dst = get_long(dsta);
8003: { ULONG newv = dst - src;
8004: { bool flgs = ((LONG)(src)) < 0;
8005: bool flgo = ((LONG)(dst)) < 0;
8006: bool flgn = ((LONG)(newv)) < 0;
8007: regs.z = ((LONG)(newv)) == 0;
8008: regs.v = (flgs != flgo) && (flgn != flgo);
8009: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
8010: regs.n = flgn != 0;
8011: put_long(dsta,newv);
8012: }}}}}}
8013: void op_5fb0(UWORD opcode)
8014: {
8015: ULONG srcreg = 7;
8016: ULONG dstreg = (opcode & 7) >> 0;
8017: {{ ULONG src = srcreg;
8018: { CPTR dsta = regs.a[dstreg];
8019: UWORD dstdp = nextiword();
8020: dsta += (LONG)(BYTE)(dstdp & 0xFF);
8021: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12];
8022: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr;
8023: dsta += dstdpr;
8024: { LONG dst = get_long(dsta);
8025: { ULONG newv = dst - src;
8026: { bool flgs = ((LONG)(src)) < 0;
8027: bool flgo = ((LONG)(dst)) < 0;
8028: bool flgn = ((LONG)(newv)) < 0;
8029: regs.z = ((LONG)(newv)) == 0;
8030: regs.v = (flgs != flgo) && (flgn != flgo);
8031: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
8032: regs.n = flgn != 0;
8033: put_long(dsta,newv);
8034: }}}}}}}}
8035: void op_5fb8(UWORD opcode)
8036: {
8037: ULONG srcreg = 7;
8038: {{ ULONG src = srcreg;
8039: { CPTR dsta = (LONG)(WORD)nextiword();
8040: LONG dst = get_long(dsta);
8041: { ULONG newv = dst - src;
8042: { bool flgs = ((LONG)(src)) < 0;
8043: bool flgo = ((LONG)(dst)) < 0;
8044: bool flgn = ((LONG)(newv)) < 0;
8045: regs.z = ((LONG)(newv)) == 0;
8046: regs.v = (flgs != flgo) && (flgn != flgo);
8047: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
8048: regs.n = flgn != 0;
8049: put_long(dsta,newv);
8050: }}}}}}
8051: void op_5fb9(UWORD opcode)
8052: {
8053: ULONG srcreg = 7;
8054: {{ ULONG src = srcreg;
8055: { CPTR dsta = nextilong();
8056: LONG dst = get_long(dsta);
8057: { ULONG newv = dst - src;
8058: { bool flgs = ((LONG)(src)) < 0;
8059: bool flgo = ((LONG)(dst)) < 0;
8060: bool flgn = ((LONG)(newv)) < 0;
8061: regs.z = ((LONG)(newv)) == 0;
8062: regs.v = (flgs != flgo) && (flgn != flgo);
8063: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst));
8064: regs.n = flgn != 0;
8065: put_long(dsta,newv);
8066: }}}}}}
8067: void op_5fc0(UWORD opcode)
8068: {
8069: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
8070: {{{ int val = cctrue(15) ? 0xff : 0;
8071: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff;
8072: }}}}
8073: void op_5fc8(UWORD opcode)
8074: {
8075: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
8076: {{ WORD src = regs.d[srcreg];
8077: { WORD offs = nextiword();
8078: if (!cctrue(15)) {
8079: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2);
8080: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff;
8081: }
8082: }}}}
8083: void op_5fd0(UWORD opcode)
8084: {
8085: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
8086: {{ CPTR srca = regs.a[srcreg];
8087: { int val = cctrue(15) ? 0xff : 0;
8088: put_byte(srca,val);
8089: }}}}
8090: void op_5fd8(UWORD opcode)
8091: {
8092: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
8093: {{ CPTR srca = regs.a[srcreg];
8094: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
8095: { int val = cctrue(15) ? 0xff : 0;
8096: put_byte(srca,val);
8097: }}}}}
8098: void op_5fe0(UWORD opcode)
8099: {
8100: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
8101: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
8102: { CPTR srca = regs.a[srcreg];
8103: { int val = cctrue(15) ? 0xff : 0;
8104: put_byte(srca,val);
8105: }}}}}
8106: void op_5fe8(UWORD opcode)
8107: {
8108: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
8109: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
8110: { int val = cctrue(15) ? 0xff : 0;
8111: put_byte(srca,val);
8112: }}}}
8113: void op_5ff0(UWORD opcode)
8114: {
8115: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
8116: {{ CPTR srca = regs.a[srcreg];
8117: UWORD srcdp = nextiword();
8118: srca += (LONG)(BYTE)(srcdp & 0xFF);
8119: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
8120: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
8121: srca += srcdpr;
8122: { int val = cctrue(15) ? 0xff : 0;
8123: put_byte(srca,val);
8124: }}}}}
8125: void op_5ff8(UWORD opcode)
8126: {
8127: {{ CPTR srca = (LONG)(WORD)nextiword();
8128: { int val = cctrue(15) ? 0xff : 0;
8129: put_byte(srca,val);
8130: }}}}
8131: void op_5ff9(UWORD opcode)
8132: {
8133: {{ CPTR srca = nextilong();
8134: { int val = cctrue(15) ? 0xff : 0;
8135: put_byte(srca,val);
8136: }}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.