|
|
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:
10: void op_4000(UWORD opcode)
11: {
12: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
13: {{ BYTE src = regs.d[srcreg];
14: { ULONG dst = -src-regs.x;
15: { bool flgs = ((BYTE)(src)) < 0;
16: bool flgo = ((BYTE)(0)) < 0;
17: bool flgn = ((BYTE)(dst)) < 0;
18: regs.z = ((BYTE)(dst)) == 0;
19: regs.v = (flgs != flgo) && (flgn != flgo);
20: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
21: regs.n = flgn != 0;
22: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (dst) & 0xff;
23: }}}}}
24: void op_4010(UWORD opcode)
25: {
26: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
27: {{ CPTR srca = regs.a[srcreg];
28: BYTE src = get_byte(srca);
29: { ULONG dst = -src-regs.x;
30: { bool flgs = ((BYTE)(src)) < 0;
31: bool flgo = ((BYTE)(0)) < 0;
32: bool flgn = ((BYTE)(dst)) < 0;
33: regs.z = ((BYTE)(dst)) == 0;
34: regs.v = (flgs != flgo) && (flgn != flgo);
35: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
36: regs.n = flgn != 0;
37: put_byte(srca,dst);
38: }}}}}
39: void op_4018(UWORD opcode)
40: {
41: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
42: {{ CPTR srca = regs.a[srcreg];
43: BYTE src = get_byte(srca);
44: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
45: { ULONG dst = -src-regs.x;
46: { bool flgs = ((BYTE)(src)) < 0;
47: bool flgo = ((BYTE)(0)) < 0;
48: bool flgn = ((BYTE)(dst)) < 0;
49: regs.z = ((BYTE)(dst)) == 0;
50: regs.v = (flgs != flgo) && (flgn != flgo);
51: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
52: regs.n = flgn != 0;
53: put_byte(srca,dst);
54: }}}}}}
55: void op_4020(UWORD opcode)
56: {
57: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
58: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
59: { CPTR srca = regs.a[srcreg];
60: BYTE src = get_byte(srca);
61: { ULONG dst = -src-regs.x;
62: { bool flgs = ((BYTE)(src)) < 0;
63: bool flgo = ((BYTE)(0)) < 0;
64: bool flgn = ((BYTE)(dst)) < 0;
65: regs.z = ((BYTE)(dst)) == 0;
66: regs.v = (flgs != flgo) && (flgn != flgo);
67: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
68: regs.n = flgn != 0;
69: put_byte(srca,dst);
70: }}}}}}
71: void op_4028(UWORD opcode)
72: {
73: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
74: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
75: BYTE src = get_byte(srca);
76: { ULONG dst = -src-regs.x;
77: { bool flgs = ((BYTE)(src)) < 0;
78: bool flgo = ((BYTE)(0)) < 0;
79: bool flgn = ((BYTE)(dst)) < 0;
80: regs.z = ((BYTE)(dst)) == 0;
81: regs.v = (flgs != flgo) && (flgn != flgo);
82: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
83: regs.n = flgn != 0;
84: put_byte(srca,dst);
85: }}}}}
86: void op_4030(UWORD opcode)
87: {
88: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
89: {{ CPTR srca = regs.a[srcreg];
90: UWORD srcdp = nextiword();
91: srca += (LONG)(BYTE)(srcdp & 0xFF);
92: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
93: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
94: srca += srcdpr;
95: { BYTE src = get_byte(srca);
96: { ULONG dst = -src-regs.x;
97: { bool flgs = ((BYTE)(src)) < 0;
98: bool flgo = ((BYTE)(0)) < 0;
99: bool flgn = ((BYTE)(dst)) < 0;
100: regs.z = ((BYTE)(dst)) == 0;
101: regs.v = (flgs != flgo) && (flgn != flgo);
102: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
103: regs.n = flgn != 0;
104: put_byte(srca,dst);
105: }}}}}}}
106: void op_4038(UWORD opcode)
107: {
108: {{ CPTR srca = (LONG)(WORD)nextiword();
109: BYTE src = get_byte(srca);
110: { ULONG dst = -src-regs.x;
111: { bool flgs = ((BYTE)(src)) < 0;
112: bool flgo = ((BYTE)(0)) < 0;
113: bool flgn = ((BYTE)(dst)) < 0;
114: regs.z = ((BYTE)(dst)) == 0;
115: regs.v = (flgs != flgo) && (flgn != flgo);
116: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
117: regs.n = flgn != 0;
118: put_byte(srca,dst);
119: }}}}}
120: void op_4039(UWORD opcode)
121: {
122: {{ CPTR srca = nextilong();
123: BYTE src = get_byte(srca);
124: { ULONG dst = -src-regs.x;
125: { bool flgs = ((BYTE)(src)) < 0;
126: bool flgo = ((BYTE)(0)) < 0;
127: bool flgn = ((BYTE)(dst)) < 0;
128: regs.z = ((BYTE)(dst)) == 0;
129: regs.v = (flgs != flgo) && (flgn != flgo);
130: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
131: regs.n = flgn != 0;
132: put_byte(srca,dst);
133: }}}}}
134: void op_4040(UWORD opcode)
135: {
136: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
137: {{ WORD src = regs.d[srcreg];
138: { ULONG dst = -src-regs.x;
139: { bool flgs = ((WORD)(src)) < 0;
140: bool flgo = ((WORD)(0)) < 0;
141: bool flgn = ((WORD)(dst)) < 0;
142: regs.z = ((WORD)(dst)) == 0;
143: regs.v = (flgs != flgo) && (flgn != flgo);
144: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
145: regs.n = flgn != 0;
146: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (dst) & 0xffff;
147: }}}}}
148: void op_4050(UWORD opcode)
149: {
150: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
151: {{ CPTR srca = regs.a[srcreg];
152: WORD src = get_word(srca);
153: { ULONG dst = -src-regs.x;
154: { bool flgs = ((WORD)(src)) < 0;
155: bool flgo = ((WORD)(0)) < 0;
156: bool flgn = ((WORD)(dst)) < 0;
157: regs.z = ((WORD)(dst)) == 0;
158: regs.v = (flgs != flgo) && (flgn != flgo);
159: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
160: regs.n = flgn != 0;
161: put_word(srca,dst);
162: }}}}}
163: void op_4058(UWORD opcode)
164: {
165: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
166: {{ CPTR srca = regs.a[srcreg];
167: WORD src = get_word(srca);
168: { regs.a[srcreg] += 2;
169: { ULONG dst = -src-regs.x;
170: { bool flgs = ((WORD)(src)) < 0;
171: bool flgo = ((WORD)(0)) < 0;
172: bool flgn = ((WORD)(dst)) < 0;
173: regs.z = ((WORD)(dst)) == 0;
174: regs.v = (flgs != flgo) && (flgn != flgo);
175: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
176: regs.n = flgn != 0;
177: put_word(srca,dst);
178: }}}}}}
179: void op_4060(UWORD opcode)
180: {
181: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
182: {{ regs.a[srcreg] -= 2;
183: { CPTR srca = regs.a[srcreg];
184: WORD src = get_word(srca);
185: { ULONG dst = -src-regs.x;
186: { bool flgs = ((WORD)(src)) < 0;
187: bool flgo = ((WORD)(0)) < 0;
188: bool flgn = ((WORD)(dst)) < 0;
189: regs.z = ((WORD)(dst)) == 0;
190: regs.v = (flgs != flgo) && (flgn != flgo);
191: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
192: regs.n = flgn != 0;
193: put_word(srca,dst);
194: }}}}}}
195: void op_4068(UWORD opcode)
196: {
197: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
198: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
199: WORD src = get_word(srca);
200: { ULONG dst = -src-regs.x;
201: { bool flgs = ((WORD)(src)) < 0;
202: bool flgo = ((WORD)(0)) < 0;
203: bool flgn = ((WORD)(dst)) < 0;
204: regs.z = ((WORD)(dst)) == 0;
205: regs.v = (flgs != flgo) && (flgn != flgo);
206: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
207: regs.n = flgn != 0;
208: put_word(srca,dst);
209: }}}}}
210: void op_4070(UWORD opcode)
211: {
212: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
213: {{ CPTR srca = regs.a[srcreg];
214: UWORD srcdp = nextiword();
215: srca += (LONG)(BYTE)(srcdp & 0xFF);
216: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
217: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
218: srca += srcdpr;
219: { WORD src = get_word(srca);
220: { ULONG dst = -src-regs.x;
221: { bool flgs = ((WORD)(src)) < 0;
222: bool flgo = ((WORD)(0)) < 0;
223: bool flgn = ((WORD)(dst)) < 0;
224: regs.z = ((WORD)(dst)) == 0;
225: regs.v = (flgs != flgo) && (flgn != flgo);
226: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
227: regs.n = flgn != 0;
228: put_word(srca,dst);
229: }}}}}}}
230: void op_4078(UWORD opcode)
231: {
232: {{ CPTR srca = (LONG)(WORD)nextiword();
233: WORD src = get_word(srca);
234: { ULONG dst = -src-regs.x;
235: { bool flgs = ((WORD)(src)) < 0;
236: bool flgo = ((WORD)(0)) < 0;
237: bool flgn = ((WORD)(dst)) < 0;
238: regs.z = ((WORD)(dst)) == 0;
239: regs.v = (flgs != flgo) && (flgn != flgo);
240: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
241: regs.n = flgn != 0;
242: put_word(srca,dst);
243: }}}}}
244: void op_4079(UWORD opcode)
245: {
246: {{ CPTR srca = nextilong();
247: WORD src = get_word(srca);
248: { ULONG dst = -src-regs.x;
249: { bool flgs = ((WORD)(src)) < 0;
250: bool flgo = ((WORD)(0)) < 0;
251: bool flgn = ((WORD)(dst)) < 0;
252: regs.z = ((WORD)(dst)) == 0;
253: regs.v = (flgs != flgo) && (flgn != flgo);
254: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
255: regs.n = flgn != 0;
256: put_word(srca,dst);
257: }}}}}
258: void op_4080(UWORD opcode)
259: {
260: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
261: {{ LONG src = regs.d[srcreg];
262: { ULONG dst = -src-regs.x;
263: { bool flgs = ((LONG)(src)) < 0;
264: bool flgo = ((LONG)(0)) < 0;
265: bool flgn = ((LONG)(dst)) < 0;
266: regs.z = ((LONG)(dst)) == 0;
267: regs.v = (flgs != flgo) && (flgn != flgo);
268: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
269: regs.n = flgn != 0;
270: regs.d[srcreg] = (dst);
271: }}}}}
272: void op_4090(UWORD opcode)
273: {
274: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
275: {{ CPTR srca = regs.a[srcreg];
276: LONG src = get_long(srca);
277: { ULONG dst = -src-regs.x;
278: { bool flgs = ((LONG)(src)) < 0;
279: bool flgo = ((LONG)(0)) < 0;
280: bool flgn = ((LONG)(dst)) < 0;
281: regs.z = ((LONG)(dst)) == 0;
282: regs.v = (flgs != flgo) && (flgn != flgo);
283: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
284: regs.n = flgn != 0;
285: put_long(srca,dst);
286: }}}}}
287: void op_4098(UWORD opcode)
288: {
289: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
290: {{ CPTR srca = regs.a[srcreg];
291: LONG src = get_long(srca);
292: { regs.a[srcreg] += 4;
293: { ULONG dst = -src-regs.x;
294: { bool flgs = ((LONG)(src)) < 0;
295: bool flgo = ((LONG)(0)) < 0;
296: bool flgn = ((LONG)(dst)) < 0;
297: regs.z = ((LONG)(dst)) == 0;
298: regs.v = (flgs != flgo) && (flgn != flgo);
299: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
300: regs.n = flgn != 0;
301: put_long(srca,dst);
302: }}}}}}
303: void op_40a0(UWORD opcode)
304: {
305: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
306: {{ regs.a[srcreg] -= 4;
307: { CPTR srca = regs.a[srcreg];
308: LONG src = get_long(srca);
309: { ULONG dst = -src-regs.x;
310: { bool flgs = ((LONG)(src)) < 0;
311: bool flgo = ((LONG)(0)) < 0;
312: bool flgn = ((LONG)(dst)) < 0;
313: regs.z = ((LONG)(dst)) == 0;
314: regs.v = (flgs != flgo) && (flgn != flgo);
315: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
316: regs.n = flgn != 0;
317: put_long(srca,dst);
318: }}}}}}
319: void op_40a8(UWORD opcode)
320: {
321: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
322: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
323: LONG src = get_long(srca);
324: { ULONG dst = -src-regs.x;
325: { bool flgs = ((LONG)(src)) < 0;
326: bool flgo = ((LONG)(0)) < 0;
327: bool flgn = ((LONG)(dst)) < 0;
328: regs.z = ((LONG)(dst)) == 0;
329: regs.v = (flgs != flgo) && (flgn != flgo);
330: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
331: regs.n = flgn != 0;
332: put_long(srca,dst);
333: }}}}}
334: void op_40b0(UWORD opcode)
335: {
336: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
337: {{ CPTR srca = regs.a[srcreg];
338: UWORD srcdp = nextiword();
339: srca += (LONG)(BYTE)(srcdp & 0xFF);
340: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
341: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
342: srca += srcdpr;
343: { LONG src = get_long(srca);
344: { ULONG dst = -src-regs.x;
345: { bool flgs = ((LONG)(src)) < 0;
346: bool flgo = ((LONG)(0)) < 0;
347: bool flgn = ((LONG)(dst)) < 0;
348: regs.z = ((LONG)(dst)) == 0;
349: regs.v = (flgs != flgo) && (flgn != flgo);
350: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
351: regs.n = flgn != 0;
352: put_long(srca,dst);
353: }}}}}}}
354: void op_40b8(UWORD opcode)
355: {
356: {{ CPTR srca = (LONG)(WORD)nextiword();
357: LONG src = get_long(srca);
358: { ULONG dst = -src-regs.x;
359: { bool flgs = ((LONG)(src)) < 0;
360: bool flgo = ((LONG)(0)) < 0;
361: bool flgn = ((LONG)(dst)) < 0;
362: regs.z = ((LONG)(dst)) == 0;
363: regs.v = (flgs != flgo) && (flgn != flgo);
364: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
365: regs.n = flgn != 0;
366: put_long(srca,dst);
367: }}}}}
368: void op_40b9(UWORD opcode)
369: {
370: {{ CPTR srca = nextilong();
371: LONG src = get_long(srca);
372: { ULONG dst = -src-regs.x;
373: { bool flgs = ((LONG)(src)) < 0;
374: bool flgo = ((LONG)(0)) < 0;
375: bool flgn = ((LONG)(dst)) < 0;
376: regs.z = ((LONG)(dst)) == 0;
377: regs.v = (flgs != flgo) && (flgn != flgo);
378: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
379: regs.n = flgn != 0;
380: put_long(srca,dst);
381: }}}}}
382: void op_40c0(UWORD opcode)
383: {
384: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
385: {{ MakeSR();
386: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (regs.sr) & 0xffff;
387: }}}
388: void op_40d0(UWORD opcode)
389: {
390: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
391: {{ CPTR srca = regs.a[srcreg];
392: MakeSR();
393: put_word(srca,regs.sr);
394: }}}
395: void op_40d8(UWORD opcode)
396: {
397: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
398: {{ CPTR srca = regs.a[srcreg];
399: { regs.a[srcreg] += 2;
400: MakeSR();
401: put_word(srca,regs.sr);
402: }}}}
403: void op_40e0(UWORD opcode)
404: {
405: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
406: {{ regs.a[srcreg] -= 2;
407: { CPTR srca = regs.a[srcreg];
408: MakeSR();
409: put_word(srca,regs.sr);
410: }}}}
411: void op_40e8(UWORD opcode)
412: {
413: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
414: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
415: MakeSR();
416: put_word(srca,regs.sr);
417: }}}
418: void op_40f0(UWORD opcode)
419: {
420: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
421: {{ CPTR srca = regs.a[srcreg];
422: UWORD srcdp = nextiword();
423: srca += (LONG)(BYTE)(srcdp & 0xFF);
424: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
425: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
426: srca += srcdpr;
427: MakeSR();
428: put_word(srca,regs.sr);
429: }}}}
430: void op_40f8(UWORD opcode)
431: {
432: {{ CPTR srca = (LONG)(WORD)nextiword();
433: MakeSR();
434: put_word(srca,regs.sr);
435: }}}
436: void op_40f9(UWORD opcode)
437: {
438: {{ CPTR srca = nextilong();
439: MakeSR();
440: put_word(srca,regs.sr);
441: }}}
442: void op_41d0(UWORD opcode)
443: {
444: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
445: ULONG dstreg = (opcode & 3584) >> 9;
446: {{ CPTR srca = regs.a[srcreg];
447: { regs.a[dstreg] = (srca);
448: }}}}
449: void op_41d8(UWORD opcode)
450: {
451: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
452: ULONG dstreg = (opcode & 3584) >> 9;
453: {{ CPTR srca = regs.a[srcreg];
454: { regs.a[srcreg] += 4;
455: { regs.a[dstreg] = (srca);
456: }}}}}
457: void op_41e0(UWORD opcode)
458: {
459: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
460: ULONG dstreg = (opcode & 3584) >> 9;
461: {{ regs.a[srcreg] -= 4;
462: { CPTR srca = regs.a[srcreg];
463: { regs.a[dstreg] = (srca);
464: }}}}}
465: void op_41e8(UWORD opcode)
466: {
467: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
468: ULONG dstreg = (opcode & 3584) >> 9;
469: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
470: { regs.a[dstreg] = (srca);
471: }}}}
472: void op_41f0(UWORD opcode)
473: {
474: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
475: ULONG dstreg = (opcode & 3584) >> 9;
476: {{ CPTR srca = regs.a[srcreg];
477: UWORD srcdp = nextiword();
478: srca += (LONG)(BYTE)(srcdp & 0xFF);
479: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
480: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
481: srca += srcdpr;
482: { regs.a[dstreg] = (srca);
483: }}}}}
484: void op_41f8(UWORD opcode)
485: {
486: ULONG dstreg = (opcode & 3584) >> 9;
487: {{ CPTR srca = (LONG)(WORD)nextiword();
488: { regs.a[dstreg] = (srca);
489: }}}}
490: void op_41f9(UWORD opcode)
491: {
492: ULONG dstreg = (opcode & 3584) >> 9;
493: {{ CPTR srca = nextilong();
494: { regs.a[dstreg] = (srca);
495: }}}}
496: void op_41fa(UWORD opcode)
497: {
498: ULONG dstreg = (opcode & 3584) >> 9;
499: {{ CPTR srca = m68k_getpc();
500: srca += (LONG)(WORD)nextiword();
501: { regs.a[dstreg] = (srca);
502: }}}}
503: void op_41fb(UWORD opcode)
504: {
505: ULONG dstreg = (opcode & 3584) >> 9;
506: {{ CPTR srca = m68k_getpc();
507: UWORD srcdp = nextiword();
508: srca += (LONG)(BYTE)(srcdp & 0xFF);
509: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
510: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
511: srca += srcdpr;
512: { regs.a[dstreg] = (srca);
513: }}}}}
514: void op_4200(UWORD opcode)
515: {
516: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
517: {{ regs.v = regs.c = 0;
518: regs.z = ((BYTE)(0)) == 0;
519: regs.n = ((BYTE)(0)) < 0;
520: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (0) & 0xff;
521: }}}
522: void op_4210(UWORD opcode)
523: {
524: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
525: {{ CPTR srca = regs.a[srcreg];
526: regs.v = regs.c = 0;
527: regs.z = ((BYTE)(0)) == 0;
528: regs.n = ((BYTE)(0)) < 0;
529: put_byte(srca,0);
530: }}}
531: void op_4218(UWORD opcode)
532: {
533: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
534: {{ CPTR srca = regs.a[srcreg];
535: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
536: regs.v = regs.c = 0;
537: regs.z = ((BYTE)(0)) == 0;
538: regs.n = ((BYTE)(0)) < 0;
539: put_byte(srca,0);
540: }}}}
541: void op_4220(UWORD opcode)
542: {
543: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
544: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
545: { CPTR srca = regs.a[srcreg];
546: regs.v = regs.c = 0;
547: regs.z = ((BYTE)(0)) == 0;
548: regs.n = ((BYTE)(0)) < 0;
549: put_byte(srca,0);
550: }}}}
551: void op_4228(UWORD opcode)
552: {
553: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
554: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
555: regs.v = regs.c = 0;
556: regs.z = ((BYTE)(0)) == 0;
557: regs.n = ((BYTE)(0)) < 0;
558: put_byte(srca,0);
559: }}}
560: void op_4230(UWORD opcode)
561: {
562: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
563: {{ CPTR srca = regs.a[srcreg];
564: UWORD srcdp = nextiword();
565: srca += (LONG)(BYTE)(srcdp & 0xFF);
566: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
567: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
568: srca += srcdpr;
569: regs.v = regs.c = 0;
570: regs.z = ((BYTE)(0)) == 0;
571: regs.n = ((BYTE)(0)) < 0;
572: put_byte(srca,0);
573: }}}}
574: void op_4238(UWORD opcode)
575: {
576: {{ CPTR srca = (LONG)(WORD)nextiword();
577: regs.v = regs.c = 0;
578: regs.z = ((BYTE)(0)) == 0;
579: regs.n = ((BYTE)(0)) < 0;
580: put_byte(srca,0);
581: }}}
582: void op_4239(UWORD opcode)
583: {
584: {{ CPTR srca = nextilong();
585: regs.v = regs.c = 0;
586: regs.z = ((BYTE)(0)) == 0;
587: regs.n = ((BYTE)(0)) < 0;
588: put_byte(srca,0);
589: }}}
590: void op_4240(UWORD opcode)
591: {
592: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
593: {{ regs.v = regs.c = 0;
594: regs.z = ((WORD)(0)) == 0;
595: regs.n = ((WORD)(0)) < 0;
596: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (0) & 0xffff;
597: }}}
598: void op_4250(UWORD opcode)
599: {
600: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
601: {{ CPTR srca = regs.a[srcreg];
602: regs.v = regs.c = 0;
603: regs.z = ((WORD)(0)) == 0;
604: regs.n = ((WORD)(0)) < 0;
605: put_word(srca,0);
606: }}}
607: void op_4258(UWORD opcode)
608: {
609: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
610: {{ CPTR srca = regs.a[srcreg];
611: { regs.a[srcreg] += 2;
612: regs.v = regs.c = 0;
613: regs.z = ((WORD)(0)) == 0;
614: regs.n = ((WORD)(0)) < 0;
615: put_word(srca,0);
616: }}}}
617: void op_4260(UWORD opcode)
618: {
619: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
620: {{ regs.a[srcreg] -= 2;
621: { CPTR srca = regs.a[srcreg];
622: regs.v = regs.c = 0;
623: regs.z = ((WORD)(0)) == 0;
624: regs.n = ((WORD)(0)) < 0;
625: put_word(srca,0);
626: }}}}
627: void op_4268(UWORD opcode)
628: {
629: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
630: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
631: regs.v = regs.c = 0;
632: regs.z = ((WORD)(0)) == 0;
633: regs.n = ((WORD)(0)) < 0;
634: put_word(srca,0);
635: }}}
636: void op_4270(UWORD opcode)
637: {
638: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
639: {{ CPTR srca = regs.a[srcreg];
640: UWORD srcdp = nextiword();
641: srca += (LONG)(BYTE)(srcdp & 0xFF);
642: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
643: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
644: srca += srcdpr;
645: regs.v = regs.c = 0;
646: regs.z = ((WORD)(0)) == 0;
647: regs.n = ((WORD)(0)) < 0;
648: put_word(srca,0);
649: }}}}
650: void op_4278(UWORD opcode)
651: {
652: {{ CPTR srca = (LONG)(WORD)nextiword();
653: regs.v = regs.c = 0;
654: regs.z = ((WORD)(0)) == 0;
655: regs.n = ((WORD)(0)) < 0;
656: put_word(srca,0);
657: }}}
658: void op_4279(UWORD opcode)
659: {
660: {{ CPTR srca = nextilong();
661: regs.v = regs.c = 0;
662: regs.z = ((WORD)(0)) == 0;
663: regs.n = ((WORD)(0)) < 0;
664: put_word(srca,0);
665: }}}
666: void op_4280(UWORD opcode)
667: {
668: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
669: {{ regs.v = regs.c = 0;
670: regs.z = ((LONG)(0)) == 0;
671: regs.n = ((LONG)(0)) < 0;
672: regs.d[srcreg] = (0);
673: }}}
674: void op_4290(UWORD opcode)
675: {
676: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
677: {{ CPTR srca = regs.a[srcreg];
678: regs.v = regs.c = 0;
679: regs.z = ((LONG)(0)) == 0;
680: regs.n = ((LONG)(0)) < 0;
681: put_long(srca,0);
682: }}}
683: void op_4298(UWORD opcode)
684: {
685: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
686: {{ CPTR srca = regs.a[srcreg];
687: { regs.a[srcreg] += 4;
688: regs.v = regs.c = 0;
689: regs.z = ((LONG)(0)) == 0;
690: regs.n = ((LONG)(0)) < 0;
691: put_long(srca,0);
692: }}}}
693: void op_42a0(UWORD opcode)
694: {
695: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
696: {{ regs.a[srcreg] -= 4;
697: { CPTR srca = regs.a[srcreg];
698: regs.v = regs.c = 0;
699: regs.z = ((LONG)(0)) == 0;
700: regs.n = ((LONG)(0)) < 0;
701: put_long(srca,0);
702: }}}}
703: void op_42a8(UWORD opcode)
704: {
705: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
706: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
707: regs.v = regs.c = 0;
708: regs.z = ((LONG)(0)) == 0;
709: regs.n = ((LONG)(0)) < 0;
710: put_long(srca,0);
711: }}}
712: void op_42b0(UWORD opcode)
713: {
714: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
715: {{ CPTR srca = regs.a[srcreg];
716: UWORD srcdp = nextiword();
717: srca += (LONG)(BYTE)(srcdp & 0xFF);
718: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
719: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
720: srca += srcdpr;
721: regs.v = regs.c = 0;
722: regs.z = ((LONG)(0)) == 0;
723: regs.n = ((LONG)(0)) < 0;
724: put_long(srca,0);
725: }}}}
726: void op_42b8(UWORD opcode)
727: {
728: {{ CPTR srca = (LONG)(WORD)nextiword();
729: regs.v = regs.c = 0;
730: regs.z = ((LONG)(0)) == 0;
731: regs.n = ((LONG)(0)) < 0;
732: put_long(srca,0);
733: }}}
734: void op_42b9(UWORD opcode)
735: {
736: {{ CPTR srca = nextilong();
737: regs.v = regs.c = 0;
738: regs.z = ((LONG)(0)) == 0;
739: regs.n = ((LONG)(0)) < 0;
740: put_long(srca,0);
741: }}}
742: void op_42c0(UWORD opcode)
743: {
744: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
745: {{ MakeSR();
746: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (regs.sr) & 0xff;
747: }}}
748: void op_42d0(UWORD opcode)
749: {
750: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
751: {{ CPTR srca = regs.a[srcreg];
752: MakeSR();
753: put_byte(srca,regs.sr);
754: }}}
755: void op_42d8(UWORD opcode)
756: {
757: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
758: {{ CPTR srca = regs.a[srcreg];
759: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
760: MakeSR();
761: put_byte(srca,regs.sr);
762: }}}}
763: void op_42e0(UWORD opcode)
764: {
765: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
766: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
767: { CPTR srca = regs.a[srcreg];
768: MakeSR();
769: put_byte(srca,regs.sr);
770: }}}}
771: void op_42e8(UWORD opcode)
772: {
773: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
774: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
775: MakeSR();
776: put_byte(srca,regs.sr);
777: }}}
778: void op_42f0(UWORD opcode)
779: {
780: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
781: {{ CPTR srca = regs.a[srcreg];
782: UWORD srcdp = nextiword();
783: srca += (LONG)(BYTE)(srcdp & 0xFF);
784: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
785: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
786: srca += srcdpr;
787: MakeSR();
788: put_byte(srca,regs.sr);
789: }}}}
790: void op_42f8(UWORD opcode)
791: {
792: {{ CPTR srca = (LONG)(WORD)nextiword();
793: MakeSR();
794: put_byte(srca,regs.sr);
795: }}}
796: void op_42f9(UWORD opcode)
797: {
798: {{ CPTR srca = nextilong();
799: MakeSR();
800: put_byte(srca,regs.sr);
801: }}}
802: void op_4400(UWORD opcode)
803: {
804: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
805: {{ BYTE src = regs.d[srcreg];
806: { ULONG dst = -src;
807: { bool flgs = ((BYTE)(src)) < 0;
808: bool flgo = ((BYTE)(0)) < 0;
809: bool flgn = ((BYTE)(dst)) < 0;
810: regs.z = ((BYTE)(dst)) == 0;
811: regs.v = (flgs != flgo) && (flgn != flgo);
812: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
813: regs.n = flgn != 0;
814: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (dst) & 0xff;
815: }}}}}
816: void op_4410(UWORD opcode)
817: {
818: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
819: {{ CPTR srca = regs.a[srcreg];
820: BYTE src = get_byte(srca);
821: { ULONG dst = -src;
822: { bool flgs = ((BYTE)(src)) < 0;
823: bool flgo = ((BYTE)(0)) < 0;
824: bool flgn = ((BYTE)(dst)) < 0;
825: regs.z = ((BYTE)(dst)) == 0;
826: regs.v = (flgs != flgo) && (flgn != flgo);
827: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
828: regs.n = flgn != 0;
829: put_byte(srca,dst);
830: }}}}}
831: void op_4418(UWORD opcode)
832: {
833: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
834: {{ CPTR srca = regs.a[srcreg];
835: BYTE src = get_byte(srca);
836: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
837: { ULONG dst = -src;
838: { bool flgs = ((BYTE)(src)) < 0;
839: bool flgo = ((BYTE)(0)) < 0;
840: bool flgn = ((BYTE)(dst)) < 0;
841: regs.z = ((BYTE)(dst)) == 0;
842: regs.v = (flgs != flgo) && (flgn != flgo);
843: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
844: regs.n = flgn != 0;
845: put_byte(srca,dst);
846: }}}}}}
847: void op_4420(UWORD opcode)
848: {
849: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
850: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
851: { CPTR srca = regs.a[srcreg];
852: BYTE src = get_byte(srca);
853: { ULONG dst = -src;
854: { bool flgs = ((BYTE)(src)) < 0;
855: bool flgo = ((BYTE)(0)) < 0;
856: bool flgn = ((BYTE)(dst)) < 0;
857: regs.z = ((BYTE)(dst)) == 0;
858: regs.v = (flgs != flgo) && (flgn != flgo);
859: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
860: regs.n = flgn != 0;
861: put_byte(srca,dst);
862: }}}}}}
863: void op_4428(UWORD opcode)
864: {
865: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
866: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
867: BYTE src = get_byte(srca);
868: { ULONG dst = -src;
869: { bool flgs = ((BYTE)(src)) < 0;
870: bool flgo = ((BYTE)(0)) < 0;
871: bool flgn = ((BYTE)(dst)) < 0;
872: regs.z = ((BYTE)(dst)) == 0;
873: regs.v = (flgs != flgo) && (flgn != flgo);
874: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
875: regs.n = flgn != 0;
876: put_byte(srca,dst);
877: }}}}}
878: void op_4430(UWORD opcode)
879: {
880: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
881: {{ CPTR srca = regs.a[srcreg];
882: UWORD srcdp = nextiword();
883: srca += (LONG)(BYTE)(srcdp & 0xFF);
884: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
885: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
886: srca += srcdpr;
887: { BYTE src = get_byte(srca);
888: { ULONG dst = -src;
889: { bool flgs = ((BYTE)(src)) < 0;
890: bool flgo = ((BYTE)(0)) < 0;
891: bool flgn = ((BYTE)(dst)) < 0;
892: regs.z = ((BYTE)(dst)) == 0;
893: regs.v = (flgs != flgo) && (flgn != flgo);
894: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
895: regs.n = flgn != 0;
896: put_byte(srca,dst);
897: }}}}}}}
898: void op_4438(UWORD opcode)
899: {
900: {{ CPTR srca = (LONG)(WORD)nextiword();
901: BYTE src = get_byte(srca);
902: { ULONG dst = -src;
903: { bool flgs = ((BYTE)(src)) < 0;
904: bool flgo = ((BYTE)(0)) < 0;
905: bool flgn = ((BYTE)(dst)) < 0;
906: regs.z = ((BYTE)(dst)) == 0;
907: regs.v = (flgs != flgo) && (flgn != flgo);
908: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
909: regs.n = flgn != 0;
910: put_byte(srca,dst);
911: }}}}}
912: void op_4439(UWORD opcode)
913: {
914: {{ CPTR srca = nextilong();
915: BYTE src = get_byte(srca);
916: { ULONG dst = -src;
917: { bool flgs = ((BYTE)(src)) < 0;
918: bool flgo = ((BYTE)(0)) < 0;
919: bool flgn = ((BYTE)(dst)) < 0;
920: regs.z = ((BYTE)(dst)) == 0;
921: regs.v = (flgs != flgo) && (flgn != flgo);
922: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(0));
923: regs.n = flgn != 0;
924: put_byte(srca,dst);
925: }}}}}
926: void op_4440(UWORD opcode)
927: {
928: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
929: {{ WORD src = regs.d[srcreg];
930: { ULONG dst = -src;
931: { bool flgs = ((WORD)(src)) < 0;
932: bool flgo = ((WORD)(0)) < 0;
933: bool flgn = ((WORD)(dst)) < 0;
934: regs.z = ((WORD)(dst)) == 0;
935: regs.v = (flgs != flgo) && (flgn != flgo);
936: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
937: regs.n = flgn != 0;
938: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (dst) & 0xffff;
939: }}}}}
940: void op_4450(UWORD opcode)
941: {
942: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
943: {{ CPTR srca = regs.a[srcreg];
944: WORD src = get_word(srca);
945: { ULONG dst = -src;
946: { bool flgs = ((WORD)(src)) < 0;
947: bool flgo = ((WORD)(0)) < 0;
948: bool flgn = ((WORD)(dst)) < 0;
949: regs.z = ((WORD)(dst)) == 0;
950: regs.v = (flgs != flgo) && (flgn != flgo);
951: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
952: regs.n = flgn != 0;
953: put_word(srca,dst);
954: }}}}}
955: void op_4458(UWORD opcode)
956: {
957: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
958: {{ CPTR srca = regs.a[srcreg];
959: WORD src = get_word(srca);
960: { regs.a[srcreg] += 2;
961: { ULONG dst = -src;
962: { bool flgs = ((WORD)(src)) < 0;
963: bool flgo = ((WORD)(0)) < 0;
964: bool flgn = ((WORD)(dst)) < 0;
965: regs.z = ((WORD)(dst)) == 0;
966: regs.v = (flgs != flgo) && (flgn != flgo);
967: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
968: regs.n = flgn != 0;
969: put_word(srca,dst);
970: }}}}}}
971: void op_4460(UWORD opcode)
972: {
973: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
974: {{ regs.a[srcreg] -= 2;
975: { CPTR srca = regs.a[srcreg];
976: WORD src = get_word(srca);
977: { ULONG dst = -src;
978: { bool flgs = ((WORD)(src)) < 0;
979: bool flgo = ((WORD)(0)) < 0;
980: bool flgn = ((WORD)(dst)) < 0;
981: regs.z = ((WORD)(dst)) == 0;
982: regs.v = (flgs != flgo) && (flgn != flgo);
983: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
984: regs.n = flgn != 0;
985: put_word(srca,dst);
986: }}}}}}
987: void op_4468(UWORD opcode)
988: {
989: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
990: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
991: WORD src = get_word(srca);
992: { ULONG dst = -src;
993: { bool flgs = ((WORD)(src)) < 0;
994: bool flgo = ((WORD)(0)) < 0;
995: bool flgn = ((WORD)(dst)) < 0;
996: regs.z = ((WORD)(dst)) == 0;
997: regs.v = (flgs != flgo) && (flgn != flgo);
998: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
999: regs.n = flgn != 0;
1000: put_word(srca,dst);
1001: }}}}}
1002: void op_4470(UWORD opcode)
1003: {
1004: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1005: {{ CPTR srca = regs.a[srcreg];
1006: UWORD srcdp = nextiword();
1007: srca += (LONG)(BYTE)(srcdp & 0xFF);
1008: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1009: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1010: srca += srcdpr;
1011: { WORD src = get_word(srca);
1012: { ULONG dst = -src;
1013: { bool flgs = ((WORD)(src)) < 0;
1014: bool flgo = ((WORD)(0)) < 0;
1015: bool flgn = ((WORD)(dst)) < 0;
1016: regs.z = ((WORD)(dst)) == 0;
1017: regs.v = (flgs != flgo) && (flgn != flgo);
1018: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
1019: regs.n = flgn != 0;
1020: put_word(srca,dst);
1021: }}}}}}}
1022: void op_4478(UWORD opcode)
1023: {
1024: {{ CPTR srca = (LONG)(WORD)nextiword();
1025: WORD src = get_word(srca);
1026: { ULONG dst = -src;
1027: { bool flgs = ((WORD)(src)) < 0;
1028: bool flgo = ((WORD)(0)) < 0;
1029: bool flgn = ((WORD)(dst)) < 0;
1030: regs.z = ((WORD)(dst)) == 0;
1031: regs.v = (flgs != flgo) && (flgn != flgo);
1032: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
1033: regs.n = flgn != 0;
1034: put_word(srca,dst);
1035: }}}}}
1036: void op_4479(UWORD opcode)
1037: {
1038: {{ CPTR srca = nextilong();
1039: WORD src = get_word(srca);
1040: { ULONG dst = -src;
1041: { bool flgs = ((WORD)(src)) < 0;
1042: bool flgo = ((WORD)(0)) < 0;
1043: bool flgn = ((WORD)(dst)) < 0;
1044: regs.z = ((WORD)(dst)) == 0;
1045: regs.v = (flgs != flgo) && (flgn != flgo);
1046: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(0));
1047: regs.n = flgn != 0;
1048: put_word(srca,dst);
1049: }}}}}
1050: void op_4480(UWORD opcode)
1051: {
1052: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1053: {{ LONG src = regs.d[srcreg];
1054: { ULONG dst = -src;
1055: { bool flgs = ((LONG)(src)) < 0;
1056: bool flgo = ((LONG)(0)) < 0;
1057: bool flgn = ((LONG)(dst)) < 0;
1058: regs.z = ((LONG)(dst)) == 0;
1059: regs.v = (flgs != flgo) && (flgn != flgo);
1060: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
1061: regs.n = flgn != 0;
1062: regs.d[srcreg] = (dst);
1063: }}}}}
1064: void op_4490(UWORD opcode)
1065: {
1066: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1067: {{ CPTR srca = regs.a[srcreg];
1068: LONG src = get_long(srca);
1069: { ULONG dst = -src;
1070: { bool flgs = ((LONG)(src)) < 0;
1071: bool flgo = ((LONG)(0)) < 0;
1072: bool flgn = ((LONG)(dst)) < 0;
1073: regs.z = ((LONG)(dst)) == 0;
1074: regs.v = (flgs != flgo) && (flgn != flgo);
1075: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
1076: regs.n = flgn != 0;
1077: put_long(srca,dst);
1078: }}}}}
1079: void op_4498(UWORD opcode)
1080: {
1081: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1082: {{ CPTR srca = regs.a[srcreg];
1083: LONG src = get_long(srca);
1084: { regs.a[srcreg] += 4;
1085: { ULONG dst = -src;
1086: { bool flgs = ((LONG)(src)) < 0;
1087: bool flgo = ((LONG)(0)) < 0;
1088: bool flgn = ((LONG)(dst)) < 0;
1089: regs.z = ((LONG)(dst)) == 0;
1090: regs.v = (flgs != flgo) && (flgn != flgo);
1091: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
1092: regs.n = flgn != 0;
1093: put_long(srca,dst);
1094: }}}}}}
1095: void op_44a0(UWORD opcode)
1096: {
1097: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1098: {{ regs.a[srcreg] -= 4;
1099: { CPTR srca = regs.a[srcreg];
1100: LONG src = get_long(srca);
1101: { ULONG dst = -src;
1102: { bool flgs = ((LONG)(src)) < 0;
1103: bool flgo = ((LONG)(0)) < 0;
1104: bool flgn = ((LONG)(dst)) < 0;
1105: regs.z = ((LONG)(dst)) == 0;
1106: regs.v = (flgs != flgo) && (flgn != flgo);
1107: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
1108: regs.n = flgn != 0;
1109: put_long(srca,dst);
1110: }}}}}}
1111: void op_44a8(UWORD opcode)
1112: {
1113: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1114: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1115: LONG src = get_long(srca);
1116: { ULONG dst = -src;
1117: { bool flgs = ((LONG)(src)) < 0;
1118: bool flgo = ((LONG)(0)) < 0;
1119: bool flgn = ((LONG)(dst)) < 0;
1120: regs.z = ((LONG)(dst)) == 0;
1121: regs.v = (flgs != flgo) && (flgn != flgo);
1122: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
1123: regs.n = flgn != 0;
1124: put_long(srca,dst);
1125: }}}}}
1126: void op_44b0(UWORD opcode)
1127: {
1128: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1129: {{ CPTR srca = regs.a[srcreg];
1130: UWORD srcdp = nextiword();
1131: srca += (LONG)(BYTE)(srcdp & 0xFF);
1132: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1133: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1134: srca += srcdpr;
1135: { LONG src = get_long(srca);
1136: { ULONG dst = -src;
1137: { bool flgs = ((LONG)(src)) < 0;
1138: bool flgo = ((LONG)(0)) < 0;
1139: bool flgn = ((LONG)(dst)) < 0;
1140: regs.z = ((LONG)(dst)) == 0;
1141: regs.v = (flgs != flgo) && (flgn != flgo);
1142: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
1143: regs.n = flgn != 0;
1144: put_long(srca,dst);
1145: }}}}}}}
1146: void op_44b8(UWORD opcode)
1147: {
1148: {{ CPTR srca = (LONG)(WORD)nextiword();
1149: LONG src = get_long(srca);
1150: { ULONG dst = -src;
1151: { bool flgs = ((LONG)(src)) < 0;
1152: bool flgo = ((LONG)(0)) < 0;
1153: bool flgn = ((LONG)(dst)) < 0;
1154: regs.z = ((LONG)(dst)) == 0;
1155: regs.v = (flgs != flgo) && (flgn != flgo);
1156: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
1157: regs.n = flgn != 0;
1158: put_long(srca,dst);
1159: }}}}}
1160: void op_44b9(UWORD opcode)
1161: {
1162: {{ CPTR srca = nextilong();
1163: LONG src = get_long(srca);
1164: { ULONG dst = -src;
1165: { bool flgs = ((LONG)(src)) < 0;
1166: bool flgo = ((LONG)(0)) < 0;
1167: bool flgn = ((LONG)(dst)) < 0;
1168: regs.z = ((LONG)(dst)) == 0;
1169: regs.v = (flgs != flgo) && (flgn != flgo);
1170: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(0));
1171: regs.n = flgn != 0;
1172: put_long(srca,dst);
1173: }}}}}
1174: void op_44c0(UWORD opcode)
1175: { ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1176: {{{ BYTE src = regs.d[srcreg];
1177: MakeSR();
1178: regs.sr &= 0xFF00;
1179: regs.sr |= src & 0xFF;
1180: MakeFromSR();
1181:
1182: }}}}
1183: void op_44d0(UWORD opcode)
1184: {
1185: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1186: {{{ CPTR srca = regs.a[srcreg];
1187: BYTE src = get_byte(srca);
1188: MakeSR();
1189: regs.sr &= 0xFF00;
1190: regs.sr |= src & 0xFF;
1191: MakeFromSR();
1192: }}}}
1193: void op_44d8(UWORD opcode)
1194: {
1195: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1196: {{{ CPTR srca = regs.a[srcreg];
1197: BYTE src = get_byte(srca);
1198: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
1199: MakeSR();
1200: regs.sr &= 0xFF00;
1201: regs.sr |= src & 0xFF;
1202: MakeFromSR();
1203: }}}}}
1204: void op_44e0(UWORD opcode)
1205: {
1206: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1207: {{{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
1208: { CPTR srca = regs.a[srcreg];
1209: BYTE src = get_byte(srca);
1210: MakeSR();
1211: regs.sr &= 0xFF00;
1212: regs.sr |= src & 0xFF;
1213: MakeFromSR();
1214: }}}}}
1215: void op_44e8(UWORD opcode)
1216: {
1217: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1218: {{{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1219: BYTE src = get_byte(srca);
1220: MakeSR();
1221: regs.sr &= 0xFF00;
1222: regs.sr |= src & 0xFF;
1223: MakeFromSR();
1224: }}}}
1225: void op_44f0(UWORD opcode)
1226: {
1227: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1228: {{{ CPTR srca = regs.a[srcreg];
1229: UWORD srcdp = nextiword();
1230: srca += (LONG)(BYTE)(srcdp & 0xFF);
1231: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1232: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1233: srca += srcdpr;
1234: { BYTE src = get_byte(srca);
1235: MakeSR();
1236: regs.sr &= 0xFF00;
1237: regs.sr |= src & 0xFF;
1238: MakeFromSR();
1239: }}}}}}
1240: void op_44f8(UWORD opcode)
1241: {
1242: {{{ CPTR srca = (LONG)(WORD)nextiword();
1243: BYTE src = get_byte(srca);
1244: MakeSR();
1245: regs.sr &= 0xFF00;
1246: regs.sr |= src & 0xFF;
1247: MakeFromSR();
1248: }}}}
1249: void op_44f9(UWORD opcode)
1250: {
1251: {{{ CPTR srca = nextilong();
1252: BYTE src = get_byte(srca);
1253: MakeSR();
1254: regs.sr &= 0xFF00;
1255: regs.sr |= src & 0xFF;
1256: MakeFromSR();
1257: }}}}
1258: void op_44fa(UWORD opcode)
1259: {
1260: {{{ CPTR srca = m68k_getpc();
1261: srca += (LONG)(WORD)nextiword();
1262: { BYTE src = get_byte(srca);
1263: MakeSR();
1264: regs.sr &= 0xFF00;
1265: regs.sr |= src & 0xFF;
1266: MakeFromSR();
1267: }}}}}
1268: void op_44fb(UWORD opcode)
1269: {
1270: {{{ CPTR srca = m68k_getpc();
1271: UWORD srcdp = nextiword();
1272: srca += (LONG)(BYTE)(srcdp & 0xFF);
1273: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1274: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1275: srca += srcdpr;
1276: { BYTE src = get_byte(srca);
1277: MakeSR();
1278: regs.sr &= 0xFF00;
1279: regs.sr |= src & 0xFF;
1280: MakeFromSR();
1281: }}}}}}
1282: void op_44fc(UWORD opcode)
1283: {
1284: {{{ BYTE src = nextiword();
1285: MakeSR();
1286: regs.sr &= 0xFF00;
1287: regs.sr |= src & 0xFF;
1288: MakeFromSR();
1289: }}}}
1290: void op_4600(UWORD opcode)
1291: {
1292: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1293: {{ BYTE src = regs.d[srcreg];
1294: { ULONG dst = ~src;
1295: regs.v = regs.c = 0;
1296: regs.z = ((BYTE)(dst)) == 0;
1297: regs.n = ((BYTE)(dst)) < 0;
1298: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (dst) & 0xff;
1299: }}}}
1300: void op_4610(UWORD opcode)
1301: {
1302: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1303: {{ CPTR srca = regs.a[srcreg];
1304: BYTE src = get_byte(srca);
1305: { ULONG dst = ~src;
1306: regs.v = regs.c = 0;
1307: regs.z = ((BYTE)(dst)) == 0;
1308: regs.n = ((BYTE)(dst)) < 0;
1309: put_byte(srca,dst);
1310: }}}}
1311: void op_4618(UWORD opcode)
1312: {
1313: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1314: {{ CPTR srca = regs.a[srcreg];
1315: BYTE src = get_byte(srca);
1316: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
1317: { ULONG dst = ~src;
1318: regs.v = regs.c = 0;
1319: regs.z = ((BYTE)(dst)) == 0;
1320: regs.n = ((BYTE)(dst)) < 0;
1321: put_byte(srca,dst);
1322: }}}}}
1323: void op_4620(UWORD opcode)
1324: {
1325: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1326: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
1327: { CPTR srca = regs.a[srcreg];
1328: BYTE src = get_byte(srca);
1329: { ULONG dst = ~src;
1330: regs.v = regs.c = 0;
1331: regs.z = ((BYTE)(dst)) == 0;
1332: regs.n = ((BYTE)(dst)) < 0;
1333: put_byte(srca,dst);
1334: }}}}}
1335: void op_4628(UWORD opcode)
1336: {
1337: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1338: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1339: BYTE src = get_byte(srca);
1340: { ULONG dst = ~src;
1341: regs.v = regs.c = 0;
1342: regs.z = ((BYTE)(dst)) == 0;
1343: regs.n = ((BYTE)(dst)) < 0;
1344: put_byte(srca,dst);
1345: }}}}
1346: void op_4630(UWORD opcode)
1347: {
1348: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1349: {{ CPTR srca = regs.a[srcreg];
1350: UWORD srcdp = nextiword();
1351: srca += (LONG)(BYTE)(srcdp & 0xFF);
1352: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1353: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1354: srca += srcdpr;
1355: { BYTE src = get_byte(srca);
1356: { ULONG dst = ~src;
1357: regs.v = regs.c = 0;
1358: regs.z = ((BYTE)(dst)) == 0;
1359: regs.n = ((BYTE)(dst)) < 0;
1360: put_byte(srca,dst);
1361: }}}}}}
1362: void op_4638(UWORD opcode)
1363: {
1364: {{ CPTR srca = (LONG)(WORD)nextiword();
1365: BYTE src = get_byte(srca);
1366: { ULONG dst = ~src;
1367: regs.v = regs.c = 0;
1368: regs.z = ((BYTE)(dst)) == 0;
1369: regs.n = ((BYTE)(dst)) < 0;
1370: put_byte(srca,dst);
1371: }}}}
1372: void op_4639(UWORD opcode)
1373: {
1374: {{ CPTR srca = nextilong();
1375: BYTE src = get_byte(srca);
1376: { ULONG dst = ~src;
1377: regs.v = regs.c = 0;
1378: regs.z = ((BYTE)(dst)) == 0;
1379: regs.n = ((BYTE)(dst)) < 0;
1380: put_byte(srca,dst);
1381: }}}}
1382: void op_4640(UWORD opcode)
1383: {
1384: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1385: {{ WORD src = regs.d[srcreg];
1386: { ULONG dst = ~src;
1387: regs.v = regs.c = 0;
1388: regs.z = ((WORD)(dst)) == 0;
1389: regs.n = ((WORD)(dst)) < 0;
1390: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (dst) & 0xffff;
1391: }}}}
1392: void op_4650(UWORD opcode)
1393: {
1394: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1395: {{ CPTR srca = regs.a[srcreg];
1396: WORD src = get_word(srca);
1397: { ULONG dst = ~src;
1398: regs.v = regs.c = 0;
1399: regs.z = ((WORD)(dst)) == 0;
1400: regs.n = ((WORD)(dst)) < 0;
1401: put_word(srca,dst);
1402: }}}}
1403: void op_4658(UWORD opcode)
1404: {
1405: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1406: {{ CPTR srca = regs.a[srcreg];
1407: WORD src = get_word(srca);
1408: { regs.a[srcreg] += 2;
1409: { ULONG dst = ~src;
1410: regs.v = regs.c = 0;
1411: regs.z = ((WORD)(dst)) == 0;
1412: regs.n = ((WORD)(dst)) < 0;
1413: put_word(srca,dst);
1414: }}}}}
1415: void op_4660(UWORD opcode)
1416: {
1417: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1418: {{ regs.a[srcreg] -= 2;
1419: { CPTR srca = regs.a[srcreg];
1420: WORD src = get_word(srca);
1421: { ULONG dst = ~src;
1422: regs.v = regs.c = 0;
1423: regs.z = ((WORD)(dst)) == 0;
1424: regs.n = ((WORD)(dst)) < 0;
1425: put_word(srca,dst);
1426: }}}}}
1427: void op_4668(UWORD opcode)
1428: {
1429: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1430: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1431: WORD src = get_word(srca);
1432: { ULONG dst = ~src;
1433: regs.v = regs.c = 0;
1434: regs.z = ((WORD)(dst)) == 0;
1435: regs.n = ((WORD)(dst)) < 0;
1436: put_word(srca,dst);
1437: }}}}
1438: void op_4670(UWORD opcode)
1439: {
1440: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1441: {{ CPTR srca = regs.a[srcreg];
1442: UWORD srcdp = nextiword();
1443: srca += (LONG)(BYTE)(srcdp & 0xFF);
1444: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1445: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1446: srca += srcdpr;
1447: { WORD src = get_word(srca);
1448: { ULONG dst = ~src;
1449: regs.v = regs.c = 0;
1450: regs.z = ((WORD)(dst)) == 0;
1451: regs.n = ((WORD)(dst)) < 0;
1452: put_word(srca,dst);
1453: }}}}}}
1454: void op_4678(UWORD opcode)
1455: {
1456: {{ CPTR srca = (LONG)(WORD)nextiword();
1457: WORD src = get_word(srca);
1458: { ULONG dst = ~src;
1459: regs.v = regs.c = 0;
1460: regs.z = ((WORD)(dst)) == 0;
1461: regs.n = ((WORD)(dst)) < 0;
1462: put_word(srca,dst);
1463: }}}}
1464: void op_4679(UWORD opcode)
1465: {
1466: {{ CPTR srca = nextilong();
1467: WORD src = get_word(srca);
1468: { ULONG dst = ~src;
1469: regs.v = regs.c = 0;
1470: regs.z = ((WORD)(dst)) == 0;
1471: regs.n = ((WORD)(dst)) < 0;
1472: put_word(srca,dst);
1473: }}}}
1474: void op_4680(UWORD opcode)
1475: {
1476: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1477: {{ LONG src = regs.d[srcreg];
1478: { ULONG dst = ~src;
1479: regs.v = regs.c = 0;
1480: regs.z = ((LONG)(dst)) == 0;
1481: regs.n = ((LONG)(dst)) < 0;
1482: regs.d[srcreg] = (dst);
1483: }}}}
1484: void op_4690(UWORD opcode)
1485: {
1486: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1487: {{ CPTR srca = regs.a[srcreg];
1488: LONG src = get_long(srca);
1489: { ULONG dst = ~src;
1490: regs.v = regs.c = 0;
1491: regs.z = ((LONG)(dst)) == 0;
1492: regs.n = ((LONG)(dst)) < 0;
1493: put_long(srca,dst);
1494: }}}}
1495: void op_4698(UWORD opcode)
1496: {
1497: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1498: {{ CPTR srca = regs.a[srcreg];
1499: LONG src = get_long(srca);
1500: { regs.a[srcreg] += 4;
1501: { ULONG dst = ~src;
1502: regs.v = regs.c = 0;
1503: regs.z = ((LONG)(dst)) == 0;
1504: regs.n = ((LONG)(dst)) < 0;
1505: put_long(srca,dst);
1506: }}}}}
1507: void op_46a0(UWORD opcode)
1508: {
1509: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1510: {{ regs.a[srcreg] -= 4;
1511: { CPTR srca = regs.a[srcreg];
1512: LONG src = get_long(srca);
1513: { ULONG dst = ~src;
1514: regs.v = regs.c = 0;
1515: regs.z = ((LONG)(dst)) == 0;
1516: regs.n = ((LONG)(dst)) < 0;
1517: put_long(srca,dst);
1518: }}}}}
1519: void op_46a8(UWORD opcode)
1520: {
1521: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1522: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1523: LONG src = get_long(srca);
1524: { ULONG dst = ~src;
1525: regs.v = regs.c = 0;
1526: regs.z = ((LONG)(dst)) == 0;
1527: regs.n = ((LONG)(dst)) < 0;
1528: put_long(srca,dst);
1529: }}}}
1530: void op_46b0(UWORD opcode)
1531: {
1532: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1533: {{ CPTR srca = regs.a[srcreg];
1534: UWORD srcdp = nextiword();
1535: srca += (LONG)(BYTE)(srcdp & 0xFF);
1536: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1537: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1538: srca += srcdpr;
1539: { LONG src = get_long(srca);
1540: { ULONG dst = ~src;
1541: regs.v = regs.c = 0;
1542: regs.z = ((LONG)(dst)) == 0;
1543: regs.n = ((LONG)(dst)) < 0;
1544: put_long(srca,dst);
1545: }}}}}}
1546: void op_46b8(UWORD opcode)
1547: {
1548: {{ CPTR srca = (LONG)(WORD)nextiword();
1549: LONG src = get_long(srca);
1550: { ULONG dst = ~src;
1551: regs.v = regs.c = 0;
1552: regs.z = ((LONG)(dst)) == 0;
1553: regs.n = ((LONG)(dst)) < 0;
1554: put_long(srca,dst);
1555: }}}}
1556: void op_46b9(UWORD opcode)
1557: {
1558: {{ CPTR srca = nextilong();
1559: LONG src = get_long(srca);
1560: { ULONG dst = ~src;
1561: regs.v = regs.c = 0;
1562: regs.z = ((LONG)(dst)) == 0;
1563: regs.n = ((LONG)(dst)) < 0;
1564: put_long(srca,dst);
1565: }}}}
1566: void op_46c0(UWORD opcode)
1567: {
1568: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1569: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1570: {{ WORD src = regs.d[srcreg];
1571: regs.sr = src;
1572: MakeFromSR();
1573: }}}}
1574: void op_46d0(UWORD opcode)
1575: {
1576: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1577: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1578: {{ CPTR srca = regs.a[srcreg];
1579: WORD src = get_word(srca);
1580: regs.sr = src;
1581: MakeFromSR();
1582: }}}}
1583: void op_46d8(UWORD opcode)
1584: {
1585: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1586: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1587: {{ CPTR srca = regs.a[srcreg];
1588: WORD src = get_word(srca);
1589: { regs.a[srcreg] += 2;
1590: regs.sr = src;
1591: MakeFromSR();
1592: }}}}}
1593: void op_46e0(UWORD opcode)
1594: {
1595: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1596: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1597: {{ regs.a[srcreg] -= 2;
1598: { CPTR srca = regs.a[srcreg];
1599: WORD src = get_word(srca);
1600: regs.sr = src;
1601: MakeFromSR();
1602: }}}}}
1603: void op_46e8(UWORD opcode)
1604: {
1605: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1606: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1607: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1608: WORD src = get_word(srca);
1609: regs.sr = src;
1610: MakeFromSR();
1611: }}}}
1612: void op_46f0(UWORD opcode)
1613: {
1614: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1615: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1616: {{ CPTR srca = regs.a[srcreg];
1617: UWORD srcdp = nextiword();
1618: srca += (LONG)(BYTE)(srcdp & 0xFF);
1619: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1620: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1621: srca += srcdpr;
1622: { WORD src = get_word(srca);
1623: regs.sr = src;
1624: MakeFromSR();
1625: }}}}}}
1626: void op_46f8(UWORD opcode)
1627: {
1628: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1629: {{ CPTR srca = (LONG)(WORD)nextiword();
1630: WORD src = get_word(srca);
1631: regs.sr = src;
1632: MakeFromSR();
1633: }}}}
1634: void op_46f9(UWORD opcode)
1635: {
1636: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1637: {{ CPTR srca = nextilong();
1638: WORD src = get_word(srca);
1639: regs.sr = src;
1640: MakeFromSR();
1641: }}}}
1642: void op_46fa(UWORD opcode)
1643: {
1644: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1645: {{ CPTR srca = m68k_getpc();
1646: srca += (LONG)(WORD)nextiword();
1647: { WORD src = get_word(srca);
1648: regs.sr = src;
1649: MakeFromSR();
1650: }}}}}
1651: void op_46fb(UWORD opcode)
1652: {
1653: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1654: {{ CPTR srca = m68k_getpc();
1655: UWORD srcdp = nextiword();
1656: srca += (LONG)(BYTE)(srcdp & 0xFF);
1657: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1658: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1659: srca += srcdpr;
1660: { WORD src = get_word(srca);
1661: regs.sr = src;
1662: MakeFromSR();
1663: }}}}}}
1664: void op_46fc(UWORD opcode)
1665: {
1666: { if (!regs.s) { regs.pc_p--; Exception(8); } else
1667: {{ WORD src = nextiword();
1668: regs.sr = src;
1669: MakeFromSR();
1670: }}}}
1671: void op_4800(UWORD opcode)
1672: {
1673: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1674: {{ BYTE src = regs.d[srcreg];
1675: { UWORD newv = - src - regs.x;
1676: if ((newv & 0xF) > 9) newv-=6;
1677: regs.c = regs.x = (newv & 0x1F0) > 0x90;
1678: if (regs.c) newv -= 0x60;
1679: if (newv != 0) regs.z = 0;
1680: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (newv) & 0xff;
1681: }}}}
1682: void op_4810(UWORD opcode)
1683: {
1684: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1685: {{ CPTR srca = regs.a[srcreg];
1686: BYTE src = get_byte(srca);
1687: { UWORD newv = - src - regs.x;
1688: if ((newv & 0xF) > 9) newv-=6;
1689: regs.c = regs.x = (newv & 0x1F0) > 0x90;
1690: if (regs.c) newv -= 0x60;
1691: if (newv != 0) regs.z = 0;
1692: put_byte(srca,newv);
1693: }}}}
1694: void op_4818(UWORD opcode)
1695: {
1696: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1697: {{ CPTR srca = regs.a[srcreg];
1698: BYTE src = get_byte(srca);
1699: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
1700: { UWORD newv = - src - regs.x;
1701: if ((newv & 0xF) > 9) newv-=6;
1702: regs.c = regs.x = (newv & 0x1F0) > 0x90;
1703: if (regs.c) newv -= 0x60;
1704: if (newv != 0) regs.z = 0;
1705: put_byte(srca,newv);
1706: }}}}}
1707: void op_4820(UWORD opcode)
1708: {
1709: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1710: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
1711: { CPTR srca = regs.a[srcreg];
1712: BYTE src = get_byte(srca);
1713: { UWORD newv = - src - regs.x;
1714: if ((newv & 0xF) > 9) newv-=6;
1715: regs.c = regs.x = (newv & 0x1F0) > 0x90;
1716: if (regs.c) newv -= 0x60;
1717: if (newv != 0) regs.z = 0;
1718: put_byte(srca,newv);
1719: }}}}}
1720: void op_4828(UWORD opcode)
1721: {
1722: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1723: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1724: BYTE src = get_byte(srca);
1725: { UWORD newv = - src - regs.x;
1726: if ((newv & 0xF) > 9) newv-=6;
1727: regs.c = regs.x = (newv & 0x1F0) > 0x90;
1728: if (regs.c) newv -= 0x60;
1729: if (newv != 0) regs.z = 0;
1730: put_byte(srca,newv);
1731: }}}}
1732: void op_4830(UWORD opcode)
1733: {
1734: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1735: {{ CPTR srca = regs.a[srcreg];
1736: UWORD srcdp = nextiword();
1737: srca += (LONG)(BYTE)(srcdp & 0xFF);
1738: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1739: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1740: srca += srcdpr;
1741: { BYTE src = get_byte(srca);
1742: { UWORD newv = - src - regs.x;
1743: if ((newv & 0xF) > 9) newv-=6;
1744: regs.c = regs.x = (newv & 0x1F0) > 0x90;
1745: if (regs.c) newv -= 0x60;
1746: if (newv != 0) regs.z = 0;
1747: put_byte(srca,newv);
1748: }}}}}}
1749: void op_4838(UWORD opcode)
1750: {
1751: {{ CPTR srca = (LONG)(WORD)nextiword();
1752: BYTE src = get_byte(srca);
1753: { UWORD newv = - src - regs.x;
1754: if ((newv & 0xF) > 9) newv-=6;
1755: regs.c = regs.x = (newv & 0x1F0) > 0x90;
1756: if (regs.c) newv -= 0x60;
1757: if (newv != 0) regs.z = 0;
1758: put_byte(srca,newv);
1759: }}}}
1760: void op_4839(UWORD opcode)
1761: {
1762: {{ CPTR srca = nextilong();
1763: BYTE src = get_byte(srca);
1764: { UWORD newv = - src - regs.x;
1765: if ((newv & 0xF) > 9) newv-=6;
1766: regs.c = regs.x = (newv & 0x1F0) > 0x90;
1767: if (regs.c) newv -= 0x60;
1768: if (newv != 0) regs.z = 0;
1769: put_byte(srca,newv);
1770: }}}}
1771: void op_4840(UWORD opcode)
1772: {
1773: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1774: {{ LONG src = regs.d[srcreg];
1775: { ULONG dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16);
1776: regs.v = regs.c = 0;
1777: regs.z = ((LONG)(dst)) == 0;
1778: regs.n = ((LONG)(dst)) < 0;
1779: regs.d[srcreg] = (dst);
1780: }}}}
1781: void op_4850(UWORD opcode)
1782: {
1783: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1784: {{ CPTR srca = regs.a[srcreg];
1785: { regs.a[7] -= 4;
1786: { CPTR dsta = regs.a[7];
1787: put_long(dsta,srca);
1788: }}}}}
1789: void op_4858(UWORD opcode)
1790: {
1791: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1792: {{ CPTR srca = regs.a[srcreg];
1793: { regs.a[srcreg] += 4;
1794: { regs.a[7] -= 4;
1795: { CPTR dsta = regs.a[7];
1796: put_long(dsta,srca);
1797: }}}}}}
1798: void op_4860(UWORD opcode)
1799: {
1800: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1801: {{ regs.a[srcreg] -= 4;
1802: { CPTR srca = regs.a[srcreg];
1803: { regs.a[7] -= 4;
1804: { CPTR dsta = regs.a[7];
1805: put_long(dsta,srca);
1806: }}}}}}
1807: void op_4868(UWORD opcode)
1808: {
1809: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1810: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1811: { regs.a[7] -= 4;
1812: { CPTR dsta = regs.a[7];
1813: put_long(dsta,srca);
1814: }}}}}
1815: void op_4870(UWORD opcode)
1816: {
1817: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1818: {{ CPTR srca = regs.a[srcreg];
1819: UWORD srcdp = nextiword();
1820: srca += (LONG)(BYTE)(srcdp & 0xFF);
1821: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1822: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1823: srca += srcdpr;
1824: { regs.a[7] -= 4;
1825: { CPTR dsta = regs.a[7];
1826: put_long(dsta,srca);
1827: }}}}}}
1828: void op_4878(UWORD opcode)
1829: {
1830: {{ CPTR srca = (LONG)(WORD)nextiword();
1831: { regs.a[7] -= 4;
1832: { CPTR dsta = regs.a[7];
1833: put_long(dsta,srca);
1834: }}}}}
1835: void op_4879(UWORD opcode)
1836: {
1837: {{ CPTR srca = nextilong();
1838: { regs.a[7] -= 4;
1839: { CPTR dsta = regs.a[7];
1840: put_long(dsta,srca);
1841: }}}}}
1842: void op_487a(UWORD opcode)
1843: {
1844: {{ CPTR srca = m68k_getpc();
1845: srca += (LONG)(WORD)nextiword();
1846: { regs.a[7] -= 4;
1847: { CPTR dsta = regs.a[7];
1848: put_long(dsta,srca);
1849: }}}}}
1850: void op_487b(UWORD opcode)
1851: {
1852: {{ CPTR srca = m68k_getpc();
1853: UWORD srcdp = nextiword();
1854: srca += (LONG)(BYTE)(srcdp & 0xFF);
1855: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1856: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1857: srca += srcdpr;
1858: { regs.a[7] -= 4;
1859: { CPTR dsta = regs.a[7];
1860: put_long(dsta,srca);
1861: }}}}}}
1862: void op_4880(UWORD opcode)
1863: {
1864: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1865: {{ WORD src = regs.d[srcreg];
1866: { ULONG dst = (LONG)(BYTE)src;
1867: regs.v = regs.c = 0;
1868: regs.z = ((WORD)(dst)) == 0;
1869: regs.n = ((WORD)(dst)) < 0;
1870: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (dst) & 0xffff;
1871: }}}}
1872: void op_4890(UWORD opcode)
1873: {
1874: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1875: { UWORD mask = nextiword(), bitmask = mask;
1876: { CPTR srca = regs.a[srcreg];
1877: { int i, bitcnt = 0;
1878: ULONG rd[8], ra[8];
1879: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1880: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1881: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, rd[i]); srca += 2; } mask >>= 1; }
1882: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, ra[i]); srca += 2; } mask >>= 1; }
1883: }}}}
1884: void op_4898(UWORD opcode)
1885: {
1886: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1887: { UWORD mask = nextiword(), bitmask = mask;
1888: { CPTR srca = regs.a[srcreg];
1889: { int i, bitcnt = 0;
1890: ULONG rd[8], ra[8];
1891: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1892: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1893: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, rd[i]); srca += 2; } mask >>= 1; }
1894: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, ra[i]); srca += 2; } mask >>= 1; }
1895: }}}}
1896: void op_48a0(UWORD opcode)
1897: {
1898: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1899: { UWORD mask = nextiword(), bitmask = mask;
1900: {{ CPTR srca = regs.a[srcreg];
1901: { int i, bitcnt = 0;
1902: ULONG rd[8], ra[8];
1903: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1904: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1905: srca -= 2*bitcnt;
1906: regs.a[srcreg] = srca;
1907: for(i=0;i<8;i++) { if (mask & 32768) { put_word(srca, rd[i]); srca += 2; } mask <<= 1; }
1908: for(i=0;i<8;i++) { if (mask & 32768) { put_word(srca, ra[i]); srca += 2; } mask <<= 1; }
1909: }}}}}
1910: void op_48a8(UWORD opcode)
1911: {
1912: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1913: { UWORD mask = nextiword(), bitmask = mask;
1914: { CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
1915: { int i, bitcnt = 0;
1916: ULONG rd[8], ra[8];
1917: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1918: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1919: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, rd[i]); srca += 2; } mask >>= 1; }
1920: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, ra[i]); srca += 2; } mask >>= 1; }
1921: }}}}
1922: void op_48b0(UWORD opcode)
1923: {
1924: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1925: { UWORD mask = nextiword(), bitmask = mask;
1926: { CPTR srca = regs.a[srcreg];
1927: UWORD srcdp = nextiword();
1928: srca += (LONG)(BYTE)(srcdp & 0xFF);
1929: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
1930: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
1931: srca += srcdpr;
1932: { int i, bitcnt = 0;
1933: ULONG rd[8], ra[8];
1934: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1935: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1936: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, rd[i]); srca += 2; } mask >>= 1; }
1937: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, ra[i]); srca += 2; } mask >>= 1; }
1938: }}}}}
1939: void op_48b8(UWORD opcode)
1940: {
1941: { UWORD mask = nextiword(), bitmask = mask;
1942: { CPTR srca = (LONG)(WORD)nextiword();
1943: { int i, bitcnt = 0;
1944: ULONG rd[8], ra[8];
1945: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1946: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1947: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, rd[i]); srca += 2; } mask >>= 1; }
1948: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, ra[i]); srca += 2; } mask >>= 1; }
1949: }}}}
1950: void op_48b9(UWORD opcode)
1951: {
1952: { UWORD mask = nextiword(), bitmask = mask;
1953: { CPTR srca = nextilong();
1954: { int i, bitcnt = 0;
1955: ULONG rd[8], ra[8];
1956: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1957: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1958: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, rd[i]); srca += 2; } mask >>= 1; }
1959: for(i=0;i<8;i++) { if (mask & 1) { put_word(srca, ra[i]); srca += 2; } mask >>= 1; }
1960: }}}}
1961: void op_48c0(UWORD opcode)
1962: {
1963: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1964: {{ LONG src = regs.d[srcreg];
1965: { ULONG dst = (LONG)(WORD)src;
1966: regs.v = regs.c = 0;
1967: regs.z = ((LONG)(dst)) == 0;
1968: regs.n = ((LONG)(dst)) < 0;
1969: regs.d[srcreg] = (dst);
1970: }}}}
1971: void op_48d0(UWORD opcode)
1972: {
1973: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1974: { UWORD mask = nextiword(), bitmask = mask;
1975: { CPTR srca = regs.a[srcreg];
1976: { int i, bitcnt = 0;
1977: ULONG rd[8], ra[8];
1978: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1979: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1980: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, rd[i]); srca += 4; } mask >>= 1; }
1981: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, ra[i]); srca += 4; } mask >>= 1; }
1982: }}}}
1983: void op_48d8(UWORD opcode)
1984: {
1985: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1986: { UWORD mask = nextiword(), bitmask = mask;
1987: { CPTR srca = regs.a[srcreg];
1988: { int i, bitcnt = 0;
1989: ULONG rd[8], ra[8];
1990: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
1991: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
1992: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, rd[i]); srca += 4; } mask >>= 1; }
1993: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, ra[i]); srca += 4; } mask >>= 1; }
1994: }}}}
1995: void op_48e0(UWORD opcode)
1996: {
1997: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1998: { UWORD mask = nextiword(), bitmask = mask;
1999: {{ CPTR srca = regs.a[srcreg];
2000: { int i, bitcnt = 0;
2001: ULONG rd[8], ra[8];
2002: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2003: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
2004: srca -= 4*bitcnt;
2005: regs.a[srcreg] = srca;
2006: for(i=0;i<8;i++) { if (mask & 32768) { put_long(srca, rd[i]); srca += 4; } mask <<= 1; }
2007: for(i=0;i<8;i++) { if (mask & 32768) { put_long(srca, ra[i]); srca += 4; } mask <<= 1; }
2008: }}}}}
2009: void op_48e8(UWORD opcode)
2010: {
2011: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2012: { UWORD mask = nextiword(), bitmask = mask;
2013: { CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2014: { int i, bitcnt = 0;
2015: ULONG rd[8], ra[8];
2016: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2017: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
2018: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, rd[i]); srca += 4; } mask >>= 1; }
2019: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, ra[i]); srca += 4; } mask >>= 1; }
2020: }}}}
2021: void op_48f0(UWORD opcode)
2022: {
2023: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2024: { UWORD mask = nextiword(), bitmask = mask;
2025: { CPTR srca = regs.a[srcreg];
2026: UWORD srcdp = nextiword();
2027: srca += (LONG)(BYTE)(srcdp & 0xFF);
2028: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2029: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2030: srca += srcdpr;
2031: { int i, bitcnt = 0;
2032: ULONG rd[8], ra[8];
2033: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2034: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
2035: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, rd[i]); srca += 4; } mask >>= 1; }
2036: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, ra[i]); srca += 4; } mask >>= 1; }
2037: }}}}}
2038: void op_48f8(UWORD opcode)
2039: {
2040: { UWORD mask = nextiword(), bitmask = mask;
2041: { CPTR srca = (LONG)(WORD)nextiword();
2042: { int i, bitcnt = 0;
2043: ULONG rd[8], ra[8];
2044: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2045: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
2046: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, rd[i]); srca += 4; } mask >>= 1; }
2047: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, ra[i]); srca += 4; } mask >>= 1; }
2048: }}}}
2049: void op_48f9(UWORD opcode)
2050: {
2051: { UWORD mask = nextiword(), bitmask = mask;
2052: { CPTR srca = nextilong();
2053: { int i, bitcnt = 0;
2054: ULONG rd[8], ra[8];
2055: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2056: for(i=0;i<8;i++) { rd[i] = regs.d[i]; ra[i] = regs.a[i]; }
2057: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, rd[i]); srca += 4; } mask >>= 1; }
2058: for(i=0;i<8;i++) { if (mask & 1) { put_long(srca, ra[i]); srca += 4; } mask >>= 1; }
2059: }}}}
2060: void op_4a00(UWORD opcode)
2061: {
2062: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2063: {{ BYTE src = regs.d[srcreg];
2064: regs.v = regs.c = 0;
2065: regs.z = ((BYTE)(src)) == 0;
2066: regs.n = ((BYTE)(src)) < 0;
2067: }}}
2068: void op_4a10(UWORD opcode)
2069: {
2070: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2071: {{ CPTR srca = regs.a[srcreg];
2072: BYTE src = get_byte(srca);
2073: regs.v = regs.c = 0;
2074: regs.z = ((BYTE)(src)) == 0;
2075: regs.n = ((BYTE)(src)) < 0;
2076: }}}
2077: void op_4a18(UWORD opcode)
2078: {
2079: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2080: {{ CPTR srca = regs.a[srcreg];
2081: BYTE src = get_byte(srca);
2082: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1;
2083: regs.v = regs.c = 0;
2084: regs.z = ((BYTE)(src)) == 0;
2085: regs.n = ((BYTE)(src)) < 0;
2086: }}}}
2087: void op_4a20(UWORD opcode)
2088: {
2089: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2090: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1;
2091: { CPTR srca = regs.a[srcreg];
2092: BYTE src = get_byte(srca);
2093: regs.v = regs.c = 0;
2094: regs.z = ((BYTE)(src)) == 0;
2095: regs.n = ((BYTE)(src)) < 0;
2096: }}}}
2097: void op_4a28(UWORD opcode)
2098: {
2099: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2100: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2101: BYTE src = get_byte(srca);
2102: regs.v = regs.c = 0;
2103: regs.z = ((BYTE)(src)) == 0;
2104: regs.n = ((BYTE)(src)) < 0;
2105: }}}
2106: void op_4a30(UWORD opcode)
2107: {
2108: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2109: {{ CPTR srca = regs.a[srcreg];
2110: UWORD srcdp = nextiword();
2111: srca += (LONG)(BYTE)(srcdp & 0xFF);
2112: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2113: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2114: srca += srcdpr;
2115: { BYTE src = get_byte(srca);
2116: regs.v = regs.c = 0;
2117: regs.z = ((BYTE)(src)) == 0;
2118: regs.n = ((BYTE)(src)) < 0;
2119: }}}}}
2120: void op_4a38(UWORD opcode)
2121: {
2122: {{ CPTR srca = (LONG)(WORD)nextiword();
2123: BYTE src = get_byte(srca);
2124: regs.v = regs.c = 0;
2125: regs.z = ((BYTE)(src)) == 0;
2126: regs.n = ((BYTE)(src)) < 0;
2127: }}}
2128: void op_4a39(UWORD opcode)
2129: {
2130: {{ CPTR srca = nextilong();
2131: BYTE src = get_byte(srca);
2132: regs.v = regs.c = 0;
2133: regs.z = ((BYTE)(src)) == 0;
2134: regs.n = ((BYTE)(src)) < 0;
2135: }}}
2136: void op_4a40(UWORD opcode)
2137: {
2138: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2139: {{ WORD src = regs.d[srcreg];
2140: regs.v = regs.c = 0;
2141: regs.z = ((WORD)(src)) == 0;
2142: regs.n = ((WORD)(src)) < 0;
2143: }}}
2144: void op_4a48(UWORD opcode)
2145: {
2146: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2147: {{ WORD src = regs.a[srcreg];
2148: regs.v = regs.c = 0;
2149: regs.z = ((WORD)(src)) == 0;
2150: regs.n = ((WORD)(src)) < 0;
2151: }}}
2152: void op_4a50(UWORD opcode)
2153: {
2154: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2155: {{ CPTR srca = regs.a[srcreg];
2156: WORD src = get_word(srca);
2157: regs.v = regs.c = 0;
2158: regs.z = ((WORD)(src)) == 0;
2159: regs.n = ((WORD)(src)) < 0;
2160: }}}
2161: void op_4a58(UWORD opcode)
2162: {
2163: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2164: {{ CPTR srca = regs.a[srcreg];
2165: WORD src = get_word(srca);
2166: { regs.a[srcreg] += 2;
2167: regs.v = regs.c = 0;
2168: regs.z = ((WORD)(src)) == 0;
2169: regs.n = ((WORD)(src)) < 0;
2170: }}}}
2171: void op_4a60(UWORD opcode)
2172: {
2173: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2174: {{ regs.a[srcreg] -= 2;
2175: { CPTR srca = regs.a[srcreg];
2176: WORD src = get_word(srca);
2177: regs.v = regs.c = 0;
2178: regs.z = ((WORD)(src)) == 0;
2179: regs.n = ((WORD)(src)) < 0;
2180: }}}}
2181: void op_4a68(UWORD opcode)
2182: {
2183: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2184: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2185: WORD src = get_word(srca);
2186: regs.v = regs.c = 0;
2187: regs.z = ((WORD)(src)) == 0;
2188: regs.n = ((WORD)(src)) < 0;
2189: }}}
2190: void op_4a70(UWORD opcode)
2191: {
2192: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2193: {{ CPTR srca = regs.a[srcreg];
2194: UWORD srcdp = nextiword();
2195: srca += (LONG)(BYTE)(srcdp & 0xFF);
2196: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2197: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2198: srca += srcdpr;
2199: { WORD src = get_word(srca);
2200: regs.v = regs.c = 0;
2201: regs.z = ((WORD)(src)) == 0;
2202: regs.n = ((WORD)(src)) < 0;
2203: }}}}}
2204: void op_4a78(UWORD opcode)
2205: {
2206: {{ CPTR srca = (LONG)(WORD)nextiword();
2207: WORD src = get_word(srca);
2208: regs.v = regs.c = 0;
2209: regs.z = ((WORD)(src)) == 0;
2210: regs.n = ((WORD)(src)) < 0;
2211: }}}
2212: void op_4a79(UWORD opcode)
2213: {
2214: {{ CPTR srca = nextilong();
2215: WORD src = get_word(srca);
2216: regs.v = regs.c = 0;
2217: regs.z = ((WORD)(src)) == 0;
2218: regs.n = ((WORD)(src)) < 0;
2219: }}}
2220: void op_4a80(UWORD opcode)
2221: {
2222: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2223: {{ LONG src = regs.d[srcreg];
2224: regs.v = regs.c = 0;
2225: regs.z = ((LONG)(src)) == 0;
2226: regs.n = ((LONG)(src)) < 0;
2227: }}}
2228: void op_4a88(UWORD opcode)
2229: {
2230: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2231: {{ LONG src = regs.a[srcreg];
2232: regs.v = regs.c = 0;
2233: regs.z = ((LONG)(src)) == 0;
2234: regs.n = ((LONG)(src)) < 0;
2235: }}}
2236: void op_4a90(UWORD opcode)
2237: {
2238: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2239: {{ CPTR srca = regs.a[srcreg];
2240: LONG src = get_long(srca);
2241: regs.v = regs.c = 0;
2242: regs.z = ((LONG)(src)) == 0;
2243: regs.n = ((LONG)(src)) < 0;
2244: }}}
2245: void op_4a98(UWORD opcode)
2246: {
2247: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2248: {{ CPTR srca = regs.a[srcreg];
2249: LONG src = get_long(srca);
2250: { regs.a[srcreg] += 4;
2251: regs.v = regs.c = 0;
2252: regs.z = ((LONG)(src)) == 0;
2253: regs.n = ((LONG)(src)) < 0;
2254: }}}}
2255: void op_4aa0(UWORD opcode)
2256: {
2257: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2258: {{ regs.a[srcreg] -= 4;
2259: { CPTR srca = regs.a[srcreg];
2260: LONG src = get_long(srca);
2261: regs.v = regs.c = 0;
2262: regs.z = ((LONG)(src)) == 0;
2263: regs.n = ((LONG)(src)) < 0;
2264: }}}}
2265: void op_4aa8(UWORD opcode)
2266: {
2267: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2268: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2269: LONG src = get_long(srca);
2270: regs.v = regs.c = 0;
2271: regs.z = ((LONG)(src)) == 0;
2272: regs.n = ((LONG)(src)) < 0;
2273: }}}
2274: void op_4ab0(UWORD opcode)
2275: {
2276: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2277: {{ CPTR srca = regs.a[srcreg];
2278: UWORD srcdp = nextiword();
2279: srca += (LONG)(BYTE)(srcdp & 0xFF);
2280: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2281: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2282: srca += srcdpr;
2283: { LONG src = get_long(srca);
2284: regs.v = regs.c = 0;
2285: regs.z = ((LONG)(src)) == 0;
2286: regs.n = ((LONG)(src)) < 0;
2287: }}}}}
2288: void op_4ab8(UWORD opcode)
2289: {
2290: {{ CPTR srca = (LONG)(WORD)nextiword();
2291: LONG src = get_long(srca);
2292: regs.v = regs.c = 0;
2293: regs.z = ((LONG)(src)) == 0;
2294: regs.n = ((LONG)(src)) < 0;
2295: }}}
2296: void op_4ab9(UWORD opcode)
2297: {
2298: {{ CPTR srca = nextilong();
2299: LONG src = get_long(srca);
2300: regs.v = regs.c = 0;
2301: regs.z = ((LONG)(src)) == 0;
2302: regs.n = ((LONG)(src)) < 0;
2303: }}}
2304: void op_4c90(UWORD opcode)
2305: {
2306: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2307: { UWORD mask = nextiword(), bitmask = mask;
2308: { CPTR srca = regs.a[srcreg];
2309: { int i, bitcnt = 0;
2310: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2311: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2312: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2313: }}}}
2314: void op_4c98(UWORD opcode)
2315: {
2316: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2317: { UWORD mask = nextiword(), bitmask = mask;
2318: { CPTR srca = regs.a[srcreg];
2319: { int i, bitcnt = 0;
2320: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2321: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2322: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2323: regs.a[srcreg] = srca;
2324: }}}}
2325: void op_4ca0(UWORD opcode)
2326: {
2327: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2328: { UWORD mask = nextiword(), bitmask = mask;
2329: {{ CPTR srca = regs.a[srcreg];
2330: { int i, bitcnt = 0;
2331: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2332: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2333: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2334: }}}}}
2335: void op_4ca8(UWORD opcode)
2336: {
2337: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2338: { UWORD mask = nextiword(), bitmask = mask;
2339: { CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2340: { int i, bitcnt = 0;
2341: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2342: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2343: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2344: }}}}
2345: void op_4cb0(UWORD opcode)
2346: {
2347: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2348: { UWORD mask = nextiword(), bitmask = mask;
2349: { CPTR srca = regs.a[srcreg];
2350: UWORD srcdp = nextiword();
2351: srca += (LONG)(BYTE)(srcdp & 0xFF);
2352: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2353: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2354: srca += srcdpr;
2355: { int i, bitcnt = 0;
2356: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2357: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2358: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2359: }}}}}
2360: void op_4cb8(UWORD opcode)
2361: {
2362: { UWORD mask = nextiword(), bitmask = mask;
2363: { CPTR srca = (LONG)(WORD)nextiword();
2364: { int i, bitcnt = 0;
2365: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2366: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2367: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2368: }}}}
2369: void op_4cb9(UWORD opcode)
2370: {
2371: { UWORD mask = nextiword(), bitmask = mask;
2372: { CPTR srca = nextilong();
2373: { int i, bitcnt = 0;
2374: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2375: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2376: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2377: }}}}
2378: void op_4cba(UWORD opcode)
2379: {
2380: { UWORD mask = nextiword(), bitmask = mask;
2381: { CPTR srca = m68k_getpc();
2382: srca += (LONG)(WORD)nextiword();
2383: { int i, bitcnt = 0;
2384: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2385: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2386: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2387: }}}}
2388: void op_4cbb(UWORD opcode)
2389: {
2390: { UWORD mask = nextiword(), bitmask = mask;
2391: { CPTR srca = m68k_getpc();
2392: UWORD srcdp = nextiword();
2393: srca += (LONG)(BYTE)(srcdp & 0xFF);
2394: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2395: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2396: srca += srcdpr;
2397: { int i, bitcnt = 0;
2398: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2399: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2400: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = (LONG)(WORD)get_word(srca); srca += 2; } mask >>= 1; }
2401: }}}}}
2402: void op_4cd0(UWORD opcode)
2403: {
2404: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2405: { UWORD mask = nextiword(), bitmask = mask;
2406: { CPTR srca = regs.a[srcreg];
2407: { int i, bitcnt = 0;
2408: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2409: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2410: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2411: }}}}
2412: void op_4cd8(UWORD opcode)
2413: {
2414: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2415: { UWORD mask = nextiword(), bitmask = mask;
2416: { CPTR srca = regs.a[srcreg];
2417: { int i, bitcnt = 0;
2418: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2419: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2420: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2421: regs.a[srcreg] = srca;
2422: }}}}
2423: void op_4ce0(UWORD opcode)
2424: {
2425: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2426: { UWORD mask = nextiword(), bitmask = mask;
2427: {{ CPTR srca = regs.a[srcreg];
2428: { int i, bitcnt = 0;
2429: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2430: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2431: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2432: }}}}}
2433: void op_4ce8(UWORD opcode)
2434: {
2435: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2436: { UWORD mask = nextiword(), bitmask = mask;
2437: { CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2438: { int i, bitcnt = 0;
2439: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2440: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2441: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2442: }}}}
2443: void op_4cf0(UWORD opcode)
2444: {
2445: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2446: { UWORD mask = nextiword(), bitmask = mask;
2447: { CPTR srca = regs.a[srcreg];
2448: UWORD srcdp = nextiword();
2449: srca += (LONG)(BYTE)(srcdp & 0xFF);
2450: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2451: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2452: srca += srcdpr;
2453: { int i, bitcnt = 0;
2454: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2455: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2456: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2457: }}}}}
2458: void op_4cf8(UWORD opcode)
2459: {
2460: { UWORD mask = nextiword(), bitmask = mask;
2461: { CPTR srca = (LONG)(WORD)nextiword();
2462: { int i, bitcnt = 0;
2463: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2464: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2465: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2466: }}}}
2467: void op_4cf9(UWORD opcode)
2468: {
2469: { UWORD mask = nextiword(), bitmask = mask;
2470: { CPTR srca = nextilong();
2471: { int i, bitcnt = 0;
2472: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2473: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2474: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2475: }}}}
2476: void op_4cfa(UWORD opcode)
2477: {
2478: { UWORD mask = nextiword(), bitmask = mask;
2479: { CPTR srca = m68k_getpc();
2480: srca += (LONG)(WORD)nextiword();
2481: { int i, bitcnt = 0;
2482: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2483: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2484: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2485: }}}}
2486: void op_4cfb(UWORD opcode)
2487: {
2488: { UWORD mask = nextiword(), bitmask = mask;
2489: { CPTR srca = m68k_getpc();
2490: UWORD srcdp = nextiword();
2491: srca += (LONG)(BYTE)(srcdp & 0xFF);
2492: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2493: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2494: srca += srcdpr;
2495: { int i, bitcnt = 0;
2496: for(i=0;i<16;i++) { bitcnt += bitmask & 1; bitmask >>= 1; }
2497: for(i=0;i<8;i++) { if (mask & 1) { regs.d[i] = get_long(srca); srca += 4; } mask >>= 1; }
2498: for(i=0;i<8;i++) { if (mask & 1) { regs.a[i] = get_long(srca); srca += 4; } mask >>= 1; }
2499: }}}}}
2500: void op_4e40(UWORD opcode)
2501: {
2502: ULONG srcreg = 0;
2503: {{ ULONG src = srcreg;
2504: Exception(src+32);
2505: }}}
2506: void op_4e41(UWORD opcode)
2507: {
2508: ULONG srcreg = 1;
2509: {{ ULONG src = srcreg;
2510: Exception(src+32);
2511: }}}
2512: void op_4e42(UWORD opcode)
2513: {
2514: ULONG srcreg = 2;
2515: {{ ULONG src = srcreg;
2516: Exception(src+32);
2517: }}}
2518: void op_4e43(UWORD opcode)
2519: {
2520: ULONG srcreg = 3;
2521: {{ ULONG src = srcreg;
2522: Exception(src+32);
2523: }}}
2524: void op_4e44(UWORD opcode)
2525: {
2526: ULONG srcreg = 4;
2527: {{ ULONG src = srcreg;
2528: Exception(src+32);
2529: }}}
2530: void op_4e45(UWORD opcode)
2531: {
2532: ULONG srcreg = 5;
2533: {{ ULONG src = srcreg;
2534: Exception(src+32);
2535: }}}
2536: void op_4e46(UWORD opcode)
2537: {
2538: ULONG srcreg = 6;
2539: {{ ULONG src = srcreg;
2540: Exception(src+32);
2541: }}}
2542: void op_4e47(UWORD opcode)
2543: {
2544: ULONG srcreg = 7;
2545: {{ ULONG src = srcreg;
2546: Exception(src+32);
2547: }}}
2548: void op_4e48(UWORD opcode)
2549: {
2550: ULONG srcreg = 8;
2551: {{ ULONG src = srcreg;
2552: Exception(src+32);
2553: }}}
2554: void op_4e49(UWORD opcode)
2555: {
2556: ULONG srcreg = 9;
2557: {{ ULONG src = srcreg;
2558: Exception(src+32);
2559: }}}
2560: void op_4e4a(UWORD opcode)
2561: {
2562: ULONG srcreg = 10;
2563: {{ ULONG src = srcreg;
2564: Exception(src+32);
2565: }}}
2566: void op_4e4b(UWORD opcode)
2567: {
2568: ULONG srcreg = 11;
2569: {{ ULONG src = srcreg;
2570: Exception(src+32);
2571: }}}
2572: void op_4e4c(UWORD opcode)
2573: {
2574: ULONG srcreg = 12;
2575: {{ ULONG src = srcreg;
2576: Exception(src+32);
2577: }}}
2578: void op_4e4d(UWORD opcode)
2579: {
2580: ULONG srcreg = 13;
2581: {{ ULONG src = srcreg;
2582: Exception(src+32);
2583: }}}
2584: void op_4e4e(UWORD opcode)
2585: {
2586: ULONG srcreg = 14;
2587: {{ ULONG src = srcreg;
2588: Exception(src+32);
2589: }}}
2590: void op_4e4f(UWORD opcode)
2591: {
2592: ULONG srcreg = 15;
2593: {{ ULONG src = srcreg;
2594: Exception(src+32);
2595: }}}
2596: void op_4e50(UWORD opcode)
2597: {
2598: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2599: {{ regs.a[7] -= 4;
2600: { CPTR olda = regs.a[7];
2601: { LONG src = regs.a[srcreg];
2602: put_long(olda,src);
2603: regs.a[srcreg] = (regs.a[7]);
2604: { WORD offs = nextiword();
2605: regs.a[7] += offs;
2606: }}}}}}
2607: void op_4e58(UWORD opcode)
2608: {
2609: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2610: {{ LONG src = regs.a[srcreg];
2611: regs.a[7] = src;
2612: { CPTR olda = regs.a[7];
2613: LONG old = get_long(olda);
2614: { regs.a[7] += 4;
2615: regs.a[srcreg] = (old);
2616: }}}}}
2617: void op_4e60(UWORD opcode)
2618: {
2619: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2620: { if (!regs.s) { regs.pc_p--; Exception(8); } else {
2621: { LONG src = regs.a[srcreg];
2622: regs.usp = src;
2623: }
2624: }}}
2625: void op_4e68(UWORD opcode)
2626: {
2627: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2628: { if (!regs.s) { regs.pc_p--; Exception(8); } else {
2629: { regs.a[srcreg] = (regs.usp);
2630: }
2631: }}}
2632: void op_4e70(UWORD opcode)
2633: {
2634: { customreset();
2635: }}
2636: void op_4e71(UWORD opcode)
2637: {
2638: {}}
2639: void op_4e72(UWORD opcode)
2640: {
2641: { if (!regs.s) { regs.pc_p--; Exception(8); } else {
2642: { WORD src = nextiword();
2643: regs.sr = src;
2644: MakeFromSR();
2645: m68k_setstopped(1);
2646: }
2647: }}}
2648: void op_4e73(UWORD opcode)
2649: {
2650: {{ CPTR sra = regs.a[7];
2651: WORD sr = get_word(sra);
2652: { regs.a[7] += 2;
2653: { CPTR pca = regs.a[7];
2654: LONG pc = get_long(pca);
2655: { regs.a[7] += 4;
2656: regs.sr = sr; m68k_setpc(pc);
2657: MakeFromSR();
2658: }}}}}}
2659: void op_4e74(UWORD opcode)
2660: {
2661: {}}
2662: void op_4e75(UWORD opcode)
2663: {
2664: {{ CPTR pca = regs.a[7];
2665: LONG pc = get_long(pca);
2666: { regs.a[7] += 4;
2667: m68k_setpc(pc);
2668: }}}}
2669: void op_4e76(UWORD opcode)
2670: {
2671: { if(regs.v) Exception(7);
2672: }}
2673: void op_4e77(UWORD opcode)
2674: {
2675: { MakeSR();
2676: { CPTR sra = regs.a[7];
2677: WORD sr = get_word(sra);
2678: { regs.a[7] += 2;
2679: { CPTR pca = regs.a[7];
2680: LONG pc = get_long(pca);
2681: { regs.a[7] += 4;
2682: regs.sr &= 0xFF00; sr &= 0xFF;
2683: regs.sr |= sr; m68k_setpc(pc);
2684: MakeFromSR();
2685: }}}}}}
2686: void op_4e90(UWORD opcode)
2687: {
2688: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2689: {{ CPTR srca = regs.a[srcreg];
2690: { regs.a[7] -= 4;
2691: { CPTR spa = regs.a[7];
2692: put_long(spa,m68k_getpc());
2693: m68k_setpc(srca);
2694: }}}}}
2695: void op_4e98(UWORD opcode)
2696: {
2697: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2698: {{ CPTR srca = regs.a[srcreg];
2699: { regs.a[srcreg] += 4;
2700: { regs.a[7] -= 4;
2701: { CPTR spa = regs.a[7];
2702: put_long(spa,m68k_getpc());
2703: m68k_setpc(srca);
2704: }}}}}}
2705: void op_4ea0(UWORD opcode)
2706: {
2707: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2708: {{ regs.a[srcreg] -= 4;
2709: { CPTR srca = regs.a[srcreg];
2710: { regs.a[7] -= 4;
2711: { CPTR spa = regs.a[7];
2712: put_long(spa,m68k_getpc());
2713: m68k_setpc(srca);
2714: }}}}}}
2715: void op_4ea8(UWORD opcode)
2716: {
2717: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2718: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2719: { regs.a[7] -= 4;
2720: { CPTR spa = regs.a[7];
2721: put_long(spa,m68k_getpc());
2722: m68k_setpc(srca);
2723: }}}}}
2724: void op_4eb0(UWORD opcode)
2725: {
2726: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2727: {{ CPTR srca = regs.a[srcreg];
2728: UWORD srcdp = nextiword();
2729: srca += (LONG)(BYTE)(srcdp & 0xFF);
2730: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2731: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2732: srca += srcdpr;
2733: { regs.a[7] -= 4;
2734: { CPTR spa = regs.a[7];
2735: put_long(spa,m68k_getpc());
2736: m68k_setpc(srca);
2737: }}}}}}
2738: void op_4eb8(UWORD opcode)
2739: {
2740: {{ CPTR srca = (LONG)(WORD)nextiword();
2741: { regs.a[7] -= 4;
2742: { CPTR spa = regs.a[7];
2743: put_long(spa,m68k_getpc());
2744: m68k_setpc(srca);
2745: }}}}}
2746: void op_4eb9(UWORD opcode)
2747: {
2748: {{ CPTR srca = nextilong();
2749: { regs.a[7] -= 4;
2750: { CPTR spa = regs.a[7];
2751: put_long(spa,m68k_getpc());
2752: m68k_setpc(srca);
2753: }}}}}
2754: void op_4eba(UWORD opcode)
2755: {
2756: {{ CPTR srca = m68k_getpc();
2757: srca += (LONG)(WORD)nextiword();
2758: { regs.a[7] -= 4;
2759: { CPTR spa = regs.a[7];
2760: put_long(spa,m68k_getpc());
2761: m68k_setpc(srca);
2762: }}}}}
2763: void op_4ebb(UWORD opcode)
2764: {
2765: {{ CPTR srca = m68k_getpc();
2766: UWORD srcdp = nextiword();
2767: srca += (LONG)(BYTE)(srcdp & 0xFF);
2768: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2769: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2770: srca += srcdpr;
2771: { regs.a[7] -= 4;
2772: { CPTR spa = regs.a[7];
2773: put_long(spa,m68k_getpc());
2774: m68k_setpc(srca);
2775: }}}}}}
2776: void op_4ed0(UWORD opcode)
2777: {
2778: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2779: {{ CPTR srca = regs.a[srcreg];
2780: m68k_setpc(srca);
2781: }}}
2782: void op_4ed8(UWORD opcode)
2783: {
2784: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2785: {{ CPTR srca = regs.a[srcreg];
2786: { regs.a[srcreg] += 4;
2787: m68k_setpc(srca);
2788: }}}}
2789: void op_4ee0(UWORD opcode)
2790: {
2791: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2792: {{ regs.a[srcreg] -= 4;
2793: { CPTR srca = regs.a[srcreg];
2794: m68k_setpc(srca);
2795: }}}}
2796: void op_4ee8(UWORD opcode)
2797: {
2798: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2799: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
2800: m68k_setpc(srca);
2801: }}}
2802: void op_4ef0(UWORD opcode)
2803: {
2804: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2805: {{ CPTR srca = regs.a[srcreg];
2806: UWORD srcdp = nextiword();
2807: srca += (LONG)(BYTE)(srcdp & 0xFF);
2808: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2809: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2810: srca += srcdpr;
2811: m68k_setpc(srca);
2812: }}}}
2813: void op_4ef8(UWORD opcode)
2814: {
2815: {{ CPTR srca = (LONG)(WORD)nextiword();
2816: m68k_setpc(srca);
2817: }}}
2818: void op_4ef9(UWORD opcode)
2819: {
2820: {{ CPTR srca = nextilong();
2821: m68k_setpc(srca);
2822: }}}
2823: void op_4efa(UWORD opcode)
2824: {
2825: {{ CPTR srca = m68k_getpc();
2826: srca += (LONG)(WORD)nextiword();
2827: m68k_setpc(srca);
2828: }}}
2829: void op_4efb(UWORD opcode)
2830: {
2831: {{ CPTR srca = m68k_getpc();
2832: UWORD srcdp = nextiword();
2833: srca += (LONG)(BYTE)(srcdp & 0xFF);
2834: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12];
2835: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr;
2836: srca += srcdpr;
2837: m68k_setpc(srca);
2838: }}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.