|
|
1.1 root 1: #include "config.h"
2: #include "amiga.h"
3: #include "options.h"
4: #include <stdlib.h>
5: #include "memory.h"
6: #include "custom.h"
7: #include "newcpu.h"
8: #include "cputbl.h"
9: void op_e000(UWORD opcode)
10: {
11: ULONG srcreg = 8;
12: ULONG dstreg = (opcode & 7) >> 0;
13: {{ ULONG cnt = srcreg;
14: { BYTE data = regs.d[dstreg];
15: { UBYTE val = data;
16: cnt &= 63;
17: regs.v = 0;
18: { ULONG cmask = 0x80;
19: ULONG sign = cmask & val;
20: for(;cnt;--cnt){
21: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
22: }
23: regs.n = sign != 0;
24: regs.z = val == 0;
25: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
26: }}}}}}
27: void op_e008(UWORD opcode)
28: {
29: ULONG srcreg = 8;
30: ULONG dstreg = (opcode & 7) >> 0;
31: {{ ULONG cnt = srcreg;
32: { BYTE data = regs.d[dstreg];
33: { UBYTE val = data;
34: cnt &= 63;
35: { int carry = 0;
36: for(;cnt;--cnt){
37: carry=val&1; val >>= 1;
38: }
39: regs.v = regs.c = 0;
40: regs.z = ((BYTE)(val)) == 0;
41: regs.n = ((BYTE)(val)) < 0;
42: regs.c = regs.x = carry!=0;
43: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
44: }}}}}}
45: void op_e010(UWORD opcode)
46: {
47: ULONG srcreg = 8;
48: ULONG dstreg = (opcode & 7) >> 0;
49: {{ ULONG cnt = srcreg;
50: { BYTE data = regs.d[dstreg];
51: { UBYTE val = data;
52: cnt &= 63;
53: { int carry = 0;
54: ULONG cmask = 0x80;
55: for(;cnt;--cnt){
56: carry=val&1; val >>= 1;
57: if(regs.x) val |= cmask;
58: regs.x = carry != 0;
59: }
60: regs.v = regs.c = 0;
61: regs.z = ((BYTE)(val)) == 0;
62: regs.n = ((BYTE)(val)) < 0;
63: regs.x = regs.c = carry!=0;
64: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
65: }}}}}}
66: void op_e018(UWORD opcode)
67: {
68: ULONG srcreg = 8;
69: ULONG dstreg = (opcode & 7) >> 0;
70: {{ ULONG cnt = srcreg;
71: { BYTE data = regs.d[dstreg];
72: { UBYTE val = data;
73: cnt &= 63;
74: { int carry = 0;
75: ULONG cmask = 0x80;
76: for(;cnt;--cnt){
77: carry=val&1; val = (ULONG)val >> 1;
78: if(carry) val |= cmask;
79: }
80: regs.v = regs.c = 0;
81: regs.z = ((BYTE)(val)) == 0;
82: regs.n = ((BYTE)(val)) < 0;
83: regs.c = carry!=0;
84: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
85: }}}}}}
86: void op_e020(UWORD opcode)
87: {
88: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
89: ULONG dstreg = (opcode & 7) >> 0;
90: {{ BYTE cnt = regs.d[srcreg];
91: { BYTE data = regs.d[dstreg];
92: { UBYTE val = data;
93: cnt &= 63;
94: regs.v = 0;
95: { ULONG cmask = 0x80;
96: ULONG sign = cmask & val;
97: for(;cnt;--cnt){
98: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
99: }
100: regs.n = sign != 0;
101: regs.z = val == 0;
102: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
103: }}}}}}
104: void op_e028(UWORD opcode)
105: {
106: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
107: ULONG dstreg = (opcode & 7) >> 0;
108: {{ BYTE cnt = regs.d[srcreg];
109: { BYTE data = regs.d[dstreg];
110: { UBYTE val = data;
111: cnt &= 63;
112: { int carry = 0;
113: for(;cnt;--cnt){
114: carry=val&1; val >>= 1;
115: }
116: regs.v = regs.c = 0;
117: regs.z = ((BYTE)(val)) == 0;
118: regs.n = ((BYTE)(val)) < 0;
119: regs.c = regs.x = carry!=0;
120: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
121: }}}}}}
122: void op_e030(UWORD opcode)
123: {
124: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
125: ULONG dstreg = (opcode & 7) >> 0;
126: {{ BYTE cnt = regs.d[srcreg];
127: { BYTE data = regs.d[dstreg];
128: { UBYTE val = data;
129: cnt &= 63;
130: { int carry = 0;
131: ULONG cmask = 0x80;
132: for(;cnt;--cnt){
133: carry=val&1; val >>= 1;
134: if(regs.x) val |= cmask;
135: regs.x = carry != 0;
136: }
137: regs.v = regs.c = 0;
138: regs.z = ((BYTE)(val)) == 0;
139: regs.n = ((BYTE)(val)) < 0;
140: regs.x = regs.c = carry!=0;
141: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
142: }}}}}}
143: void op_e038(UWORD opcode)
144: {
145: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
146: ULONG dstreg = (opcode & 7) >> 0;
147: {{ BYTE cnt = regs.d[srcreg];
148: { BYTE data = regs.d[dstreg];
149: { UBYTE val = data;
150: cnt &= 63;
151: { int carry = 0;
152: ULONG cmask = 0x80;
153: for(;cnt;--cnt){
154: carry=val&1; val = (ULONG)val >> 1;
155: if(carry) val |= cmask;
156: }
157: regs.v = regs.c = 0;
158: regs.z = ((BYTE)(val)) == 0;
159: regs.n = ((BYTE)(val)) < 0;
160: regs.c = carry!=0;
161: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
162: }}}}}}
163: void op_e040(UWORD opcode)
164: {
165: ULONG srcreg = 8;
166: ULONG dstreg = (opcode & 7) >> 0;
167: {{ ULONG cnt = srcreg;
168: { WORD data = regs.d[dstreg];
169: { UWORD val = data;
170: cnt &= 63;
171: regs.v = 0;
172: { ULONG cmask = 0x8000;
173: ULONG sign = cmask & val;
174: for(;cnt;--cnt){
175: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
176: }
177: regs.n = sign != 0;
178: regs.z = val == 0;
179: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
180: }}}}}}
181: void op_e048(UWORD opcode)
182: {
183: ULONG srcreg = 8;
184: ULONG dstreg = (opcode & 7) >> 0;
185: {{ ULONG cnt = srcreg;
186: { WORD data = regs.d[dstreg];
187: { UWORD val = data;
188: cnt &= 63;
189: { int carry = 0;
190: for(;cnt;--cnt){
191: carry=val&1; val >>= 1;
192: }
193: regs.v = regs.c = 0;
194: regs.z = ((WORD)(val)) == 0;
195: regs.n = ((WORD)(val)) < 0;
196: regs.c = regs.x = carry!=0;
197: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
198: }}}}}}
199: void op_e050(UWORD opcode)
200: {
201: ULONG srcreg = 8;
202: ULONG dstreg = (opcode & 7) >> 0;
203: {{ ULONG cnt = srcreg;
204: { WORD data = regs.d[dstreg];
205: { UWORD val = data;
206: cnt &= 63;
207: { int carry = 0;
208: ULONG cmask = 0x8000;
209: for(;cnt;--cnt){
210: carry=val&1; val >>= 1;
211: if(regs.x) val |= cmask;
212: regs.x = carry != 0;
213: }
214: regs.v = regs.c = 0;
215: regs.z = ((WORD)(val)) == 0;
216: regs.n = ((WORD)(val)) < 0;
217: regs.x = regs.c = carry!=0;
218: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
219: }}}}}}
220: void op_e058(UWORD opcode)
221: {
222: ULONG srcreg = 8;
223: ULONG dstreg = (opcode & 7) >> 0;
224: {{ ULONG cnt = srcreg;
225: { WORD data = regs.d[dstreg];
226: { UWORD val = data;
227: cnt &= 63;
228: { int carry = 0;
229: ULONG cmask = 0x8000;
230: for(;cnt;--cnt){
231: carry=val&1; val = (ULONG)val >> 1;
232: if(carry) val |= cmask;
233: }
234: regs.v = regs.c = 0;
235: regs.z = ((WORD)(val)) == 0;
236: regs.n = ((WORD)(val)) < 0;
237: regs.c = carry!=0;
238: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
239: }}}}}}
240: void op_e060(UWORD opcode)
241: {
242: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
243: ULONG dstreg = (opcode & 7) >> 0;
244: {{ WORD cnt = regs.d[srcreg];
245: { WORD data = regs.d[dstreg];
246: { UWORD val = data;
247: cnt &= 63;
248: regs.v = 0;
249: { ULONG cmask = 0x8000;
250: ULONG sign = cmask & val;
251: for(;cnt;--cnt){
252: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
253: }
254: regs.n = sign != 0;
255: regs.z = val == 0;
256: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
257: }}}}}}
258: void op_e068(UWORD opcode)
259: {
260: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
261: ULONG dstreg = (opcode & 7) >> 0;
262: {{ WORD cnt = regs.d[srcreg];
263: { WORD data = regs.d[dstreg];
264: { UWORD val = data;
265: cnt &= 63;
266: { int carry = 0;
267: for(;cnt;--cnt){
268: carry=val&1; val >>= 1;
269: }
270: regs.v = regs.c = 0;
271: regs.z = ((WORD)(val)) == 0;
272: regs.n = ((WORD)(val)) < 0;
273: regs.c = regs.x = carry!=0;
274: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
275: }}}}}}
276: void op_e070(UWORD opcode)
277: {
278: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
279: ULONG dstreg = (opcode & 7) >> 0;
280: {{ WORD cnt = regs.d[srcreg];
281: { WORD data = regs.d[dstreg];
282: { UWORD val = data;
283: cnt &= 63;
284: { int carry = 0;
285: ULONG cmask = 0x8000;
286: for(;cnt;--cnt){
287: carry=val&1; val >>= 1;
288: if(regs.x) val |= cmask;
289: regs.x = carry != 0;
290: }
291: regs.v = regs.c = 0;
292: regs.z = ((WORD)(val)) == 0;
293: regs.n = ((WORD)(val)) < 0;
294: regs.x = regs.c = carry!=0;
295: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
296: }}}}}}
297: void op_e078(UWORD opcode)
298: {
299: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
300: ULONG dstreg = (opcode & 7) >> 0;
301: {{ WORD cnt = regs.d[srcreg];
302: { WORD data = regs.d[dstreg];
303: { UWORD val = data;
304: cnt &= 63;
305: { int carry = 0;
306: ULONG cmask = 0x8000;
307: for(;cnt;--cnt){
308: carry=val&1; val = (ULONG)val >> 1;
309: if(carry) val |= cmask;
310: }
311: regs.v = regs.c = 0;
312: regs.z = ((WORD)(val)) == 0;
313: regs.n = ((WORD)(val)) < 0;
314: regs.c = carry!=0;
315: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
316: }}}}}}
317: void op_e080(UWORD opcode)
318: {
319: ULONG srcreg = 8;
320: ULONG dstreg = (opcode & 7) >> 0;
321: {{ ULONG cnt = srcreg;
322: { LONG data = regs.d[dstreg];
323: { ULONG val = data;
324: cnt &= 63;
325: regs.v = 0;
326: { ULONG cmask = 0x80000000;
327: ULONG sign = cmask & val;
328: for(;cnt;--cnt){
329: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
330: }
331: regs.n = sign != 0;
332: regs.z = val == 0;
333: regs.d[dstreg] = (val);
334: }}}}}}
335: void op_e088(UWORD opcode)
336: {
337: ULONG srcreg = 8;
338: ULONG dstreg = (opcode & 7) >> 0;
339: {{ ULONG cnt = srcreg;
340: { LONG data = regs.d[dstreg];
341: { ULONG val = data;
342: cnt &= 63;
343: { int carry = 0;
344: for(;cnt;--cnt){
345: carry=val&1; val >>= 1;
346: }
347: regs.v = regs.c = 0;
348: regs.z = ((LONG)(val)) == 0;
349: regs.n = ((LONG)(val)) < 0;
350: regs.c = regs.x = carry!=0;
351: regs.d[dstreg] = (val);
352: }}}}}}
353: void op_e090(UWORD opcode)
354: {
355: ULONG srcreg = 8;
356: ULONG dstreg = (opcode & 7) >> 0;
357: {{ ULONG cnt = srcreg;
358: { LONG data = regs.d[dstreg];
359: { ULONG val = data;
360: cnt &= 63;
361: { int carry = 0;
362: ULONG cmask = 0x80000000;
363: for(;cnt;--cnt){
364: carry=val&1; val >>= 1;
365: if(regs.x) val |= cmask;
366: regs.x = carry != 0;
367: }
368: regs.v = regs.c = 0;
369: regs.z = ((LONG)(val)) == 0;
370: regs.n = ((LONG)(val)) < 0;
371: regs.x = regs.c = carry!=0;
372: regs.d[dstreg] = (val);
373: }}}}}}
374: void op_e098(UWORD opcode)
375: {
376: ULONG srcreg = 8;
377: ULONG dstreg = (opcode & 7) >> 0;
378: {{ ULONG cnt = srcreg;
379: { LONG data = regs.d[dstreg];
380: { ULONG val = data;
381: cnt &= 63;
382: { int carry = 0;
383: ULONG cmask = 0x80000000;
384: for(;cnt;--cnt){
385: carry=val&1; val = (ULONG)val >> 1;
386: if(carry) val |= cmask;
387: }
388: regs.v = regs.c = 0;
389: regs.z = ((LONG)(val)) == 0;
390: regs.n = ((LONG)(val)) < 0;
391: regs.c = carry!=0;
392: regs.d[dstreg] = (val);
393: }}}}}}
394: void op_e0a0(UWORD opcode)
395: {
396: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
397: ULONG dstreg = (opcode & 7) >> 0;
398: {{ LONG cnt = regs.d[srcreg];
399: { LONG data = regs.d[dstreg];
400: { ULONG val = data;
401: cnt &= 63;
402: regs.v = 0;
403: { ULONG cmask = 0x80000000;
404: ULONG sign = cmask & val;
405: for(;cnt;--cnt){
406: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
407: }
408: regs.n = sign != 0;
409: regs.z = val == 0;
410: regs.d[dstreg] = (val);
411: }}}}}}
412: void op_e0a8(UWORD opcode)
413: {
414: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
415: ULONG dstreg = (opcode & 7) >> 0;
416: {{ LONG cnt = regs.d[srcreg];
417: { LONG data = regs.d[dstreg];
418: { ULONG val = data;
419: cnt &= 63;
420: { int carry = 0;
421: for(;cnt;--cnt){
422: carry=val&1; val >>= 1;
423: }
424: regs.v = regs.c = 0;
425: regs.z = ((LONG)(val)) == 0;
426: regs.n = ((LONG)(val)) < 0;
427: regs.c = regs.x = carry!=0;
428: regs.d[dstreg] = (val);
429: }}}}}}
430: void op_e0b0(UWORD opcode)
431: {
432: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
433: ULONG dstreg = (opcode & 7) >> 0;
434: {{ LONG cnt = regs.d[srcreg];
435: { LONG data = regs.d[dstreg];
436: { ULONG val = data;
437: cnt &= 63;
438: { int carry = 0;
439: ULONG cmask = 0x80000000;
440: for(;cnt;--cnt){
441: carry=val&1; val >>= 1;
442: if(regs.x) val |= cmask;
443: regs.x = carry != 0;
444: }
445: regs.v = regs.c = 0;
446: regs.z = ((LONG)(val)) == 0;
447: regs.n = ((LONG)(val)) < 0;
448: regs.x = regs.c = carry!=0;
449: regs.d[dstreg] = (val);
450: }}}}}}
451: void op_e0b8(UWORD opcode)
452: {
453: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
454: ULONG dstreg = (opcode & 7) >> 0;
455: {{ LONG cnt = regs.d[srcreg];
456: { LONG data = regs.d[dstreg];
457: { ULONG val = data;
458: cnt &= 63;
459: { int carry = 0;
460: ULONG cmask = 0x80000000;
461: for(;cnt;--cnt){
462: carry=val&1; val = (ULONG)val >> 1;
463: if(carry) val |= cmask;
464: }
465: regs.v = regs.c = 0;
466: regs.z = ((LONG)(val)) == 0;
467: regs.n = ((LONG)(val)) < 0;
468: regs.c = carry!=0;
469: regs.d[dstreg] = (val);
470: }}}}}}
471: void op_e0d0(UWORD opcode)
472: {
473: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
474: {{ CPTR dataa = regs.a[srcreg];
475: WORD data = get_word(dataa);
476: regs.v = 0;
477: { UWORD val = data;
478: ULONG cmask = 0x8000;
479: ULONG sign = cmask & val;
480: regs.c=regs.x=val&1; val = (val >> 1) | sign;
481: regs.n = sign != 0;
482: regs.z = val == 0;
483: put_word(dataa,val);
484: }}}}
485: void op_e0d8(UWORD opcode)
486: {
487: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
488: {{ CPTR dataa = regs.a[srcreg];
489: WORD data = get_word(dataa);
490: { regs.a[srcreg] += 2;
491: regs.v = 0;
492: { UWORD val = data;
493: ULONG cmask = 0x8000;
494: ULONG sign = cmask & val;
495: regs.c=regs.x=val&1; val = (val >> 1) | sign;
496: regs.n = sign != 0;
497: regs.z = val == 0;
498: put_word(dataa,val);
499: }}}}}
500: void op_e0e0(UWORD opcode)
501: {
502: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
503: {{ regs.a[srcreg] -= 2;
504: { CPTR dataa = regs.a[srcreg];
505: WORD data = get_word(dataa);
506: regs.v = 0;
507: { UWORD val = data;
508: ULONG cmask = 0x8000;
509: ULONG sign = cmask & val;
510: regs.c=regs.x=val&1; val = (val >> 1) | sign;
511: regs.n = sign != 0;
512: regs.z = val == 0;
513: put_word(dataa,val);
514: }}}}}
515: void op_e0e8(UWORD opcode)
516: {
517: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
518: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
519: WORD data = get_word(dataa);
520: regs.v = 0;
521: { UWORD val = data;
522: ULONG cmask = 0x8000;
523: ULONG sign = cmask & val;
524: regs.c=regs.x=val&1; val = (val >> 1) | sign;
525: regs.n = sign != 0;
526: regs.z = val == 0;
527: put_word(dataa,val);
528: }}}}
529: void op_e0f0(UWORD opcode)
530: {
531: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
532: {{ CPTR dataa = regs.a[srcreg];
533: UWORD datadp = nextiword();
534: dataa += (LONG)(BYTE)(datadp & 0xFF);
535: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12];
536: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr;
537: dataa += datadpr;
538: { WORD data = get_word(dataa);
539: regs.v = 0;
540: { UWORD val = data;
541: ULONG cmask = 0x8000;
542: ULONG sign = cmask & val;
543: regs.c=regs.x=val&1; val = (val >> 1) | sign;
544: regs.n = sign != 0;
545: regs.z = val == 0;
546: put_word(dataa,val);
547: }}}}}}
548: void op_e0f8(UWORD opcode)
549: {
550: {{ CPTR dataa = (LONG)(WORD)nextiword();
551: WORD data = get_word(dataa);
552: regs.v = 0;
553: { UWORD val = data;
554: ULONG cmask = 0x8000;
555: ULONG sign = cmask & val;
556: regs.c=regs.x=val&1; val = (val >> 1) | sign;
557: regs.n = sign != 0;
558: regs.z = val == 0;
559: put_word(dataa,val);
560: }}}}
561: void op_e0f9(UWORD opcode)
562: {
563: {{ CPTR dataa = nextilong();
564: WORD data = get_word(dataa);
565: regs.v = 0;
566: { UWORD val = data;
567: ULONG cmask = 0x8000;
568: ULONG sign = cmask & val;
569: regs.c=regs.x=val&1; val = (val >> 1) | sign;
570: regs.n = sign != 0;
571: regs.z = val == 0;
572: put_word(dataa,val);
573: }}}}
574: void op_e100(UWORD opcode)
575: {
576: ULONG srcreg = 8;
577: ULONG dstreg = (opcode & 7) >> 0;
578: {{ ULONG cnt = srcreg;
579: { BYTE data = regs.d[dstreg];
580: { UBYTE val = data;
581: cnt &= 63;
582: regs.v = 0;
583: { ULONG cmask = 0x80;
584: ULONG sign = cmask & val;
585: for(;cnt;--cnt){
586: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
587: if ((val&cmask)!=sign)regs.v=1;
588: }
589: regs.n = (val&cmask) != 0;
590: regs.z = val == 0;
591: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
592: }}}}}}
593: void op_e108(UWORD opcode)
594: {
595: ULONG srcreg = 8;
596: ULONG dstreg = (opcode & 7) >> 0;
597: {{ ULONG cnt = srcreg;
598: { BYTE data = regs.d[dstreg];
599: { UBYTE val = data;
600: cnt &= 63;
601: { int carry = 0;
602: ULONG cmask = 0x80;
603: for(;cnt;--cnt){
604: carry=val&cmask; val <<= 1;
605: }
606: regs.v = regs.c = 0;
607: regs.z = ((BYTE)(val)) == 0;
608: regs.n = ((BYTE)(val)) < 0;
609: regs.c = regs.x = carry!=0;
610: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
611: }}}}}}
612: void op_e110(UWORD opcode)
613: {
614: ULONG srcreg = 8;
615: ULONG dstreg = (opcode & 7) >> 0;
616: {{ ULONG cnt = srcreg;
617: { BYTE data = regs.d[dstreg];
618: { UBYTE val = data;
619: cnt &= 63;
620: { int carry = 0;
621: ULONG cmask = 0x80;
622: for(;cnt;--cnt){
623: carry=val&cmask; val <<= 1;
624: if(regs.x) val |= 1;
625: regs.x = carry != 0;
626: }
627: regs.v = regs.c = 0;
628: regs.z = ((BYTE)(val)) == 0;
629: regs.n = ((BYTE)(val)) < 0;
630: regs.x = regs.c = carry!=0;
631: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
632: }}}}}}
633: void op_e118(UWORD opcode)
634: {
635: ULONG srcreg = 8;
636: ULONG dstreg = (opcode & 7) >> 0;
637: {{ ULONG cnt = srcreg;
638: { BYTE data = regs.d[dstreg];
639: { UBYTE val = data;
640: cnt &= 63;
641: { int carry = 0;
642: ULONG cmask = 0x80;
643: for(;cnt;--cnt){
644: carry=val&cmask; val <<= 1;
645: if(carry) val |= 1;
646: }
647: regs.v = regs.c = 0;
648: regs.z = ((BYTE)(val)) == 0;
649: regs.n = ((BYTE)(val)) < 0;
650: regs.c = carry!=0;
651: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
652: }}}}}}
653: void op_e120(UWORD opcode)
654: {
655: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
656: ULONG dstreg = (opcode & 7) >> 0;
657: {{ BYTE cnt = regs.d[srcreg];
658: { BYTE data = regs.d[dstreg];
659: { UBYTE val = data;
660: cnt &= 63;
661: regs.v = 0;
662: { ULONG cmask = 0x80;
663: ULONG sign = cmask & val;
664: for(;cnt;--cnt){
665: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
666: if ((val&cmask)!=sign)regs.v=1;
667: }
668: regs.n = (val&cmask) != 0;
669: regs.z = val == 0;
670: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
671: }}}}}}
672: void op_e128(UWORD opcode)
673: {
674: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
675: ULONG dstreg = (opcode & 7) >> 0;
676: {{ BYTE cnt = regs.d[srcreg];
677: { BYTE data = regs.d[dstreg];
678: { UBYTE val = data;
679: cnt &= 63;
680: { int carry = 0;
681: ULONG cmask = 0x80;
682: for(;cnt;--cnt){
683: carry=val&cmask; val <<= 1;
684: }
685: regs.v = regs.c = 0;
686: regs.z = ((BYTE)(val)) == 0;
687: regs.n = ((BYTE)(val)) < 0;
688: regs.c = regs.x = carry!=0;
689: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
690: }}}}}}
691: void op_e130(UWORD opcode)
692: {
693: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
694: ULONG dstreg = (opcode & 7) >> 0;
695: {{ BYTE cnt = regs.d[srcreg];
696: { BYTE data = regs.d[dstreg];
697: { UBYTE val = data;
698: cnt &= 63;
699: { int carry = 0;
700: ULONG cmask = 0x80;
701: for(;cnt;--cnt){
702: carry=val&cmask; val <<= 1;
703: if(regs.x) val |= 1;
704: regs.x = carry != 0;
705: }
706: regs.v = regs.c = 0;
707: regs.z = ((BYTE)(val)) == 0;
708: regs.n = ((BYTE)(val)) < 0;
709: regs.x = regs.c = carry!=0;
710: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
711: }}}}}}
712: void op_e138(UWORD opcode)
713: {
714: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
715: ULONG dstreg = (opcode & 7) >> 0;
716: {{ BYTE cnt = regs.d[srcreg];
717: { BYTE data = regs.d[dstreg];
718: { UBYTE val = data;
719: cnt &= 63;
720: { int carry = 0;
721: ULONG cmask = 0x80;
722: for(;cnt;--cnt){
723: carry=val&cmask; val <<= 1;
724: if(carry) val |= 1;
725: }
726: regs.v = regs.c = 0;
727: regs.z = ((BYTE)(val)) == 0;
728: regs.n = ((BYTE)(val)) < 0;
729: regs.c = carry!=0;
730: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
731: }}}}}}
732: void op_e140(UWORD opcode)
733: {
734: ULONG srcreg = 8;
735: ULONG dstreg = (opcode & 7) >> 0;
736: {{ ULONG cnt = srcreg;
737: { WORD data = regs.d[dstreg];
738: { UWORD val = data;
739: cnt &= 63;
740: regs.v = 0;
741: { ULONG cmask = 0x8000;
742: ULONG sign = cmask & val;
743: for(;cnt;--cnt){
744: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
745: if ((val&cmask)!=sign)regs.v=1;
746: }
747: regs.n = (val&cmask) != 0;
748: regs.z = val == 0;
749: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
750: }}}}}}
751: void op_e148(UWORD opcode)
752: {
753: ULONG srcreg = 8;
754: ULONG dstreg = (opcode & 7) >> 0;
755: {{ ULONG cnt = srcreg;
756: { WORD data = regs.d[dstreg];
757: { UWORD val = data;
758: cnt &= 63;
759: { int carry = 0;
760: ULONG cmask = 0x8000;
761: for(;cnt;--cnt){
762: carry=val&cmask; val <<= 1;
763: }
764: regs.v = regs.c = 0;
765: regs.z = ((WORD)(val)) == 0;
766: regs.n = ((WORD)(val)) < 0;
767: regs.c = regs.x = carry!=0;
768: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
769: }}}}}}
770: void op_e150(UWORD opcode)
771: {
772: ULONG srcreg = 8;
773: ULONG dstreg = (opcode & 7) >> 0;
774: {{ ULONG cnt = srcreg;
775: { WORD data = regs.d[dstreg];
776: { UWORD val = data;
777: cnt &= 63;
778: { int carry = 0;
779: ULONG cmask = 0x8000;
780: for(;cnt;--cnt){
781: carry=val&cmask; val <<= 1;
782: if(regs.x) val |= 1;
783: regs.x = carry != 0;
784: }
785: regs.v = regs.c = 0;
786: regs.z = ((WORD)(val)) == 0;
787: regs.n = ((WORD)(val)) < 0;
788: regs.x = regs.c = carry!=0;
789: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
790: }}}}}}
791: void op_e158(UWORD opcode)
792: {
793: ULONG srcreg = 8;
794: ULONG dstreg = (opcode & 7) >> 0;
795: {{ ULONG cnt = srcreg;
796: { WORD data = regs.d[dstreg];
797: { UWORD val = data;
798: cnt &= 63;
799: { int carry = 0;
800: ULONG cmask = 0x8000;
801: for(;cnt;--cnt){
802: carry=val&cmask; val <<= 1;
803: if(carry) val |= 1;
804: }
805: regs.v = regs.c = 0;
806: regs.z = ((WORD)(val)) == 0;
807: regs.n = ((WORD)(val)) < 0;
808: regs.c = carry!=0;
809: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
810: }}}}}}
811: void op_e160(UWORD opcode)
812: {
813: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
814: ULONG dstreg = (opcode & 7) >> 0;
815: {{ WORD cnt = regs.d[srcreg];
816: { WORD data = regs.d[dstreg];
817: { UWORD val = data;
818: cnt &= 63;
819: regs.v = 0;
820: { ULONG cmask = 0x8000;
821: ULONG sign = cmask & val;
822: for(;cnt;--cnt){
823: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
824: if ((val&cmask)!=sign)regs.v=1;
825: }
826: regs.n = (val&cmask) != 0;
827: regs.z = val == 0;
828: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
829: }}}}}}
830: void op_e168(UWORD opcode)
831: {
832: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
833: ULONG dstreg = (opcode & 7) >> 0;
834: {{ WORD cnt = regs.d[srcreg];
835: { WORD data = regs.d[dstreg];
836: { UWORD val = data;
837: cnt &= 63;
838: { int carry = 0;
839: ULONG cmask = 0x8000;
840: for(;cnt;--cnt){
841: carry=val&cmask; val <<= 1;
842: }
843: regs.v = regs.c = 0;
844: regs.z = ((WORD)(val)) == 0;
845: regs.n = ((WORD)(val)) < 0;
846: regs.c = regs.x = carry!=0;
847: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
848: }}}}}}
849: void op_e170(UWORD opcode)
850: {
851: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
852: ULONG dstreg = (opcode & 7) >> 0;
853: {{ WORD cnt = regs.d[srcreg];
854: { WORD data = regs.d[dstreg];
855: { UWORD val = data;
856: cnt &= 63;
857: { int carry = 0;
858: ULONG cmask = 0x8000;
859: for(;cnt;--cnt){
860: carry=val&cmask; val <<= 1;
861: if(regs.x) val |= 1;
862: regs.x = carry != 0;
863: }
864: regs.v = regs.c = 0;
865: regs.z = ((WORD)(val)) == 0;
866: regs.n = ((WORD)(val)) < 0;
867: regs.x = regs.c = carry!=0;
868: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
869: }}}}}}
870: void op_e178(UWORD opcode)
871: {
872: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
873: ULONG dstreg = (opcode & 7) >> 0;
874: {{ WORD cnt = regs.d[srcreg];
875: { WORD data = regs.d[dstreg];
876: { UWORD val = data;
877: cnt &= 63;
878: { int carry = 0;
879: ULONG cmask = 0x8000;
880: for(;cnt;--cnt){
881: carry=val&cmask; val <<= 1;
882: if(carry) val |= 1;
883: }
884: regs.v = regs.c = 0;
885: regs.z = ((WORD)(val)) == 0;
886: regs.n = ((WORD)(val)) < 0;
887: regs.c = carry!=0;
888: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
889: }}}}}}
890: void op_e180(UWORD opcode)
891: {
892: ULONG srcreg = 8;
893: ULONG dstreg = (opcode & 7) >> 0;
894: {{ ULONG cnt = srcreg;
895: { LONG data = regs.d[dstreg];
896: { ULONG val = data;
897: cnt &= 63;
898: regs.v = 0;
899: { ULONG cmask = 0x80000000;
900: ULONG sign = cmask & val;
901: for(;cnt;--cnt){
902: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
903: if ((val&cmask)!=sign)regs.v=1;
904: }
905: regs.n = (val&cmask) != 0;
906: regs.z = val == 0;
907: regs.d[dstreg] = (val);
908: }}}}}}
909: void op_e188(UWORD opcode)
910: {
911: ULONG srcreg = 8;
912: ULONG dstreg = (opcode & 7) >> 0;
913: {{ ULONG cnt = srcreg;
914: { LONG data = regs.d[dstreg];
915: { ULONG val = data;
916: cnt &= 63;
917: { int carry = 0;
918: ULONG cmask = 0x80000000;
919: for(;cnt;--cnt){
920: carry=val&cmask; val <<= 1;
921: }
922: regs.v = regs.c = 0;
923: regs.z = ((LONG)(val)) == 0;
924: regs.n = ((LONG)(val)) < 0;
925: regs.c = regs.x = carry!=0;
926: regs.d[dstreg] = (val);
927: }}}}}}
928: void op_e190(UWORD opcode)
929: {
930: ULONG srcreg = 8;
931: ULONG dstreg = (opcode & 7) >> 0;
932: {{ ULONG cnt = srcreg;
933: { LONG data = regs.d[dstreg];
934: { ULONG val = data;
935: cnt &= 63;
936: { int carry = 0;
937: ULONG cmask = 0x80000000;
938: for(;cnt;--cnt){
939: carry=val&cmask; val <<= 1;
940: if(regs.x) val |= 1;
941: regs.x = carry != 0;
942: }
943: regs.v = regs.c = 0;
944: regs.z = ((LONG)(val)) == 0;
945: regs.n = ((LONG)(val)) < 0;
946: regs.x = regs.c = carry!=0;
947: regs.d[dstreg] = (val);
948: }}}}}}
949: void op_e198(UWORD opcode)
950: {
951: ULONG srcreg = 8;
952: ULONG dstreg = (opcode & 7) >> 0;
953: {{ ULONG cnt = srcreg;
954: { LONG data = regs.d[dstreg];
955: { ULONG val = data;
956: cnt &= 63;
957: { int carry = 0;
958: ULONG cmask = 0x80000000;
959: for(;cnt;--cnt){
960: carry=val&cmask; val <<= 1;
961: if(carry) val |= 1;
962: }
963: regs.v = regs.c = 0;
964: regs.z = ((LONG)(val)) == 0;
965: regs.n = ((LONG)(val)) < 0;
966: regs.c = carry!=0;
967: regs.d[dstreg] = (val);
968: }}}}}}
969: void op_e1a0(UWORD opcode)
970: {
971: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
972: ULONG dstreg = (opcode & 7) >> 0;
973: {{ LONG cnt = regs.d[srcreg];
974: { LONG data = regs.d[dstreg];
975: { ULONG val = data;
976: cnt &= 63;
977: regs.v = 0;
978: { ULONG cmask = 0x80000000;
979: ULONG sign = cmask & val;
980: for(;cnt;--cnt){
981: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
982: if ((val&cmask)!=sign)regs.v=1;
983: }
984: regs.n = (val&cmask) != 0;
985: regs.z = val == 0;
986: regs.d[dstreg] = (val);
987: }}}}}}
988: void op_e1a8(UWORD opcode)
989: {
990: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
991: ULONG dstreg = (opcode & 7) >> 0;
992: {{ LONG cnt = regs.d[srcreg];
993: { LONG data = regs.d[dstreg];
994: { ULONG val = data;
995: cnt &= 63;
996: { int carry = 0;
997: ULONG cmask = 0x80000000;
998: for(;cnt;--cnt){
999: carry=val&cmask; val <<= 1;
1000: }
1001: regs.v = regs.c = 0;
1002: regs.z = ((LONG)(val)) == 0;
1003: regs.n = ((LONG)(val)) < 0;
1004: regs.c = regs.x = carry!=0;
1005: regs.d[dstreg] = (val);
1006: }}}}}}
1007: void op_e1b0(UWORD opcode)
1008: {
1009: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
1010: ULONG dstreg = (opcode & 7) >> 0;
1011: {{ LONG cnt = regs.d[srcreg];
1012: { LONG data = regs.d[dstreg];
1013: { ULONG val = data;
1014: cnt &= 63;
1015: { int carry = 0;
1016: ULONG cmask = 0x80000000;
1017: for(;cnt;--cnt){
1018: carry=val&cmask; val <<= 1;
1019: if(regs.x) val |= 1;
1020: regs.x = carry != 0;
1021: }
1022: regs.v = regs.c = 0;
1023: regs.z = ((LONG)(val)) == 0;
1024: regs.n = ((LONG)(val)) < 0;
1025: regs.x = regs.c = carry!=0;
1026: regs.d[dstreg] = (val);
1027: }}}}}}
1028: void op_e1b8(UWORD opcode)
1029: {
1030: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9);
1031: ULONG dstreg = (opcode & 7) >> 0;
1032: {{ LONG cnt = regs.d[srcreg];
1033: { LONG data = regs.d[dstreg];
1034: { ULONG val = data;
1035: cnt &= 63;
1036: { int carry = 0;
1037: ULONG cmask = 0x80000000;
1038: for(;cnt;--cnt){
1039: carry=val&cmask; val <<= 1;
1040: if(carry) val |= 1;
1041: }
1042: regs.v = regs.c = 0;
1043: regs.z = ((LONG)(val)) == 0;
1044: regs.n = ((LONG)(val)) < 0;
1045: regs.c = carry!=0;
1046: regs.d[dstreg] = (val);
1047: }}}}}}
1048: void op_e1d0(UWORD opcode)
1049: {
1050: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1051: {{ CPTR dataa = regs.a[srcreg];
1052: WORD data = get_word(dataa);
1053: regs.v = 0;
1054: { UWORD val = data;
1055: ULONG cmask = 0x8000;
1056: ULONG sign = cmask & val;
1057: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1058: if ((val&cmask)!=sign)regs.v=1;
1059: regs.n = (val&cmask) != 0;
1060: regs.z = val == 0;
1061: put_word(dataa,val);
1062: }}}}
1063: void op_e1d8(UWORD opcode)
1064: {
1065: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1066: {{ CPTR dataa = regs.a[srcreg];
1067: WORD data = get_word(dataa);
1068: { regs.a[srcreg] += 2;
1069: regs.v = 0;
1070: { UWORD val = data;
1071: ULONG cmask = 0x8000;
1072: ULONG sign = cmask & val;
1073: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1074: if ((val&cmask)!=sign)regs.v=1;
1075: regs.n = (val&cmask) != 0;
1076: regs.z = val == 0;
1077: put_word(dataa,val);
1078: }}}}}
1079: void op_e1e0(UWORD opcode)
1080: {
1081: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1082: {{ regs.a[srcreg] -= 2;
1083: { CPTR dataa = regs.a[srcreg];
1084: WORD data = get_word(dataa);
1085: regs.v = 0;
1086: { UWORD val = data;
1087: ULONG cmask = 0x8000;
1088: ULONG sign = cmask & val;
1089: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1090: if ((val&cmask)!=sign)regs.v=1;
1091: regs.n = (val&cmask) != 0;
1092: regs.z = val == 0;
1093: put_word(dataa,val);
1094: }}}}}
1095: void op_e1e8(UWORD opcode)
1096: {
1097: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1098: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
1099: WORD data = get_word(dataa);
1100: regs.v = 0;
1101: { UWORD val = data;
1102: ULONG cmask = 0x8000;
1103: ULONG sign = cmask & val;
1104: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1105: if ((val&cmask)!=sign)regs.v=1;
1106: regs.n = (val&cmask) != 0;
1107: regs.z = val == 0;
1108: put_word(dataa,val);
1109: }}}}
1110: void op_e1f0(UWORD opcode)
1111: {
1112: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1113: {{ CPTR dataa = regs.a[srcreg];
1114: UWORD datadp = nextiword();
1115: dataa += (LONG)(BYTE)(datadp & 0xFF);
1116: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12];
1117: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr;
1118: dataa += datadpr;
1119: { WORD data = get_word(dataa);
1120: regs.v = 0;
1121: { UWORD val = data;
1122: ULONG cmask = 0x8000;
1123: ULONG sign = cmask & val;
1124: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1125: if ((val&cmask)!=sign)regs.v=1;
1126: regs.n = (val&cmask) != 0;
1127: regs.z = val == 0;
1128: put_word(dataa,val);
1129: }}}}}}
1130: void op_e1f8(UWORD opcode)
1131: {
1132: {{ CPTR dataa = (LONG)(WORD)nextiword();
1133: WORD data = get_word(dataa);
1134: regs.v = 0;
1135: { UWORD val = data;
1136: ULONG cmask = 0x8000;
1137: ULONG sign = cmask & val;
1138: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1139: if ((val&cmask)!=sign)regs.v=1;
1140: regs.n = (val&cmask) != 0;
1141: regs.z = val == 0;
1142: put_word(dataa,val);
1143: }}}}
1144: void op_e1f9(UWORD opcode)
1145: {
1146: {{ CPTR dataa = nextilong();
1147: WORD data = get_word(dataa);
1148: regs.v = 0;
1149: { UWORD val = data;
1150: ULONG cmask = 0x8000;
1151: ULONG sign = cmask & val;
1152: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1153: if ((val&cmask)!=sign)regs.v=1;
1154: regs.n = (val&cmask) != 0;
1155: regs.z = val == 0;
1156: put_word(dataa,val);
1157: }}}}
1158: void op_e200(UWORD opcode)
1159: {
1160: ULONG srcreg = 1;
1161: ULONG dstreg = (opcode & 7) >> 0;
1162: {{ ULONG cnt = srcreg;
1163: { BYTE data = regs.d[dstreg];
1164: { UBYTE val = data;
1165: cnt &= 63;
1166: regs.v = 0;
1167: { ULONG cmask = 0x80;
1168: ULONG sign = cmask & val;
1169: for(;cnt;--cnt){
1170: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
1171: }
1172: regs.n = sign != 0;
1173: regs.z = val == 0;
1174: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1175: }}}}}}
1176: void op_e208(UWORD opcode)
1177: {
1178: ULONG srcreg = 1;
1179: ULONG dstreg = (opcode & 7) >> 0;
1180: {{ ULONG cnt = srcreg;
1181: { BYTE data = regs.d[dstreg];
1182: { UBYTE val = data;
1183: cnt &= 63;
1184: { int carry = 0;
1185: for(;cnt;--cnt){
1186: carry=val&1; val >>= 1;
1187: }
1188: regs.v = regs.c = 0;
1189: regs.z = ((BYTE)(val)) == 0;
1190: regs.n = ((BYTE)(val)) < 0;
1191: regs.c = regs.x = carry!=0;
1192: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1193: }}}}}}
1194: void op_e210(UWORD opcode)
1195: {
1196: ULONG srcreg = 1;
1197: ULONG dstreg = (opcode & 7) >> 0;
1198: {{ ULONG cnt = srcreg;
1199: { BYTE data = regs.d[dstreg];
1200: { UBYTE val = data;
1201: cnt &= 63;
1202: { int carry = 0;
1203: ULONG cmask = 0x80;
1204: for(;cnt;--cnt){
1205: carry=val&1; val >>= 1;
1206: if(regs.x) val |= cmask;
1207: regs.x = carry != 0;
1208: }
1209: regs.v = regs.c = 0;
1210: regs.z = ((BYTE)(val)) == 0;
1211: regs.n = ((BYTE)(val)) < 0;
1212: regs.x = regs.c = carry!=0;
1213: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1214: }}}}}}
1215: void op_e218(UWORD opcode)
1216: {
1217: ULONG srcreg = 1;
1218: ULONG dstreg = (opcode & 7) >> 0;
1219: {{ ULONG cnt = srcreg;
1220: { BYTE data = regs.d[dstreg];
1221: { UBYTE val = data;
1222: cnt &= 63;
1223: { int carry = 0;
1224: ULONG cmask = 0x80;
1225: for(;cnt;--cnt){
1226: carry=val&1; val = (ULONG)val >> 1;
1227: if(carry) val |= cmask;
1228: }
1229: regs.v = regs.c = 0;
1230: regs.z = ((BYTE)(val)) == 0;
1231: regs.n = ((BYTE)(val)) < 0;
1232: regs.c = carry!=0;
1233: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1234: }}}}}}
1235: void op_e240(UWORD opcode)
1236: {
1237: ULONG srcreg = 1;
1238: ULONG dstreg = (opcode & 7) >> 0;
1239: {{ ULONG cnt = srcreg;
1240: { WORD data = regs.d[dstreg];
1241: { UWORD val = data;
1242: cnt &= 63;
1243: regs.v = 0;
1244: { ULONG cmask = 0x8000;
1245: ULONG sign = cmask & val;
1246: for(;cnt;--cnt){
1247: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
1248: }
1249: regs.n = sign != 0;
1250: regs.z = val == 0;
1251: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1252: }}}}}}
1253: void op_e248(UWORD opcode)
1254: {
1255: ULONG srcreg = 1;
1256: ULONG dstreg = (opcode & 7) >> 0;
1257: {{ ULONG cnt = srcreg;
1258: { WORD data = regs.d[dstreg];
1259: { UWORD val = data;
1260: cnt &= 63;
1261: { int carry = 0;
1262: for(;cnt;--cnt){
1263: carry=val&1; val >>= 1;
1264: }
1265: regs.v = regs.c = 0;
1266: regs.z = ((WORD)(val)) == 0;
1267: regs.n = ((WORD)(val)) < 0;
1268: regs.c = regs.x = carry!=0;
1269: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1270: }}}}}}
1271: void op_e250(UWORD opcode)
1272: {
1273: ULONG srcreg = 1;
1274: ULONG dstreg = (opcode & 7) >> 0;
1275: {{ ULONG cnt = srcreg;
1276: { WORD data = regs.d[dstreg];
1277: { UWORD val = data;
1278: cnt &= 63;
1279: { int carry = 0;
1280: ULONG cmask = 0x8000;
1281: for(;cnt;--cnt){
1282: carry=val&1; val >>= 1;
1283: if(regs.x) val |= cmask;
1284: regs.x = carry != 0;
1285: }
1286: regs.v = regs.c = 0;
1287: regs.z = ((WORD)(val)) == 0;
1288: regs.n = ((WORD)(val)) < 0;
1289: regs.x = regs.c = carry!=0;
1290: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1291: }}}}}}
1292: void op_e258(UWORD opcode)
1293: {
1294: ULONG srcreg = 1;
1295: ULONG dstreg = (opcode & 7) >> 0;
1296: {{ ULONG cnt = srcreg;
1297: { WORD data = regs.d[dstreg];
1298: { UWORD val = data;
1299: cnt &= 63;
1300: { int carry = 0;
1301: ULONG cmask = 0x8000;
1302: for(;cnt;--cnt){
1303: carry=val&1; val = (ULONG)val >> 1;
1304: if(carry) val |= cmask;
1305: }
1306: regs.v = regs.c = 0;
1307: regs.z = ((WORD)(val)) == 0;
1308: regs.n = ((WORD)(val)) < 0;
1309: regs.c = carry!=0;
1310: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1311: }}}}}}
1312: void op_e280(UWORD opcode)
1313: {
1314: ULONG srcreg = 1;
1315: ULONG dstreg = (opcode & 7) >> 0;
1316: {{ ULONG cnt = srcreg;
1317: { LONG data = regs.d[dstreg];
1318: { ULONG val = data;
1319: cnt &= 63;
1320: regs.v = 0;
1321: { ULONG cmask = 0x80000000;
1322: ULONG sign = cmask & val;
1323: for(;cnt;--cnt){
1324: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
1325: }
1326: regs.n = sign != 0;
1327: regs.z = val == 0;
1328: regs.d[dstreg] = (val);
1329: }}}}}}
1330: void op_e288(UWORD opcode)
1331: {
1332: ULONG srcreg = 1;
1333: ULONG dstreg = (opcode & 7) >> 0;
1334: {{ ULONG cnt = srcreg;
1335: { LONG data = regs.d[dstreg];
1336: { ULONG val = data;
1337: cnt &= 63;
1338: { int carry = 0;
1339: for(;cnt;--cnt){
1340: carry=val&1; val >>= 1;
1341: }
1342: regs.v = regs.c = 0;
1343: regs.z = ((LONG)(val)) == 0;
1344: regs.n = ((LONG)(val)) < 0;
1345: regs.c = regs.x = carry!=0;
1346: regs.d[dstreg] = (val);
1347: }}}}}}
1348: void op_e290(UWORD opcode)
1349: {
1350: ULONG srcreg = 1;
1351: ULONG dstreg = (opcode & 7) >> 0;
1352: {{ ULONG cnt = srcreg;
1353: { LONG data = regs.d[dstreg];
1354: { ULONG val = data;
1355: cnt &= 63;
1356: { int carry = 0;
1357: ULONG cmask = 0x80000000;
1358: for(;cnt;--cnt){
1359: carry=val&1; val >>= 1;
1360: if(regs.x) val |= cmask;
1361: regs.x = carry != 0;
1362: }
1363: regs.v = regs.c = 0;
1364: regs.z = ((LONG)(val)) == 0;
1365: regs.n = ((LONG)(val)) < 0;
1366: regs.x = regs.c = carry!=0;
1367: regs.d[dstreg] = (val);
1368: }}}}}}
1369: void op_e298(UWORD opcode)
1370: {
1371: ULONG srcreg = 1;
1372: ULONG dstreg = (opcode & 7) >> 0;
1373: {{ ULONG cnt = srcreg;
1374: { LONG data = regs.d[dstreg];
1375: { ULONG val = data;
1376: cnt &= 63;
1377: { int carry = 0;
1378: ULONG cmask = 0x80000000;
1379: for(;cnt;--cnt){
1380: carry=val&1; val = (ULONG)val >> 1;
1381: if(carry) val |= cmask;
1382: }
1383: regs.v = regs.c = 0;
1384: regs.z = ((LONG)(val)) == 0;
1385: regs.n = ((LONG)(val)) < 0;
1386: regs.c = carry!=0;
1387: regs.d[dstreg] = (val);
1388: }}}}}}
1389: void op_e2d0(UWORD opcode)
1390: {
1391: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1392: {{ CPTR dataa = regs.a[srcreg];
1393: WORD data = get_word(dataa);
1394: { UWORD val = data;
1395: int carry = val&1;
1396: carry=val&1; val >>= 1;
1397: regs.v = regs.c = 0;
1398: regs.z = ((WORD)(val)) == 0;
1399: regs.n = ((WORD)(val)) < 0;
1400: regs.c = regs.x = carry!=0;
1401: put_word(dataa,val);
1402: }}}}
1403: void op_e2d8(UWORD opcode)
1404: {
1405: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1406: {{ CPTR dataa = regs.a[srcreg];
1407: WORD data = get_word(dataa);
1408: { regs.a[srcreg] += 2;
1409: { UWORD val = data;
1410: int carry = val&1;
1411: carry=val&1; val >>= 1;
1412: regs.v = regs.c = 0;
1413: regs.z = ((WORD)(val)) == 0;
1414: regs.n = ((WORD)(val)) < 0;
1415: regs.c = regs.x = carry!=0;
1416: put_word(dataa,val);
1417: }}}}}
1418: void op_e2e0(UWORD opcode)
1419: {
1420: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1421: {{ regs.a[srcreg] -= 2;
1422: { CPTR dataa = regs.a[srcreg];
1423: WORD data = get_word(dataa);
1424: { UWORD val = data;
1425: int carry = val&1;
1426: carry=val&1; val >>= 1;
1427: regs.v = regs.c = 0;
1428: regs.z = ((WORD)(val)) == 0;
1429: regs.n = ((WORD)(val)) < 0;
1430: regs.c = regs.x = carry!=0;
1431: put_word(dataa,val);
1432: }}}}}
1433: void op_e2e8(UWORD opcode)
1434: {
1435: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1436: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
1437: WORD data = get_word(dataa);
1438: { UWORD val = data;
1439: int carry = val&1;
1440: carry=val&1; val >>= 1;
1441: regs.v = regs.c = 0;
1442: regs.z = ((WORD)(val)) == 0;
1443: regs.n = ((WORD)(val)) < 0;
1444: regs.c = regs.x = carry!=0;
1445: put_word(dataa,val);
1446: }}}}
1447: void op_e2f0(UWORD opcode)
1448: {
1449: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1450: {{ CPTR dataa = regs.a[srcreg];
1451: UWORD datadp = nextiword();
1452: dataa += (LONG)(BYTE)(datadp & 0xFF);
1453: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12];
1454: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr;
1455: dataa += datadpr;
1456: { WORD data = get_word(dataa);
1457: { UWORD val = data;
1458: int carry = val&1;
1459: carry=val&1; val >>= 1;
1460: regs.v = regs.c = 0;
1461: regs.z = ((WORD)(val)) == 0;
1462: regs.n = ((WORD)(val)) < 0;
1463: regs.c = regs.x = carry!=0;
1464: put_word(dataa,val);
1465: }}}}}}
1466: void op_e2f8(UWORD opcode)
1467: {
1468: {{ CPTR dataa = (LONG)(WORD)nextiword();
1469: WORD data = get_word(dataa);
1470: { UWORD val = data;
1471: int carry = val&1;
1472: carry=val&1; val >>= 1;
1473: regs.v = regs.c = 0;
1474: regs.z = ((WORD)(val)) == 0;
1475: regs.n = ((WORD)(val)) < 0;
1476: regs.c = regs.x = carry!=0;
1477: put_word(dataa,val);
1478: }}}}
1479: void op_e2f9(UWORD opcode)
1480: {
1481: {{ CPTR dataa = nextilong();
1482: WORD data = get_word(dataa);
1483: { UWORD val = data;
1484: int carry = val&1;
1485: carry=val&1; val >>= 1;
1486: regs.v = regs.c = 0;
1487: regs.z = ((WORD)(val)) == 0;
1488: regs.n = ((WORD)(val)) < 0;
1489: regs.c = regs.x = carry!=0;
1490: put_word(dataa,val);
1491: }}}}
1492: void op_e300(UWORD opcode)
1493: {
1494: ULONG srcreg = 1;
1495: ULONG dstreg = (opcode & 7) >> 0;
1496: {{ ULONG cnt = srcreg;
1497: { BYTE data = regs.d[dstreg];
1498: { UBYTE val = data;
1499: cnt &= 63;
1500: regs.v = 0;
1501: { ULONG cmask = 0x80;
1502: ULONG sign = cmask & val;
1503: for(;cnt;--cnt){
1504: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1505: if ((val&cmask)!=sign)regs.v=1;
1506: }
1507: regs.n = (val&cmask) != 0;
1508: regs.z = val == 0;
1509: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1510: }}}}}}
1511: void op_e308(UWORD opcode)
1512: {
1513: ULONG srcreg = 1;
1514: ULONG dstreg = (opcode & 7) >> 0;
1515: {{ ULONG cnt = srcreg;
1516: { BYTE data = regs.d[dstreg];
1517: { UBYTE val = data;
1518: cnt &= 63;
1519: { int carry = 0;
1520: ULONG cmask = 0x80;
1521: for(;cnt;--cnt){
1522: carry=val&cmask; val <<= 1;
1523: }
1524: regs.v = regs.c = 0;
1525: regs.z = ((BYTE)(val)) == 0;
1526: regs.n = ((BYTE)(val)) < 0;
1527: regs.c = regs.x = carry!=0;
1528: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1529: }}}}}}
1530: void op_e310(UWORD opcode)
1531: {
1532: ULONG srcreg = 1;
1533: ULONG dstreg = (opcode & 7) >> 0;
1534: {{ ULONG cnt = srcreg;
1535: { BYTE data = regs.d[dstreg];
1536: { UBYTE val = data;
1537: cnt &= 63;
1538: { int carry = 0;
1539: ULONG cmask = 0x80;
1540: for(;cnt;--cnt){
1541: carry=val&cmask; val <<= 1;
1542: if(regs.x) val |= 1;
1543: regs.x = carry != 0;
1544: }
1545: regs.v = regs.c = 0;
1546: regs.z = ((BYTE)(val)) == 0;
1547: regs.n = ((BYTE)(val)) < 0;
1548: regs.x = regs.c = carry!=0;
1549: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1550: }}}}}}
1551: void op_e318(UWORD opcode)
1552: {
1553: ULONG srcreg = 1;
1554: ULONG dstreg = (opcode & 7) >> 0;
1555: {{ ULONG cnt = srcreg;
1556: { BYTE data = regs.d[dstreg];
1557: { UBYTE val = data;
1558: cnt &= 63;
1559: { int carry = 0;
1560: ULONG cmask = 0x80;
1561: for(;cnt;--cnt){
1562: carry=val&cmask; val <<= 1;
1563: if(carry) val |= 1;
1564: }
1565: regs.v = regs.c = 0;
1566: regs.z = ((BYTE)(val)) == 0;
1567: regs.n = ((BYTE)(val)) < 0;
1568: regs.c = carry!=0;
1569: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1570: }}}}}}
1571: void op_e340(UWORD opcode)
1572: {
1573: ULONG srcreg = 1;
1574: ULONG dstreg = (opcode & 7) >> 0;
1575: {{ ULONG cnt = srcreg;
1576: { WORD data = regs.d[dstreg];
1577: { UWORD val = data;
1578: cnt &= 63;
1579: regs.v = 0;
1580: { ULONG cmask = 0x8000;
1581: ULONG sign = cmask & val;
1582: for(;cnt;--cnt){
1583: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1584: if ((val&cmask)!=sign)regs.v=1;
1585: }
1586: regs.n = (val&cmask) != 0;
1587: regs.z = val == 0;
1588: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1589: }}}}}}
1590: void op_e348(UWORD opcode)
1591: {
1592: ULONG srcreg = 1;
1593: ULONG dstreg = (opcode & 7) >> 0;
1594: {{ ULONG cnt = srcreg;
1595: { WORD data = regs.d[dstreg];
1596: { UWORD val = data;
1597: cnt &= 63;
1598: { int carry = 0;
1599: ULONG cmask = 0x8000;
1600: for(;cnt;--cnt){
1601: carry=val&cmask; val <<= 1;
1602: }
1603: regs.v = regs.c = 0;
1604: regs.z = ((WORD)(val)) == 0;
1605: regs.n = ((WORD)(val)) < 0;
1606: regs.c = regs.x = carry!=0;
1607: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1608: }}}}}}
1609: void op_e350(UWORD opcode)
1610: {
1611: ULONG srcreg = 1;
1612: ULONG dstreg = (opcode & 7) >> 0;
1613: {{ ULONG cnt = srcreg;
1614: { WORD data = regs.d[dstreg];
1615: { UWORD val = data;
1616: cnt &= 63;
1617: { int carry = 0;
1618: ULONG cmask = 0x8000;
1619: for(;cnt;--cnt){
1620: carry=val&cmask; val <<= 1;
1621: if(regs.x) val |= 1;
1622: regs.x = carry != 0;
1623: }
1624: regs.v = regs.c = 0;
1625: regs.z = ((WORD)(val)) == 0;
1626: regs.n = ((WORD)(val)) < 0;
1627: regs.x = regs.c = carry!=0;
1628: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1629: }}}}}}
1630: void op_e358(UWORD opcode)
1631: {
1632: ULONG srcreg = 1;
1633: ULONG dstreg = (opcode & 7) >> 0;
1634: {{ ULONG cnt = srcreg;
1635: { WORD data = regs.d[dstreg];
1636: { UWORD val = data;
1637: cnt &= 63;
1638: { int carry = 0;
1639: ULONG cmask = 0x8000;
1640: for(;cnt;--cnt){
1641: carry=val&cmask; val <<= 1;
1642: if(carry) val |= 1;
1643: }
1644: regs.v = regs.c = 0;
1645: regs.z = ((WORD)(val)) == 0;
1646: regs.n = ((WORD)(val)) < 0;
1647: regs.c = carry!=0;
1648: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1649: }}}}}}
1650: void op_e380(UWORD opcode)
1651: {
1652: ULONG srcreg = 1;
1653: ULONG dstreg = (opcode & 7) >> 0;
1654: {{ ULONG cnt = srcreg;
1655: { LONG data = regs.d[dstreg];
1656: { ULONG val = data;
1657: cnt &= 63;
1658: regs.v = 0;
1659: { ULONG cmask = 0x80000000;
1660: ULONG sign = cmask & val;
1661: for(;cnt;--cnt){
1662: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
1663: if ((val&cmask)!=sign)regs.v=1;
1664: }
1665: regs.n = (val&cmask) != 0;
1666: regs.z = val == 0;
1667: regs.d[dstreg] = (val);
1668: }}}}}}
1669: void op_e388(UWORD opcode)
1670: {
1671: ULONG srcreg = 1;
1672: ULONG dstreg = (opcode & 7) >> 0;
1673: {{ ULONG cnt = srcreg;
1674: { LONG data = regs.d[dstreg];
1675: { ULONG val = data;
1676: cnt &= 63;
1677: { int carry = 0;
1678: ULONG cmask = 0x80000000;
1679: for(;cnt;--cnt){
1680: carry=val&cmask; val <<= 1;
1681: }
1682: regs.v = regs.c = 0;
1683: regs.z = ((LONG)(val)) == 0;
1684: regs.n = ((LONG)(val)) < 0;
1685: regs.c = regs.x = carry!=0;
1686: regs.d[dstreg] = (val);
1687: }}}}}}
1688: void op_e390(UWORD opcode)
1689: {
1690: ULONG srcreg = 1;
1691: ULONG dstreg = (opcode & 7) >> 0;
1692: {{ ULONG cnt = srcreg;
1693: { LONG data = regs.d[dstreg];
1694: { ULONG val = data;
1695: cnt &= 63;
1696: { int carry = 0;
1697: ULONG cmask = 0x80000000;
1698: for(;cnt;--cnt){
1699: carry=val&cmask; val <<= 1;
1700: if(regs.x) val |= 1;
1701: regs.x = carry != 0;
1702: }
1703: regs.v = regs.c = 0;
1704: regs.z = ((LONG)(val)) == 0;
1705: regs.n = ((LONG)(val)) < 0;
1706: regs.x = regs.c = carry!=0;
1707: regs.d[dstreg] = (val);
1708: }}}}}}
1709: void op_e398(UWORD opcode)
1710: {
1711: ULONG srcreg = 1;
1712: ULONG dstreg = (opcode & 7) >> 0;
1713: {{ ULONG cnt = srcreg;
1714: { LONG data = regs.d[dstreg];
1715: { ULONG val = data;
1716: cnt &= 63;
1717: { int carry = 0;
1718: ULONG cmask = 0x80000000;
1719: for(;cnt;--cnt){
1720: carry=val&cmask; val <<= 1;
1721: if(carry) val |= 1;
1722: }
1723: regs.v = regs.c = 0;
1724: regs.z = ((LONG)(val)) == 0;
1725: regs.n = ((LONG)(val)) < 0;
1726: regs.c = carry!=0;
1727: regs.d[dstreg] = (val);
1728: }}}}}}
1729: void op_e3d0(UWORD opcode)
1730: {
1731: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1732: {{ CPTR dataa = regs.a[srcreg];
1733: WORD data = get_word(dataa);
1734: { UWORD val = data;
1735: ULONG cmask = 0x8000;
1736: int carry = val&cmask;
1737: val <<= 1;
1738: regs.v = regs.c = 0;
1739: regs.z = ((WORD)(val)) == 0;
1740: regs.n = ((WORD)(val)) < 0;
1741: regs.c = regs.x = carry!=0;
1742: put_word(dataa,val);
1743: }}}}
1744: void op_e3d8(UWORD opcode)
1745: {
1746: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1747: {{ CPTR dataa = regs.a[srcreg];
1748: WORD data = get_word(dataa);
1749: { regs.a[srcreg] += 2;
1750: { UWORD val = data;
1751: ULONG cmask = 0x8000;
1752: int carry = val&cmask;
1753: val <<= 1;
1754: regs.v = regs.c = 0;
1755: regs.z = ((WORD)(val)) == 0;
1756: regs.n = ((WORD)(val)) < 0;
1757: regs.c = regs.x = carry!=0;
1758: put_word(dataa,val);
1759: }}}}}
1760: void op_e3e0(UWORD opcode)
1761: {
1762: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1763: {{ regs.a[srcreg] -= 2;
1764: { CPTR dataa = regs.a[srcreg];
1765: WORD data = get_word(dataa);
1766: { UWORD val = data;
1767: ULONG cmask = 0x8000;
1768: int carry = val&cmask;
1769: val <<= 1;
1770: regs.v = regs.c = 0;
1771: regs.z = ((WORD)(val)) == 0;
1772: regs.n = ((WORD)(val)) < 0;
1773: regs.c = regs.x = carry!=0;
1774: put_word(dataa,val);
1775: }}}}}
1776: void op_e3e8(UWORD opcode)
1777: {
1778: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1779: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
1780: WORD data = get_word(dataa);
1781: { UWORD val = data;
1782: ULONG cmask = 0x8000;
1783: int carry = val&cmask;
1784: val <<= 1;
1785: regs.v = regs.c = 0;
1786: regs.z = ((WORD)(val)) == 0;
1787: regs.n = ((WORD)(val)) < 0;
1788: regs.c = regs.x = carry!=0;
1789: put_word(dataa,val);
1790: }}}}
1791: void op_e3f0(UWORD opcode)
1792: {
1793: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
1794: {{ CPTR dataa = regs.a[srcreg];
1795: UWORD datadp = nextiword();
1796: dataa += (LONG)(BYTE)(datadp & 0xFF);
1797: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12];
1798: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr;
1799: dataa += datadpr;
1800: { WORD data = get_word(dataa);
1801: { UWORD val = data;
1802: ULONG cmask = 0x8000;
1803: int carry = val&cmask;
1804: val <<= 1;
1805: regs.v = regs.c = 0;
1806: regs.z = ((WORD)(val)) == 0;
1807: regs.n = ((WORD)(val)) < 0;
1808: regs.c = regs.x = carry!=0;
1809: put_word(dataa,val);
1810: }}}}}}
1811: void op_e3f8(UWORD opcode)
1812: {
1813: {{ CPTR dataa = (LONG)(WORD)nextiword();
1814: WORD data = get_word(dataa);
1815: { UWORD val = data;
1816: ULONG cmask = 0x8000;
1817: int carry = val&cmask;
1818: val <<= 1;
1819: regs.v = regs.c = 0;
1820: regs.z = ((WORD)(val)) == 0;
1821: regs.n = ((WORD)(val)) < 0;
1822: regs.c = regs.x = carry!=0;
1823: put_word(dataa,val);
1824: }}}}
1825: void op_e3f9(UWORD opcode)
1826: {
1827: {{ CPTR dataa = nextilong();
1828: WORD data = get_word(dataa);
1829: { UWORD val = data;
1830: ULONG cmask = 0x8000;
1831: int carry = val&cmask;
1832: val <<= 1;
1833: regs.v = regs.c = 0;
1834: regs.z = ((WORD)(val)) == 0;
1835: regs.n = ((WORD)(val)) < 0;
1836: regs.c = regs.x = carry!=0;
1837: put_word(dataa,val);
1838: }}}}
1839: void op_e400(UWORD opcode)
1840: {
1841: ULONG srcreg = 2;
1842: ULONG dstreg = (opcode & 7) >> 0;
1843: {{ ULONG cnt = srcreg;
1844: { BYTE data = regs.d[dstreg];
1845: { UBYTE val = data;
1846: cnt &= 63;
1847: regs.v = 0;
1848: { ULONG cmask = 0x80;
1849: ULONG sign = cmask & val;
1850: for(;cnt;--cnt){
1851: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
1852: }
1853: regs.n = sign != 0;
1854: regs.z = val == 0;
1855: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1856: }}}}}}
1857: void op_e408(UWORD opcode)
1858: {
1859: ULONG srcreg = 2;
1860: ULONG dstreg = (opcode & 7) >> 0;
1861: {{ ULONG cnt = srcreg;
1862: { BYTE data = regs.d[dstreg];
1863: { UBYTE val = data;
1864: cnt &= 63;
1865: { int carry = 0;
1866: for(;cnt;--cnt){
1867: carry=val&1; val >>= 1;
1868: }
1869: regs.v = regs.c = 0;
1870: regs.z = ((BYTE)(val)) == 0;
1871: regs.n = ((BYTE)(val)) < 0;
1872: regs.c = regs.x = carry!=0;
1873: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1874: }}}}}}
1875: void op_e410(UWORD opcode)
1876: {
1877: ULONG srcreg = 2;
1878: ULONG dstreg = (opcode & 7) >> 0;
1879: {{ ULONG cnt = srcreg;
1880: { BYTE data = regs.d[dstreg];
1881: { UBYTE val = data;
1882: cnt &= 63;
1883: { int carry = 0;
1884: ULONG cmask = 0x80;
1885: for(;cnt;--cnt){
1886: carry=val&1; val >>= 1;
1887: if(regs.x) val |= cmask;
1888: regs.x = carry != 0;
1889: }
1890: regs.v = regs.c = 0;
1891: regs.z = ((BYTE)(val)) == 0;
1892: regs.n = ((BYTE)(val)) < 0;
1893: regs.x = regs.c = carry!=0;
1894: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1895: }}}}}}
1896: void op_e418(UWORD opcode)
1897: {
1898: ULONG srcreg = 2;
1899: ULONG dstreg = (opcode & 7) >> 0;
1900: {{ ULONG cnt = srcreg;
1901: { BYTE data = regs.d[dstreg];
1902: { UBYTE val = data;
1903: cnt &= 63;
1904: { int carry = 0;
1905: ULONG cmask = 0x80;
1906: for(;cnt;--cnt){
1907: carry=val&1; val = (ULONG)val >> 1;
1908: if(carry) val |= cmask;
1909: }
1910: regs.v = regs.c = 0;
1911: regs.z = ((BYTE)(val)) == 0;
1912: regs.n = ((BYTE)(val)) < 0;
1913: regs.c = carry!=0;
1914: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
1915: }}}}}}
1916: void op_e440(UWORD opcode)
1917: {
1918: ULONG srcreg = 2;
1919: ULONG dstreg = (opcode & 7) >> 0;
1920: {{ ULONG cnt = srcreg;
1921: { WORD data = regs.d[dstreg];
1922: { UWORD val = data;
1923: cnt &= 63;
1924: regs.v = 0;
1925: { ULONG cmask = 0x8000;
1926: ULONG sign = cmask & val;
1927: for(;cnt;--cnt){
1928: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
1929: }
1930: regs.n = sign != 0;
1931: regs.z = val == 0;
1932: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1933: }}}}}}
1934: void op_e448(UWORD opcode)
1935: {
1936: ULONG srcreg = 2;
1937: ULONG dstreg = (opcode & 7) >> 0;
1938: {{ ULONG cnt = srcreg;
1939: { WORD data = regs.d[dstreg];
1940: { UWORD val = data;
1941: cnt &= 63;
1942: { int carry = 0;
1943: for(;cnt;--cnt){
1944: carry=val&1; val >>= 1;
1945: }
1946: regs.v = regs.c = 0;
1947: regs.z = ((WORD)(val)) == 0;
1948: regs.n = ((WORD)(val)) < 0;
1949: regs.c = regs.x = carry!=0;
1950: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1951: }}}}}}
1952: void op_e450(UWORD opcode)
1953: {
1954: ULONG srcreg = 2;
1955: ULONG dstreg = (opcode & 7) >> 0;
1956: {{ ULONG cnt = srcreg;
1957: { WORD data = regs.d[dstreg];
1958: { UWORD val = data;
1959: cnt &= 63;
1960: { int carry = 0;
1961: ULONG cmask = 0x8000;
1962: for(;cnt;--cnt){
1963: carry=val&1; val >>= 1;
1964: if(regs.x) val |= cmask;
1965: regs.x = carry != 0;
1966: }
1967: regs.v = regs.c = 0;
1968: regs.z = ((WORD)(val)) == 0;
1969: regs.n = ((WORD)(val)) < 0;
1970: regs.x = regs.c = carry!=0;
1971: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1972: }}}}}}
1973: void op_e458(UWORD opcode)
1974: {
1975: ULONG srcreg = 2;
1976: ULONG dstreg = (opcode & 7) >> 0;
1977: {{ ULONG cnt = srcreg;
1978: { WORD data = regs.d[dstreg];
1979: { UWORD val = data;
1980: cnt &= 63;
1981: { int carry = 0;
1982: ULONG cmask = 0x8000;
1983: for(;cnt;--cnt){
1984: carry=val&1; val = (ULONG)val >> 1;
1985: if(carry) val |= cmask;
1986: }
1987: regs.v = regs.c = 0;
1988: regs.z = ((WORD)(val)) == 0;
1989: regs.n = ((WORD)(val)) < 0;
1990: regs.c = carry!=0;
1991: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
1992: }}}}}}
1993: void op_e480(UWORD opcode)
1994: {
1995: ULONG srcreg = 2;
1996: ULONG dstreg = (opcode & 7) >> 0;
1997: {{ ULONG cnt = srcreg;
1998: { LONG data = regs.d[dstreg];
1999: { ULONG val = data;
2000: cnt &= 63;
2001: regs.v = 0;
2002: { ULONG cmask = 0x80000000;
2003: ULONG sign = cmask & val;
2004: for(;cnt;--cnt){
2005: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
2006: }
2007: regs.n = sign != 0;
2008: regs.z = val == 0;
2009: regs.d[dstreg] = (val);
2010: }}}}}}
2011: void op_e488(UWORD opcode)
2012: {
2013: ULONG srcreg = 2;
2014: ULONG dstreg = (opcode & 7) >> 0;
2015: {{ ULONG cnt = srcreg;
2016: { LONG data = regs.d[dstreg];
2017: { ULONG val = data;
2018: cnt &= 63;
2019: { int carry = 0;
2020: for(;cnt;--cnt){
2021: carry=val&1; val >>= 1;
2022: }
2023: regs.v = regs.c = 0;
2024: regs.z = ((LONG)(val)) == 0;
2025: regs.n = ((LONG)(val)) < 0;
2026: regs.c = regs.x = carry!=0;
2027: regs.d[dstreg] = (val);
2028: }}}}}}
2029: void op_e490(UWORD opcode)
2030: {
2031: ULONG srcreg = 2;
2032: ULONG dstreg = (opcode & 7) >> 0;
2033: {{ ULONG cnt = srcreg;
2034: { LONG data = regs.d[dstreg];
2035: { ULONG val = data;
2036: cnt &= 63;
2037: { int carry = 0;
2038: ULONG cmask = 0x80000000;
2039: for(;cnt;--cnt){
2040: carry=val&1; val >>= 1;
2041: if(regs.x) val |= cmask;
2042: regs.x = carry != 0;
2043: }
2044: regs.v = regs.c = 0;
2045: regs.z = ((LONG)(val)) == 0;
2046: regs.n = ((LONG)(val)) < 0;
2047: regs.x = regs.c = carry!=0;
2048: regs.d[dstreg] = (val);
2049: }}}}}}
2050: void op_e498(UWORD opcode)
2051: {
2052: ULONG srcreg = 2;
2053: ULONG dstreg = (opcode & 7) >> 0;
2054: {{ ULONG cnt = srcreg;
2055: { LONG data = regs.d[dstreg];
2056: { ULONG val = data;
2057: cnt &= 63;
2058: { int carry = 0;
2059: ULONG cmask = 0x80000000;
2060: for(;cnt;--cnt){
2061: carry=val&1; val = (ULONG)val >> 1;
2062: if(carry) val |= cmask;
2063: }
2064: regs.v = regs.c = 0;
2065: regs.z = ((LONG)(val)) == 0;
2066: regs.n = ((LONG)(val)) < 0;
2067: regs.c = carry!=0;
2068: regs.d[dstreg] = (val);
2069: }}}}}}
2070: void op_e4d0(UWORD opcode)
2071: {
2072: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2073: {{ CPTR dataa = regs.a[srcreg];
2074: WORD data = get_word(dataa);
2075: { UWORD val = data;
2076: int carry = val&1;
2077: ULONG cmask = 0x8000;
2078: val >>= 1;
2079: if(regs.x) val |= cmask;
2080: regs.x = carry != 0;
2081: regs.v = regs.c = 0;
2082: regs.z = ((WORD)(val)) == 0;
2083: regs.n = ((WORD)(val)) < 0;
2084: regs.x = regs.c = carry!=0;
2085: put_word(dataa,val);
2086: }}}}
2087: void op_e4d8(UWORD opcode)
2088: {
2089: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2090: {{ CPTR dataa = regs.a[srcreg];
2091: WORD data = get_word(dataa);
2092: { regs.a[srcreg] += 2;
2093: { UWORD val = data;
2094: int carry = val&1;
2095: ULONG cmask = 0x8000;
2096: val >>= 1;
2097: if(regs.x) val |= cmask;
2098: regs.x = carry != 0;
2099: regs.v = regs.c = 0;
2100: regs.z = ((WORD)(val)) == 0;
2101: regs.n = ((WORD)(val)) < 0;
2102: regs.x = regs.c = carry!=0;
2103: put_word(dataa,val);
2104: }}}}}
2105: void op_e4e0(UWORD opcode)
2106: {
2107: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2108: {{ regs.a[srcreg] -= 2;
2109: { CPTR dataa = regs.a[srcreg];
2110: WORD data = get_word(dataa);
2111: { UWORD val = data;
2112: int carry = val&1;
2113: ULONG cmask = 0x8000;
2114: val >>= 1;
2115: if(regs.x) val |= cmask;
2116: regs.x = carry != 0;
2117: regs.v = regs.c = 0;
2118: regs.z = ((WORD)(val)) == 0;
2119: regs.n = ((WORD)(val)) < 0;
2120: regs.x = regs.c = carry!=0;
2121: put_word(dataa,val);
2122: }}}}}
2123: void op_e4e8(UWORD opcode)
2124: {
2125: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2126: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
2127: WORD data = get_word(dataa);
2128: { UWORD val = data;
2129: int carry = val&1;
2130: ULONG cmask = 0x8000;
2131: val >>= 1;
2132: if(regs.x) val |= cmask;
2133: regs.x = carry != 0;
2134: regs.v = regs.c = 0;
2135: regs.z = ((WORD)(val)) == 0;
2136: regs.n = ((WORD)(val)) < 0;
2137: regs.x = regs.c = carry!=0;
2138: put_word(dataa,val);
2139: }}}}
2140: void op_e4f0(UWORD opcode)
2141: {
2142: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2143: {{ CPTR dataa = regs.a[srcreg];
2144: UWORD datadp = nextiword();
2145: dataa += (LONG)(BYTE)(datadp & 0xFF);
2146: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12];
2147: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr;
2148: dataa += datadpr;
2149: { WORD data = get_word(dataa);
2150: { UWORD val = data;
2151: int carry = val&1;
2152: ULONG cmask = 0x8000;
2153: val >>= 1;
2154: if(regs.x) val |= cmask;
2155: regs.x = carry != 0;
2156: regs.v = regs.c = 0;
2157: regs.z = ((WORD)(val)) == 0;
2158: regs.n = ((WORD)(val)) < 0;
2159: regs.x = regs.c = carry!=0;
2160: put_word(dataa,val);
2161: }}}}}}
2162: void op_e4f8(UWORD opcode)
2163: {
2164: {{ CPTR dataa = (LONG)(WORD)nextiword();
2165: WORD data = get_word(dataa);
2166: { UWORD val = data;
2167: int carry = val&1;
2168: ULONG cmask = 0x8000;
2169: val >>= 1;
2170: if(regs.x) val |= cmask;
2171: regs.x = carry != 0;
2172: regs.v = regs.c = 0;
2173: regs.z = ((WORD)(val)) == 0;
2174: regs.n = ((WORD)(val)) < 0;
2175: regs.x = regs.c = carry!=0;
2176: put_word(dataa,val);
2177: }}}}
2178: void op_e4f9(UWORD opcode)
2179: {
2180: {{ CPTR dataa = nextilong();
2181: WORD data = get_word(dataa);
2182: { UWORD val = data;
2183: int carry = val&1;
2184: ULONG cmask = 0x8000;
2185: val >>= 1;
2186: if(regs.x) val |= cmask;
2187: regs.x = carry != 0;
2188: regs.v = regs.c = 0;
2189: regs.z = ((WORD)(val)) == 0;
2190: regs.n = ((WORD)(val)) < 0;
2191: regs.x = regs.c = carry!=0;
2192: put_word(dataa,val);
2193: }}}}
2194: void op_e500(UWORD opcode)
2195: {
2196: ULONG srcreg = 2;
2197: ULONG dstreg = (opcode & 7) >> 0;
2198: {{ ULONG cnt = srcreg;
2199: { BYTE data = regs.d[dstreg];
2200: { UBYTE val = data;
2201: cnt &= 63;
2202: regs.v = 0;
2203: { ULONG cmask = 0x80;
2204: ULONG sign = cmask & val;
2205: for(;cnt;--cnt){
2206: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
2207: if ((val&cmask)!=sign)regs.v=1;
2208: }
2209: regs.n = (val&cmask) != 0;
2210: regs.z = val == 0;
2211: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2212: }}}}}}
2213: void op_e508(UWORD opcode)
2214: {
2215: ULONG srcreg = 2;
2216: ULONG dstreg = (opcode & 7) >> 0;
2217: {{ ULONG cnt = srcreg;
2218: { BYTE data = regs.d[dstreg];
2219: { UBYTE val = data;
2220: cnt &= 63;
2221: { int carry = 0;
2222: ULONG cmask = 0x80;
2223: for(;cnt;--cnt){
2224: carry=val&cmask; val <<= 1;
2225: }
2226: regs.v = regs.c = 0;
2227: regs.z = ((BYTE)(val)) == 0;
2228: regs.n = ((BYTE)(val)) < 0;
2229: regs.c = regs.x = carry!=0;
2230: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2231: }}}}}}
2232: void op_e510(UWORD opcode)
2233: {
2234: ULONG srcreg = 2;
2235: ULONG dstreg = (opcode & 7) >> 0;
2236: {{ ULONG cnt = srcreg;
2237: { BYTE data = regs.d[dstreg];
2238: { UBYTE val = data;
2239: cnt &= 63;
2240: { int carry = 0;
2241: ULONG cmask = 0x80;
2242: for(;cnt;--cnt){
2243: carry=val&cmask; val <<= 1;
2244: if(regs.x) val |= 1;
2245: regs.x = carry != 0;
2246: }
2247: regs.v = regs.c = 0;
2248: regs.z = ((BYTE)(val)) == 0;
2249: regs.n = ((BYTE)(val)) < 0;
2250: regs.x = regs.c = carry!=0;
2251: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2252: }}}}}}
2253: void op_e518(UWORD opcode)
2254: {
2255: ULONG srcreg = 2;
2256: ULONG dstreg = (opcode & 7) >> 0;
2257: {{ ULONG cnt = srcreg;
2258: { BYTE data = regs.d[dstreg];
2259: { UBYTE val = data;
2260: cnt &= 63;
2261: { int carry = 0;
2262: ULONG cmask = 0x80;
2263: for(;cnt;--cnt){
2264: carry=val&cmask; val <<= 1;
2265: if(carry) val |= 1;
2266: }
2267: regs.v = regs.c = 0;
2268: regs.z = ((BYTE)(val)) == 0;
2269: regs.n = ((BYTE)(val)) < 0;
2270: regs.c = carry!=0;
2271: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2272: }}}}}}
2273: void op_e540(UWORD opcode)
2274: {
2275: ULONG srcreg = 2;
2276: ULONG dstreg = (opcode & 7) >> 0;
2277: {{ ULONG cnt = srcreg;
2278: { WORD data = regs.d[dstreg];
2279: { UWORD val = data;
2280: cnt &= 63;
2281: regs.v = 0;
2282: { ULONG cmask = 0x8000;
2283: ULONG sign = cmask & val;
2284: for(;cnt;--cnt){
2285: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
2286: if ((val&cmask)!=sign)regs.v=1;
2287: }
2288: regs.n = (val&cmask) != 0;
2289: regs.z = val == 0;
2290: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
2291: }}}}}}
2292: void op_e548(UWORD opcode)
2293: {
2294: ULONG srcreg = 2;
2295: ULONG dstreg = (opcode & 7) >> 0;
2296: {{ ULONG cnt = srcreg;
2297: { WORD data = regs.d[dstreg];
2298: { UWORD val = data;
2299: cnt &= 63;
2300: { int carry = 0;
2301: ULONG cmask = 0x8000;
2302: for(;cnt;--cnt){
2303: carry=val&cmask; val <<= 1;
2304: }
2305: regs.v = regs.c = 0;
2306: regs.z = ((WORD)(val)) == 0;
2307: regs.n = ((WORD)(val)) < 0;
2308: regs.c = regs.x = carry!=0;
2309: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
2310: }}}}}}
2311: void op_e550(UWORD opcode)
2312: {
2313: ULONG srcreg = 2;
2314: ULONG dstreg = (opcode & 7) >> 0;
2315: {{ ULONG cnt = srcreg;
2316: { WORD data = regs.d[dstreg];
2317: { UWORD val = data;
2318: cnt &= 63;
2319: { int carry = 0;
2320: ULONG cmask = 0x8000;
2321: for(;cnt;--cnt){
2322: carry=val&cmask; val <<= 1;
2323: if(regs.x) val |= 1;
2324: regs.x = carry != 0;
2325: }
2326: regs.v = regs.c = 0;
2327: regs.z = ((WORD)(val)) == 0;
2328: regs.n = ((WORD)(val)) < 0;
2329: regs.x = regs.c = carry!=0;
2330: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
2331: }}}}}}
2332: void op_e558(UWORD opcode)
2333: {
2334: ULONG srcreg = 2;
2335: ULONG dstreg = (opcode & 7) >> 0;
2336: {{ ULONG cnt = srcreg;
2337: { WORD data = regs.d[dstreg];
2338: { UWORD val = data;
2339: cnt &= 63;
2340: { int carry = 0;
2341: ULONG cmask = 0x8000;
2342: for(;cnt;--cnt){
2343: carry=val&cmask; val <<= 1;
2344: if(carry) val |= 1;
2345: }
2346: regs.v = regs.c = 0;
2347: regs.z = ((WORD)(val)) == 0;
2348: regs.n = ((WORD)(val)) < 0;
2349: regs.c = carry!=0;
2350: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
2351: }}}}}}
2352: void op_e580(UWORD opcode)
2353: {
2354: ULONG srcreg = 2;
2355: ULONG dstreg = (opcode & 7) >> 0;
2356: {{ ULONG cnt = srcreg;
2357: { LONG data = regs.d[dstreg];
2358: { ULONG val = data;
2359: cnt &= 63;
2360: regs.v = 0;
2361: { ULONG cmask = 0x80000000;
2362: ULONG sign = cmask & val;
2363: for(;cnt;--cnt){
2364: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
2365: if ((val&cmask)!=sign)regs.v=1;
2366: }
2367: regs.n = (val&cmask) != 0;
2368: regs.z = val == 0;
2369: regs.d[dstreg] = (val);
2370: }}}}}}
2371: void op_e588(UWORD opcode)
2372: {
2373: ULONG srcreg = 2;
2374: ULONG dstreg = (opcode & 7) >> 0;
2375: {{ ULONG cnt = srcreg;
2376: { LONG data = regs.d[dstreg];
2377: { ULONG val = data;
2378: cnt &= 63;
2379: { int carry = 0;
2380: ULONG cmask = 0x80000000;
2381: for(;cnt;--cnt){
2382: carry=val&cmask; val <<= 1;
2383: }
2384: regs.v = regs.c = 0;
2385: regs.z = ((LONG)(val)) == 0;
2386: regs.n = ((LONG)(val)) < 0;
2387: regs.c = regs.x = carry!=0;
2388: regs.d[dstreg] = (val);
2389: }}}}}}
2390: void op_e590(UWORD opcode)
2391: {
2392: ULONG srcreg = 2;
2393: ULONG dstreg = (opcode & 7) >> 0;
2394: {{ ULONG cnt = srcreg;
2395: { LONG data = regs.d[dstreg];
2396: { ULONG val = data;
2397: cnt &= 63;
2398: { int carry = 0;
2399: ULONG cmask = 0x80000000;
2400: for(;cnt;--cnt){
2401: carry=val&cmask; val <<= 1;
2402: if(regs.x) val |= 1;
2403: regs.x = carry != 0;
2404: }
2405: regs.v = regs.c = 0;
2406: regs.z = ((LONG)(val)) == 0;
2407: regs.n = ((LONG)(val)) < 0;
2408: regs.x = regs.c = carry!=0;
2409: regs.d[dstreg] = (val);
2410: }}}}}}
2411: void op_e598(UWORD opcode)
2412: {
2413: ULONG srcreg = 2;
2414: ULONG dstreg = (opcode & 7) >> 0;
2415: {{ ULONG cnt = srcreg;
2416: { LONG data = regs.d[dstreg];
2417: { ULONG val = data;
2418: cnt &= 63;
2419: { int carry = 0;
2420: ULONG cmask = 0x80000000;
2421: for(;cnt;--cnt){
2422: carry=val&cmask; val <<= 1;
2423: if(carry) val |= 1;
2424: }
2425: regs.v = regs.c = 0;
2426: regs.z = ((LONG)(val)) == 0;
2427: regs.n = ((LONG)(val)) < 0;
2428: regs.c = carry!=0;
2429: regs.d[dstreg] = (val);
2430: }}}}}}
2431: void op_e5d0(UWORD opcode)
2432: {
2433: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2434: {{ CPTR dataa = regs.a[srcreg];
2435: WORD data = get_word(dataa);
2436: { UWORD val = data;
2437: ULONG cmask = 0x8000;
2438: int carry = val&cmask;
2439: val <<= 1;
2440: if(regs.x) val |= 1;
2441: regs.x = carry != 0;
2442: regs.v = regs.c = 0;
2443: regs.z = ((WORD)(val)) == 0;
2444: regs.n = ((WORD)(val)) < 0;
2445: regs.x = regs.c = carry!=0;
2446: put_word(dataa,val);
2447: }}}}
2448: void op_e5d8(UWORD opcode)
2449: {
2450: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2451: {{ CPTR dataa = regs.a[srcreg];
2452: WORD data = get_word(dataa);
2453: { regs.a[srcreg] += 2;
2454: { UWORD val = data;
2455: ULONG cmask = 0x8000;
2456: int carry = val&cmask;
2457: val <<= 1;
2458: if(regs.x) val |= 1;
2459: regs.x = carry != 0;
2460: regs.v = regs.c = 0;
2461: regs.z = ((WORD)(val)) == 0;
2462: regs.n = ((WORD)(val)) < 0;
2463: regs.x = regs.c = carry!=0;
2464: put_word(dataa,val);
2465: }}}}}
2466: void op_e5e0(UWORD opcode)
2467: {
2468: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2469: {{ regs.a[srcreg] -= 2;
2470: { CPTR dataa = regs.a[srcreg];
2471: WORD data = get_word(dataa);
2472: { UWORD val = data;
2473: ULONG cmask = 0x8000;
2474: int carry = val&cmask;
2475: val <<= 1;
2476: if(regs.x) val |= 1;
2477: regs.x = carry != 0;
2478: regs.v = regs.c = 0;
2479: regs.z = ((WORD)(val)) == 0;
2480: regs.n = ((WORD)(val)) < 0;
2481: regs.x = regs.c = carry!=0;
2482: put_word(dataa,val);
2483: }}}}}
2484: void op_e5e8(UWORD opcode)
2485: {
2486: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2487: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
2488: WORD data = get_word(dataa);
2489: { UWORD val = data;
2490: ULONG cmask = 0x8000;
2491: int carry = val&cmask;
2492: val <<= 1;
2493: if(regs.x) val |= 1;
2494: regs.x = carry != 0;
2495: regs.v = regs.c = 0;
2496: regs.z = ((WORD)(val)) == 0;
2497: regs.n = ((WORD)(val)) < 0;
2498: regs.x = regs.c = carry!=0;
2499: put_word(dataa,val);
2500: }}}}
2501: void op_e5f0(UWORD opcode)
2502: {
2503: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2504: {{ CPTR dataa = regs.a[srcreg];
2505: UWORD datadp = nextiword();
2506: dataa += (LONG)(BYTE)(datadp & 0xFF);
2507: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12];
2508: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr;
2509: dataa += datadpr;
2510: { WORD data = get_word(dataa);
2511: { UWORD val = data;
2512: ULONG cmask = 0x8000;
2513: int carry = val&cmask;
2514: val <<= 1;
2515: if(regs.x) val |= 1;
2516: regs.x = carry != 0;
2517: regs.v = regs.c = 0;
2518: regs.z = ((WORD)(val)) == 0;
2519: regs.n = ((WORD)(val)) < 0;
2520: regs.x = regs.c = carry!=0;
2521: put_word(dataa,val);
2522: }}}}}}
2523: void op_e5f8(UWORD opcode)
2524: {
2525: {{ CPTR dataa = (LONG)(WORD)nextiword();
2526: WORD data = get_word(dataa);
2527: { UWORD val = data;
2528: ULONG cmask = 0x8000;
2529: int carry = val&cmask;
2530: val <<= 1;
2531: if(regs.x) val |= 1;
2532: regs.x = carry != 0;
2533: regs.v = regs.c = 0;
2534: regs.z = ((WORD)(val)) == 0;
2535: regs.n = ((WORD)(val)) < 0;
2536: regs.x = regs.c = carry!=0;
2537: put_word(dataa,val);
2538: }}}}
2539: void op_e5f9(UWORD opcode)
2540: {
2541: {{ CPTR dataa = nextilong();
2542: WORD data = get_word(dataa);
2543: { UWORD val = data;
2544: ULONG cmask = 0x8000;
2545: int carry = val&cmask;
2546: val <<= 1;
2547: if(regs.x) val |= 1;
2548: regs.x = carry != 0;
2549: regs.v = regs.c = 0;
2550: regs.z = ((WORD)(val)) == 0;
2551: regs.n = ((WORD)(val)) < 0;
2552: regs.x = regs.c = carry!=0;
2553: put_word(dataa,val);
2554: }}}}
2555: void op_e600(UWORD opcode)
2556: {
2557: ULONG srcreg = 3;
2558: ULONG dstreg = (opcode & 7) >> 0;
2559: {{ ULONG cnt = srcreg;
2560: { BYTE data = regs.d[dstreg];
2561: { UBYTE val = data;
2562: cnt &= 63;
2563: regs.v = 0;
2564: { ULONG cmask = 0x80;
2565: ULONG sign = cmask & val;
2566: for(;cnt;--cnt){
2567: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
2568: }
2569: regs.n = sign != 0;
2570: regs.z = val == 0;
2571: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2572: }}}}}}
2573: void op_e608(UWORD opcode)
2574: {
2575: ULONG srcreg = 3;
2576: ULONG dstreg = (opcode & 7) >> 0;
2577: {{ ULONG cnt = srcreg;
2578: { BYTE data = regs.d[dstreg];
2579: { UBYTE val = data;
2580: cnt &= 63;
2581: { int carry = 0;
2582: for(;cnt;--cnt){
2583: carry=val&1; val >>= 1;
2584: }
2585: regs.v = regs.c = 0;
2586: regs.z = ((BYTE)(val)) == 0;
2587: regs.n = ((BYTE)(val)) < 0;
2588: regs.c = regs.x = carry!=0;
2589: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2590: }}}}}}
2591: void op_e610(UWORD opcode)
2592: {
2593: ULONG srcreg = 3;
2594: ULONG dstreg = (opcode & 7) >> 0;
2595: {{ ULONG cnt = srcreg;
2596: { BYTE data = regs.d[dstreg];
2597: { UBYTE val = data;
2598: cnt &= 63;
2599: { int carry = 0;
2600: ULONG cmask = 0x80;
2601: for(;cnt;--cnt){
2602: carry=val&1; val >>= 1;
2603: if(regs.x) val |= cmask;
2604: regs.x = carry != 0;
2605: }
2606: regs.v = regs.c = 0;
2607: regs.z = ((BYTE)(val)) == 0;
2608: regs.n = ((BYTE)(val)) < 0;
2609: regs.x = regs.c = carry!=0;
2610: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2611: }}}}}}
2612: void op_e618(UWORD opcode)
2613: {
2614: ULONG srcreg = 3;
2615: ULONG dstreg = (opcode & 7) >> 0;
2616: {{ ULONG cnt = srcreg;
2617: { BYTE data = regs.d[dstreg];
2618: { UBYTE val = data;
2619: cnt &= 63;
2620: { int carry = 0;
2621: ULONG cmask = 0x80;
2622: for(;cnt;--cnt){
2623: carry=val&1; val = (ULONG)val >> 1;
2624: if(carry) val |= cmask;
2625: }
2626: regs.v = regs.c = 0;
2627: regs.z = ((BYTE)(val)) == 0;
2628: regs.n = ((BYTE)(val)) < 0;
2629: regs.c = carry!=0;
2630: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2631: }}}}}}
2632: void op_e640(UWORD opcode)
2633: {
2634: ULONG srcreg = 3;
2635: ULONG dstreg = (opcode & 7) >> 0;
2636: {{ ULONG cnt = srcreg;
2637: { WORD data = regs.d[dstreg];
2638: { UWORD val = data;
2639: cnt &= 63;
2640: regs.v = 0;
2641: { ULONG cmask = 0x8000;
2642: ULONG sign = cmask & val;
2643: for(;cnt;--cnt){
2644: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
2645: }
2646: regs.n = sign != 0;
2647: regs.z = val == 0;
2648: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
2649: }}}}}}
2650: void op_e648(UWORD opcode)
2651: {
2652: ULONG srcreg = 3;
2653: ULONG dstreg = (opcode & 7) >> 0;
2654: {{ ULONG cnt = srcreg;
2655: { WORD data = regs.d[dstreg];
2656: { UWORD val = data;
2657: cnt &= 63;
2658: { int carry = 0;
2659: for(;cnt;--cnt){
2660: carry=val&1; val >>= 1;
2661: }
2662: regs.v = regs.c = 0;
2663: regs.z = ((WORD)(val)) == 0;
2664: regs.n = ((WORD)(val)) < 0;
2665: regs.c = regs.x = carry!=0;
2666: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
2667: }}}}}}
2668: void op_e650(UWORD opcode)
2669: {
2670: ULONG srcreg = 3;
2671: ULONG dstreg = (opcode & 7) >> 0;
2672: {{ ULONG cnt = srcreg;
2673: { WORD data = regs.d[dstreg];
2674: { UWORD val = data;
2675: cnt &= 63;
2676: { int carry = 0;
2677: ULONG cmask = 0x8000;
2678: for(;cnt;--cnt){
2679: carry=val&1; val >>= 1;
2680: if(regs.x) val |= cmask;
2681: regs.x = carry != 0;
2682: }
2683: regs.v = regs.c = 0;
2684: regs.z = ((WORD)(val)) == 0;
2685: regs.n = ((WORD)(val)) < 0;
2686: regs.x = regs.c = carry!=0;
2687: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
2688: }}}}}}
2689: void op_e658(UWORD opcode)
2690: {
2691: ULONG srcreg = 3;
2692: ULONG dstreg = (opcode & 7) >> 0;
2693: {{ ULONG cnt = srcreg;
2694: { WORD data = regs.d[dstreg];
2695: { UWORD val = data;
2696: cnt &= 63;
2697: { int carry = 0;
2698: ULONG cmask = 0x8000;
2699: for(;cnt;--cnt){
2700: carry=val&1; val = (ULONG)val >> 1;
2701: if(carry) val |= cmask;
2702: }
2703: regs.v = regs.c = 0;
2704: regs.z = ((WORD)(val)) == 0;
2705: regs.n = ((WORD)(val)) < 0;
2706: regs.c = carry!=0;
2707: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
2708: }}}}}}
2709: void op_e680(UWORD opcode)
2710: {
2711: ULONG srcreg = 3;
2712: ULONG dstreg = (opcode & 7) >> 0;
2713: {{ ULONG cnt = srcreg;
2714: { LONG data = regs.d[dstreg];
2715: { ULONG val = data;
2716: cnt &= 63;
2717: regs.v = 0;
2718: { ULONG cmask = 0x80000000;
2719: ULONG sign = cmask & val;
2720: for(;cnt;--cnt){
2721: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
2722: }
2723: regs.n = sign != 0;
2724: regs.z = val == 0;
2725: regs.d[dstreg] = (val);
2726: }}}}}}
2727: void op_e688(UWORD opcode)
2728: {
2729: ULONG srcreg = 3;
2730: ULONG dstreg = (opcode & 7) >> 0;
2731: {{ ULONG cnt = srcreg;
2732: { LONG data = regs.d[dstreg];
2733: { ULONG val = data;
2734: cnt &= 63;
2735: { int carry = 0;
2736: for(;cnt;--cnt){
2737: carry=val&1; val >>= 1;
2738: }
2739: regs.v = regs.c = 0;
2740: regs.z = ((LONG)(val)) == 0;
2741: regs.n = ((LONG)(val)) < 0;
2742: regs.c = regs.x = carry!=0;
2743: regs.d[dstreg] = (val);
2744: }}}}}}
2745: void op_e690(UWORD opcode)
2746: {
2747: ULONG srcreg = 3;
2748: ULONG dstreg = (opcode & 7) >> 0;
2749: {{ ULONG cnt = srcreg;
2750: { LONG data = regs.d[dstreg];
2751: { ULONG val = data;
2752: cnt &= 63;
2753: { int carry = 0;
2754: ULONG cmask = 0x80000000;
2755: for(;cnt;--cnt){
2756: carry=val&1; val >>= 1;
2757: if(regs.x) val |= cmask;
2758: regs.x = carry != 0;
2759: }
2760: regs.v = regs.c = 0;
2761: regs.z = ((LONG)(val)) == 0;
2762: regs.n = ((LONG)(val)) < 0;
2763: regs.x = regs.c = carry!=0;
2764: regs.d[dstreg] = (val);
2765: }}}}}}
2766: void op_e698(UWORD opcode)
2767: {
2768: ULONG srcreg = 3;
2769: ULONG dstreg = (opcode & 7) >> 0;
2770: {{ ULONG cnt = srcreg;
2771: { LONG data = regs.d[dstreg];
2772: { ULONG val = data;
2773: cnt &= 63;
2774: { int carry = 0;
2775: ULONG cmask = 0x80000000;
2776: for(;cnt;--cnt){
2777: carry=val&1; val = (ULONG)val >> 1;
2778: if(carry) val |= cmask;
2779: }
2780: regs.v = regs.c = 0;
2781: regs.z = ((LONG)(val)) == 0;
2782: regs.n = ((LONG)(val)) < 0;
2783: regs.c = carry!=0;
2784: regs.d[dstreg] = (val);
2785: }}}}}}
2786: void op_e6d0(UWORD opcode)
2787: {
2788: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2789: {{ CPTR dataa = regs.a[srcreg];
2790: WORD data = get_word(dataa);
2791: { UWORD val = data;
2792: int carry = val&1;
2793: ULONG cmask = 0x8000;
2794: val >>= 1;
2795: if(carry) val |= cmask;
2796: regs.v = regs.c = 0;
2797: regs.z = ((WORD)(val)) == 0;
2798: regs.n = ((WORD)(val)) < 0;
2799: regs.c = carry!=0;
2800: put_word(dataa,val);
2801: }}}}
2802: void op_e6d8(UWORD opcode)
2803: {
2804: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2805: {{ CPTR dataa = regs.a[srcreg];
2806: WORD data = get_word(dataa);
2807: { regs.a[srcreg] += 2;
2808: { UWORD val = data;
2809: int carry = val&1;
2810: ULONG cmask = 0x8000;
2811: val >>= 1;
2812: if(carry) val |= cmask;
2813: regs.v = regs.c = 0;
2814: regs.z = ((WORD)(val)) == 0;
2815: regs.n = ((WORD)(val)) < 0;
2816: regs.c = carry!=0;
2817: put_word(dataa,val);
2818: }}}}}
2819: void op_e6e0(UWORD opcode)
2820: {
2821: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2822: {{ regs.a[srcreg] -= 2;
2823: { CPTR dataa = regs.a[srcreg];
2824: WORD data = get_word(dataa);
2825: { UWORD val = data;
2826: int carry = val&1;
2827: ULONG cmask = 0x8000;
2828: val >>= 1;
2829: if(carry) val |= cmask;
2830: regs.v = regs.c = 0;
2831: regs.z = ((WORD)(val)) == 0;
2832: regs.n = ((WORD)(val)) < 0;
2833: regs.c = carry!=0;
2834: put_word(dataa,val);
2835: }}}}}
2836: void op_e6e8(UWORD opcode)
2837: {
2838: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2839: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
2840: WORD data = get_word(dataa);
2841: { UWORD val = data;
2842: int carry = val&1;
2843: ULONG cmask = 0x8000;
2844: val >>= 1;
2845: if(carry) val |= cmask;
2846: regs.v = regs.c = 0;
2847: regs.z = ((WORD)(val)) == 0;
2848: regs.n = ((WORD)(val)) < 0;
2849: regs.c = carry!=0;
2850: put_word(dataa,val);
2851: }}}}
2852: void op_e6f0(UWORD opcode)
2853: {
2854: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
2855: {{ CPTR dataa = regs.a[srcreg];
2856: UWORD datadp = nextiword();
2857: dataa += (LONG)(BYTE)(datadp & 0xFF);
2858: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12];
2859: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr;
2860: dataa += datadpr;
2861: { WORD data = get_word(dataa);
2862: { UWORD val = data;
2863: int carry = val&1;
2864: ULONG cmask = 0x8000;
2865: val >>= 1;
2866: if(carry) val |= cmask;
2867: regs.v = regs.c = 0;
2868: regs.z = ((WORD)(val)) == 0;
2869: regs.n = ((WORD)(val)) < 0;
2870: regs.c = carry!=0;
2871: put_word(dataa,val);
2872: }}}}}}
2873: void op_e6f8(UWORD opcode)
2874: {
2875: {{ CPTR dataa = (LONG)(WORD)nextiword();
2876: WORD data = get_word(dataa);
2877: { UWORD val = data;
2878: int carry = val&1;
2879: ULONG cmask = 0x8000;
2880: val >>= 1;
2881: if(carry) val |= cmask;
2882: regs.v = regs.c = 0;
2883: regs.z = ((WORD)(val)) == 0;
2884: regs.n = ((WORD)(val)) < 0;
2885: regs.c = carry!=0;
2886: put_word(dataa,val);
2887: }}}}
2888: void op_e6f9(UWORD opcode)
2889: {
2890: {{ CPTR dataa = nextilong();
2891: WORD data = get_word(dataa);
2892: { UWORD val = data;
2893: int carry = val&1;
2894: ULONG cmask = 0x8000;
2895: val >>= 1;
2896: if(carry) val |= cmask;
2897: regs.v = regs.c = 0;
2898: regs.z = ((WORD)(val)) == 0;
2899: regs.n = ((WORD)(val)) < 0;
2900: regs.c = carry!=0;
2901: put_word(dataa,val);
2902: }}}}
2903: void op_e700(UWORD opcode)
2904: {
2905: ULONG srcreg = 3;
2906: ULONG dstreg = (opcode & 7) >> 0;
2907: {{ ULONG cnt = srcreg;
2908: { BYTE data = regs.d[dstreg];
2909: { UBYTE val = data;
2910: cnt &= 63;
2911: regs.v = 0;
2912: { ULONG cmask = 0x80;
2913: ULONG sign = cmask & val;
2914: for(;cnt;--cnt){
2915: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
2916: if ((val&cmask)!=sign)regs.v=1;
2917: }
2918: regs.n = (val&cmask) != 0;
2919: regs.z = val == 0;
2920: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2921: }}}}}}
2922: void op_e708(UWORD opcode)
2923: {
2924: ULONG srcreg = 3;
2925: ULONG dstreg = (opcode & 7) >> 0;
2926: {{ ULONG cnt = srcreg;
2927: { BYTE data = regs.d[dstreg];
2928: { UBYTE val = data;
2929: cnt &= 63;
2930: { int carry = 0;
2931: ULONG cmask = 0x80;
2932: for(;cnt;--cnt){
2933: carry=val&cmask; val <<= 1;
2934: }
2935: regs.v = regs.c = 0;
2936: regs.z = ((BYTE)(val)) == 0;
2937: regs.n = ((BYTE)(val)) < 0;
2938: regs.c = regs.x = carry!=0;
2939: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2940: }}}}}}
2941: void op_e710(UWORD opcode)
2942: {
2943: ULONG srcreg = 3;
2944: ULONG dstreg = (opcode & 7) >> 0;
2945: {{ ULONG cnt = srcreg;
2946: { BYTE data = regs.d[dstreg];
2947: { UBYTE val = data;
2948: cnt &= 63;
2949: { int carry = 0;
2950: ULONG cmask = 0x80;
2951: for(;cnt;--cnt){
2952: carry=val&cmask; val <<= 1;
2953: if(regs.x) val |= 1;
2954: regs.x = carry != 0;
2955: }
2956: regs.v = regs.c = 0;
2957: regs.z = ((BYTE)(val)) == 0;
2958: regs.n = ((BYTE)(val)) < 0;
2959: regs.x = regs.c = carry!=0;
2960: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2961: }}}}}}
2962: void op_e718(UWORD opcode)
2963: {
2964: ULONG srcreg = 3;
2965: ULONG dstreg = (opcode & 7) >> 0;
2966: {{ ULONG cnt = srcreg;
2967: { BYTE data = regs.d[dstreg];
2968: { UBYTE val = data;
2969: cnt &= 63;
2970: { int carry = 0;
2971: ULONG cmask = 0x80;
2972: for(;cnt;--cnt){
2973: carry=val&cmask; val <<= 1;
2974: if(carry) val |= 1;
2975: }
2976: regs.v = regs.c = 0;
2977: regs.z = ((BYTE)(val)) == 0;
2978: regs.n = ((BYTE)(val)) < 0;
2979: regs.c = carry!=0;
2980: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
2981: }}}}}}
2982: void op_e740(UWORD opcode)
2983: {
2984: ULONG srcreg = 3;
2985: ULONG dstreg = (opcode & 7) >> 0;
2986: {{ ULONG cnt = srcreg;
2987: { WORD data = regs.d[dstreg];
2988: { UWORD val = data;
2989: cnt &= 63;
2990: regs.v = 0;
2991: { ULONG cmask = 0x8000;
2992: ULONG sign = cmask & val;
2993: for(;cnt;--cnt){
2994: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
2995: if ((val&cmask)!=sign)regs.v=1;
2996: }
2997: regs.n = (val&cmask) != 0;
2998: regs.z = val == 0;
2999: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3000: }}}}}}
3001: void op_e748(UWORD opcode)
3002: {
3003: ULONG srcreg = 3;
3004: ULONG dstreg = (opcode & 7) >> 0;
3005: {{ ULONG cnt = srcreg;
3006: { WORD data = regs.d[dstreg];
3007: { UWORD val = data;
3008: cnt &= 63;
3009: { int carry = 0;
3010: ULONG cmask = 0x8000;
3011: for(;cnt;--cnt){
3012: carry=val&cmask; val <<= 1;
3013: }
3014: regs.v = regs.c = 0;
3015: regs.z = ((WORD)(val)) == 0;
3016: regs.n = ((WORD)(val)) < 0;
3017: regs.c = regs.x = carry!=0;
3018: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3019: }}}}}}
3020: void op_e750(UWORD opcode)
3021: {
3022: ULONG srcreg = 3;
3023: ULONG dstreg = (opcode & 7) >> 0;
3024: {{ ULONG cnt = srcreg;
3025: { WORD data = regs.d[dstreg];
3026: { UWORD val = data;
3027: cnt &= 63;
3028: { int carry = 0;
3029: ULONG cmask = 0x8000;
3030: for(;cnt;--cnt){
3031: carry=val&cmask; val <<= 1;
3032: if(regs.x) val |= 1;
3033: regs.x = carry != 0;
3034: }
3035: regs.v = regs.c = 0;
3036: regs.z = ((WORD)(val)) == 0;
3037: regs.n = ((WORD)(val)) < 0;
3038: regs.x = regs.c = carry!=0;
3039: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3040: }}}}}}
3041: void op_e758(UWORD opcode)
3042: {
3043: ULONG srcreg = 3;
3044: ULONG dstreg = (opcode & 7) >> 0;
3045: {{ ULONG cnt = srcreg;
3046: { WORD data = regs.d[dstreg];
3047: { UWORD val = data;
3048: cnt &= 63;
3049: { int carry = 0;
3050: ULONG cmask = 0x8000;
3051: for(;cnt;--cnt){
3052: carry=val&cmask; val <<= 1;
3053: if(carry) val |= 1;
3054: }
3055: regs.v = regs.c = 0;
3056: regs.z = ((WORD)(val)) == 0;
3057: regs.n = ((WORD)(val)) < 0;
3058: regs.c = carry!=0;
3059: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3060: }}}}}}
3061: void op_e780(UWORD opcode)
3062: {
3063: ULONG srcreg = 3;
3064: ULONG dstreg = (opcode & 7) >> 0;
3065: {{ ULONG cnt = srcreg;
3066: { LONG data = regs.d[dstreg];
3067: { ULONG val = data;
3068: cnt &= 63;
3069: regs.v = 0;
3070: { ULONG cmask = 0x80000000;
3071: ULONG sign = cmask & val;
3072: for(;cnt;--cnt){
3073: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
3074: if ((val&cmask)!=sign)regs.v=1;
3075: }
3076: regs.n = (val&cmask) != 0;
3077: regs.z = val == 0;
3078: regs.d[dstreg] = (val);
3079: }}}}}}
3080: void op_e788(UWORD opcode)
3081: {
3082: ULONG srcreg = 3;
3083: ULONG dstreg = (opcode & 7) >> 0;
3084: {{ ULONG cnt = srcreg;
3085: { LONG data = regs.d[dstreg];
3086: { ULONG val = data;
3087: cnt &= 63;
3088: { int carry = 0;
3089: ULONG cmask = 0x80000000;
3090: for(;cnt;--cnt){
3091: carry=val&cmask; val <<= 1;
3092: }
3093: regs.v = regs.c = 0;
3094: regs.z = ((LONG)(val)) == 0;
3095: regs.n = ((LONG)(val)) < 0;
3096: regs.c = regs.x = carry!=0;
3097: regs.d[dstreg] = (val);
3098: }}}}}}
3099: void op_e790(UWORD opcode)
3100: {
3101: ULONG srcreg = 3;
3102: ULONG dstreg = (opcode & 7) >> 0;
3103: {{ ULONG cnt = srcreg;
3104: { LONG data = regs.d[dstreg];
3105: { ULONG val = data;
3106: cnt &= 63;
3107: { int carry = 0;
3108: ULONG cmask = 0x80000000;
3109: for(;cnt;--cnt){
3110: carry=val&cmask; val <<= 1;
3111: if(regs.x) val |= 1;
3112: regs.x = carry != 0;
3113: }
3114: regs.v = regs.c = 0;
3115: regs.z = ((LONG)(val)) == 0;
3116: regs.n = ((LONG)(val)) < 0;
3117: regs.x = regs.c = carry!=0;
3118: regs.d[dstreg] = (val);
3119: }}}}}}
3120: void op_e798(UWORD opcode)
3121: {
3122: ULONG srcreg = 3;
3123: ULONG dstreg = (opcode & 7) >> 0;
3124: {{ ULONG cnt = srcreg;
3125: { LONG data = regs.d[dstreg];
3126: { ULONG val = data;
3127: cnt &= 63;
3128: { int carry = 0;
3129: ULONG cmask = 0x80000000;
3130: for(;cnt;--cnt){
3131: carry=val&cmask; val <<= 1;
3132: if(carry) val |= 1;
3133: }
3134: regs.v = regs.c = 0;
3135: regs.z = ((LONG)(val)) == 0;
3136: regs.n = ((LONG)(val)) < 0;
3137: regs.c = carry!=0;
3138: regs.d[dstreg] = (val);
3139: }}}}}}
3140: void op_e7d0(UWORD opcode)
3141: {
3142: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3143: {{ CPTR dataa = regs.a[srcreg];
3144: WORD data = get_word(dataa);
3145: { UWORD val = data;
3146: ULONG cmask = 0x8000;
3147: int carry = val&cmask;
3148: val <<= 1;
3149: if(carry) val |= 1;
3150: regs.v = regs.c = 0;
3151: regs.z = ((WORD)(val)) == 0;
3152: regs.n = ((WORD)(val)) < 0;
3153: regs.c = carry!=0;
3154: put_word(dataa,val);
3155: }}}}
3156: void op_e7d8(UWORD opcode)
3157: {
3158: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3159: {{ CPTR dataa = regs.a[srcreg];
3160: WORD data = get_word(dataa);
3161: { regs.a[srcreg] += 2;
3162: { UWORD val = data;
3163: ULONG cmask = 0x8000;
3164: int carry = val&cmask;
3165: val <<= 1;
3166: if(carry) val |= 1;
3167: regs.v = regs.c = 0;
3168: regs.z = ((WORD)(val)) == 0;
3169: regs.n = ((WORD)(val)) < 0;
3170: regs.c = carry!=0;
3171: put_word(dataa,val);
3172: }}}}}
3173: void op_e7e0(UWORD opcode)
3174: {
3175: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3176: {{ regs.a[srcreg] -= 2;
3177: { CPTR dataa = regs.a[srcreg];
3178: WORD data = get_word(dataa);
3179: { UWORD val = data;
3180: ULONG cmask = 0x8000;
3181: int carry = val&cmask;
3182: val <<= 1;
3183: if(carry) val |= 1;
3184: regs.v = regs.c = 0;
3185: regs.z = ((WORD)(val)) == 0;
3186: regs.n = ((WORD)(val)) < 0;
3187: regs.c = carry!=0;
3188: put_word(dataa,val);
3189: }}}}}
3190: void op_e7e8(UWORD opcode)
3191: {
3192: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3193: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
3194: WORD data = get_word(dataa);
3195: { UWORD val = data;
3196: ULONG cmask = 0x8000;
3197: int carry = val&cmask;
3198: val <<= 1;
3199: if(carry) val |= 1;
3200: regs.v = regs.c = 0;
3201: regs.z = ((WORD)(val)) == 0;
3202: regs.n = ((WORD)(val)) < 0;
3203: regs.c = carry!=0;
3204: put_word(dataa,val);
3205: }}}}
3206: void op_e7f0(UWORD opcode)
3207: {
3208: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);
3209: {{ CPTR dataa = regs.a[srcreg];
3210: UWORD datadp = nextiword();
3211: dataa += (LONG)(BYTE)(datadp & 0xFF);
3212: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12];
3213: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr;
3214: dataa += datadpr;
3215: { WORD data = get_word(dataa);
3216: { UWORD val = data;
3217: ULONG cmask = 0x8000;
3218: int carry = val&cmask;
3219: val <<= 1;
3220: if(carry) val |= 1;
3221: regs.v = regs.c = 0;
3222: regs.z = ((WORD)(val)) == 0;
3223: regs.n = ((WORD)(val)) < 0;
3224: regs.c = carry!=0;
3225: put_word(dataa,val);
3226: }}}}}}
3227: void op_e7f8(UWORD opcode)
3228: {
3229: {{ CPTR dataa = (LONG)(WORD)nextiword();
3230: WORD data = get_word(dataa);
3231: { UWORD val = data;
3232: ULONG cmask = 0x8000;
3233: int carry = val&cmask;
3234: val <<= 1;
3235: if(carry) val |= 1;
3236: regs.v = regs.c = 0;
3237: regs.z = ((WORD)(val)) == 0;
3238: regs.n = ((WORD)(val)) < 0;
3239: regs.c = carry!=0;
3240: put_word(dataa,val);
3241: }}}}
3242: void op_e7f9(UWORD opcode)
3243: {
3244: {{ CPTR dataa = nextilong();
3245: WORD data = get_word(dataa);
3246: { UWORD val = data;
3247: ULONG cmask = 0x8000;
3248: int carry = val&cmask;
3249: val <<= 1;
3250: if(carry) val |= 1;
3251: regs.v = regs.c = 0;
3252: regs.z = ((WORD)(val)) == 0;
3253: regs.n = ((WORD)(val)) < 0;
3254: regs.c = carry!=0;
3255: put_word(dataa,val);
3256: }}}}
3257: void op_e800(UWORD opcode)
3258: {
3259: ULONG srcreg = 4;
3260: ULONG dstreg = (opcode & 7) >> 0;
3261: {{ ULONG cnt = srcreg;
3262: { BYTE data = regs.d[dstreg];
3263: { UBYTE val = data;
3264: cnt &= 63;
3265: regs.v = 0;
3266: { ULONG cmask = 0x80;
3267: ULONG sign = cmask & val;
3268: for(;cnt;--cnt){
3269: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
3270: }
3271: regs.n = sign != 0;
3272: regs.z = val == 0;
3273: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3274: }}}}}}
3275: void op_e808(UWORD opcode)
3276: {
3277: ULONG srcreg = 4;
3278: ULONG dstreg = (opcode & 7) >> 0;
3279: {{ ULONG cnt = srcreg;
3280: { BYTE data = regs.d[dstreg];
3281: { UBYTE val = data;
3282: cnt &= 63;
3283: { int carry = 0;
3284: for(;cnt;--cnt){
3285: carry=val&1; val >>= 1;
3286: }
3287: regs.v = regs.c = 0;
3288: regs.z = ((BYTE)(val)) == 0;
3289: regs.n = ((BYTE)(val)) < 0;
3290: regs.c = regs.x = carry!=0;
3291: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3292: }}}}}}
3293: void op_e810(UWORD opcode)
3294: {
3295: ULONG srcreg = 4;
3296: ULONG dstreg = (opcode & 7) >> 0;
3297: {{ ULONG cnt = srcreg;
3298: { BYTE data = regs.d[dstreg];
3299: { UBYTE val = data;
3300: cnt &= 63;
3301: { int carry = 0;
3302: ULONG cmask = 0x80;
3303: for(;cnt;--cnt){
3304: carry=val&1; val >>= 1;
3305: if(regs.x) val |= cmask;
3306: regs.x = carry != 0;
3307: }
3308: regs.v = regs.c = 0;
3309: regs.z = ((BYTE)(val)) == 0;
3310: regs.n = ((BYTE)(val)) < 0;
3311: regs.x = regs.c = carry!=0;
3312: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3313: }}}}}}
3314: void op_e818(UWORD opcode)
3315: {
3316: ULONG srcreg = 4;
3317: ULONG dstreg = (opcode & 7) >> 0;
3318: {{ ULONG cnt = srcreg;
3319: { BYTE data = regs.d[dstreg];
3320: { UBYTE val = data;
3321: cnt &= 63;
3322: { int carry = 0;
3323: ULONG cmask = 0x80;
3324: for(;cnt;--cnt){
3325: carry=val&1; val = (ULONG)val >> 1;
3326: if(carry) val |= cmask;
3327: }
3328: regs.v = regs.c = 0;
3329: regs.z = ((BYTE)(val)) == 0;
3330: regs.n = ((BYTE)(val)) < 0;
3331: regs.c = carry!=0;
3332: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3333: }}}}}}
3334: void op_e840(UWORD opcode)
3335: {
3336: ULONG srcreg = 4;
3337: ULONG dstreg = (opcode & 7) >> 0;
3338: {{ ULONG cnt = srcreg;
3339: { WORD data = regs.d[dstreg];
3340: { UWORD val = data;
3341: cnt &= 63;
3342: regs.v = 0;
3343: { ULONG cmask = 0x8000;
3344: ULONG sign = cmask & val;
3345: for(;cnt;--cnt){
3346: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
3347: }
3348: regs.n = sign != 0;
3349: regs.z = val == 0;
3350: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3351: }}}}}}
3352: void op_e848(UWORD opcode)
3353: {
3354: ULONG srcreg = 4;
3355: ULONG dstreg = (opcode & 7) >> 0;
3356: {{ ULONG cnt = srcreg;
3357: { WORD data = regs.d[dstreg];
3358: { UWORD val = data;
3359: cnt &= 63;
3360: { int carry = 0;
3361: for(;cnt;--cnt){
3362: carry=val&1; val >>= 1;
3363: }
3364: regs.v = regs.c = 0;
3365: regs.z = ((WORD)(val)) == 0;
3366: regs.n = ((WORD)(val)) < 0;
3367: regs.c = regs.x = carry!=0;
3368: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3369: }}}}}}
3370: void op_e850(UWORD opcode)
3371: {
3372: ULONG srcreg = 4;
3373: ULONG dstreg = (opcode & 7) >> 0;
3374: {{ ULONG cnt = srcreg;
3375: { WORD data = regs.d[dstreg];
3376: { UWORD val = data;
3377: cnt &= 63;
3378: { int carry = 0;
3379: ULONG cmask = 0x8000;
3380: for(;cnt;--cnt){
3381: carry=val&1; val >>= 1;
3382: if(regs.x) val |= cmask;
3383: regs.x = carry != 0;
3384: }
3385: regs.v = regs.c = 0;
3386: regs.z = ((WORD)(val)) == 0;
3387: regs.n = ((WORD)(val)) < 0;
3388: regs.x = regs.c = carry!=0;
3389: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3390: }}}}}}
3391: void op_e858(UWORD opcode)
3392: {
3393: ULONG srcreg = 4;
3394: ULONG dstreg = (opcode & 7) >> 0;
3395: {{ ULONG cnt = srcreg;
3396: { WORD data = regs.d[dstreg];
3397: { UWORD val = data;
3398: cnt &= 63;
3399: { int carry = 0;
3400: ULONG cmask = 0x8000;
3401: for(;cnt;--cnt){
3402: carry=val&1; val = (ULONG)val >> 1;
3403: if(carry) val |= cmask;
3404: }
3405: regs.v = regs.c = 0;
3406: regs.z = ((WORD)(val)) == 0;
3407: regs.n = ((WORD)(val)) < 0;
3408: regs.c = carry!=0;
3409: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3410: }}}}}}
3411: void op_e880(UWORD opcode)
3412: {
3413: ULONG srcreg = 4;
3414: ULONG dstreg = (opcode & 7) >> 0;
3415: {{ ULONG cnt = srcreg;
3416: { LONG data = regs.d[dstreg];
3417: { ULONG val = data;
3418: cnt &= 63;
3419: regs.v = 0;
3420: { ULONG cmask = 0x80000000;
3421: ULONG sign = cmask & val;
3422: for(;cnt;--cnt){
3423: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
3424: }
3425: regs.n = sign != 0;
3426: regs.z = val == 0;
3427: regs.d[dstreg] = (val);
3428: }}}}}}
3429: void op_e888(UWORD opcode)
3430: {
3431: ULONG srcreg = 4;
3432: ULONG dstreg = (opcode & 7) >> 0;
3433: {{ ULONG cnt = srcreg;
3434: { LONG data = regs.d[dstreg];
3435: { ULONG val = data;
3436: cnt &= 63;
3437: { int carry = 0;
3438: for(;cnt;--cnt){
3439: carry=val&1; val >>= 1;
3440: }
3441: regs.v = regs.c = 0;
3442: regs.z = ((LONG)(val)) == 0;
3443: regs.n = ((LONG)(val)) < 0;
3444: regs.c = regs.x = carry!=0;
3445: regs.d[dstreg] = (val);
3446: }}}}}}
3447: void op_e890(UWORD opcode)
3448: {
3449: ULONG srcreg = 4;
3450: ULONG dstreg = (opcode & 7) >> 0;
3451: {{ ULONG cnt = srcreg;
3452: { LONG data = regs.d[dstreg];
3453: { ULONG val = data;
3454: cnt &= 63;
3455: { int carry = 0;
3456: ULONG cmask = 0x80000000;
3457: for(;cnt;--cnt){
3458: carry=val&1; val >>= 1;
3459: if(regs.x) val |= cmask;
3460: regs.x = carry != 0;
3461: }
3462: regs.v = regs.c = 0;
3463: regs.z = ((LONG)(val)) == 0;
3464: regs.n = ((LONG)(val)) < 0;
3465: regs.x = regs.c = carry!=0;
3466: regs.d[dstreg] = (val);
3467: }}}}}}
3468: void op_e898(UWORD opcode)
3469: {
3470: ULONG srcreg = 4;
3471: ULONG dstreg = (opcode & 7) >> 0;
3472: {{ ULONG cnt = srcreg;
3473: { LONG data = regs.d[dstreg];
3474: { ULONG val = data;
3475: cnt &= 63;
3476: { int carry = 0;
3477: ULONG cmask = 0x80000000;
3478: for(;cnt;--cnt){
3479: carry=val&1; val = (ULONG)val >> 1;
3480: if(carry) val |= cmask;
3481: }
3482: regs.v = regs.c = 0;
3483: regs.z = ((LONG)(val)) == 0;
3484: regs.n = ((LONG)(val)) < 0;
3485: regs.c = carry!=0;
3486: regs.d[dstreg] = (val);
3487: }}}}}}
3488: void op_e900(UWORD opcode)
3489: {
3490: ULONG srcreg = 4;
3491: ULONG dstreg = (opcode & 7) >> 0;
3492: {{ ULONG cnt = srcreg;
3493: { BYTE data = regs.d[dstreg];
3494: { UBYTE val = data;
3495: cnt &= 63;
3496: regs.v = 0;
3497: { ULONG cmask = 0x80;
3498: ULONG sign = cmask & val;
3499: for(;cnt;--cnt){
3500: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
3501: if ((val&cmask)!=sign)regs.v=1;
3502: }
3503: regs.n = (val&cmask) != 0;
3504: regs.z = val == 0;
3505: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3506: }}}}}}
3507: void op_e908(UWORD opcode)
3508: {
3509: ULONG srcreg = 4;
3510: ULONG dstreg = (opcode & 7) >> 0;
3511: {{ ULONG cnt = srcreg;
3512: { BYTE data = regs.d[dstreg];
3513: { UBYTE val = data;
3514: cnt &= 63;
3515: { int carry = 0;
3516: ULONG cmask = 0x80;
3517: for(;cnt;--cnt){
3518: carry=val&cmask; val <<= 1;
3519: }
3520: regs.v = regs.c = 0;
3521: regs.z = ((BYTE)(val)) == 0;
3522: regs.n = ((BYTE)(val)) < 0;
3523: regs.c = regs.x = carry!=0;
3524: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3525: }}}}}}
3526: void op_e910(UWORD opcode)
3527: {
3528: ULONG srcreg = 4;
3529: ULONG dstreg = (opcode & 7) >> 0;
3530: {{ ULONG cnt = srcreg;
3531: { BYTE data = regs.d[dstreg];
3532: { UBYTE val = data;
3533: cnt &= 63;
3534: { int carry = 0;
3535: ULONG cmask = 0x80;
3536: for(;cnt;--cnt){
3537: carry=val&cmask; val <<= 1;
3538: if(regs.x) val |= 1;
3539: regs.x = carry != 0;
3540: }
3541: regs.v = regs.c = 0;
3542: regs.z = ((BYTE)(val)) == 0;
3543: regs.n = ((BYTE)(val)) < 0;
3544: regs.x = regs.c = carry!=0;
3545: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3546: }}}}}}
3547: void op_e918(UWORD opcode)
3548: {
3549: ULONG srcreg = 4;
3550: ULONG dstreg = (opcode & 7) >> 0;
3551: {{ ULONG cnt = srcreg;
3552: { BYTE data = regs.d[dstreg];
3553: { UBYTE val = data;
3554: cnt &= 63;
3555: { int carry = 0;
3556: ULONG cmask = 0x80;
3557: for(;cnt;--cnt){
3558: carry=val&cmask; val <<= 1;
3559: if(carry) val |= 1;
3560: }
3561: regs.v = regs.c = 0;
3562: regs.z = ((BYTE)(val)) == 0;
3563: regs.n = ((BYTE)(val)) < 0;
3564: regs.c = carry!=0;
3565: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3566: }}}}}}
3567: void op_e940(UWORD opcode)
3568: {
3569: ULONG srcreg = 4;
3570: ULONG dstreg = (opcode & 7) >> 0;
3571: {{ ULONG cnt = srcreg;
3572: { WORD data = regs.d[dstreg];
3573: { UWORD val = data;
3574: cnt &= 63;
3575: regs.v = 0;
3576: { ULONG cmask = 0x8000;
3577: ULONG sign = cmask & val;
3578: for(;cnt;--cnt){
3579: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
3580: if ((val&cmask)!=sign)regs.v=1;
3581: }
3582: regs.n = (val&cmask) != 0;
3583: regs.z = val == 0;
3584: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3585: }}}}}}
3586: void op_e948(UWORD opcode)
3587: {
3588: ULONG srcreg = 4;
3589: ULONG dstreg = (opcode & 7) >> 0;
3590: {{ ULONG cnt = srcreg;
3591: { WORD data = regs.d[dstreg];
3592: { UWORD val = data;
3593: cnt &= 63;
3594: { int carry = 0;
3595: ULONG cmask = 0x8000;
3596: for(;cnt;--cnt){
3597: carry=val&cmask; val <<= 1;
3598: }
3599: regs.v = regs.c = 0;
3600: regs.z = ((WORD)(val)) == 0;
3601: regs.n = ((WORD)(val)) < 0;
3602: regs.c = regs.x = carry!=0;
3603: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3604: }}}}}}
3605: void op_e950(UWORD opcode)
3606: {
3607: ULONG srcreg = 4;
3608: ULONG dstreg = (opcode & 7) >> 0;
3609: {{ ULONG cnt = srcreg;
3610: { WORD data = regs.d[dstreg];
3611: { UWORD val = data;
3612: cnt &= 63;
3613: { int carry = 0;
3614: ULONG cmask = 0x8000;
3615: for(;cnt;--cnt){
3616: carry=val&cmask; val <<= 1;
3617: if(regs.x) val |= 1;
3618: regs.x = carry != 0;
3619: }
3620: regs.v = regs.c = 0;
3621: regs.z = ((WORD)(val)) == 0;
3622: regs.n = ((WORD)(val)) < 0;
3623: regs.x = regs.c = carry!=0;
3624: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3625: }}}}}}
3626: void op_e958(UWORD opcode)
3627: {
3628: ULONG srcreg = 4;
3629: ULONG dstreg = (opcode & 7) >> 0;
3630: {{ ULONG cnt = srcreg;
3631: { WORD data = regs.d[dstreg];
3632: { UWORD val = data;
3633: cnt &= 63;
3634: { int carry = 0;
3635: ULONG cmask = 0x8000;
3636: for(;cnt;--cnt){
3637: carry=val&cmask; val <<= 1;
3638: if(carry) val |= 1;
3639: }
3640: regs.v = regs.c = 0;
3641: regs.z = ((WORD)(val)) == 0;
3642: regs.n = ((WORD)(val)) < 0;
3643: regs.c = carry!=0;
3644: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3645: }}}}}}
3646: void op_e980(UWORD opcode)
3647: {
3648: ULONG srcreg = 4;
3649: ULONG dstreg = (opcode & 7) >> 0;
3650: {{ ULONG cnt = srcreg;
3651: { LONG data = regs.d[dstreg];
3652: { ULONG val = data;
3653: cnt &= 63;
3654: regs.v = 0;
3655: { ULONG cmask = 0x80000000;
3656: ULONG sign = cmask & val;
3657: for(;cnt;--cnt){
3658: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
3659: if ((val&cmask)!=sign)regs.v=1;
3660: }
3661: regs.n = (val&cmask) != 0;
3662: regs.z = val == 0;
3663: regs.d[dstreg] = (val);
3664: }}}}}}
3665: void op_e988(UWORD opcode)
3666: {
3667: ULONG srcreg = 4;
3668: ULONG dstreg = (opcode & 7) >> 0;
3669: {{ ULONG cnt = srcreg;
3670: { LONG data = regs.d[dstreg];
3671: { ULONG val = data;
3672: cnt &= 63;
3673: { int carry = 0;
3674: ULONG cmask = 0x80000000;
3675: for(;cnt;--cnt){
3676: carry=val&cmask; val <<= 1;
3677: }
3678: regs.v = regs.c = 0;
3679: regs.z = ((LONG)(val)) == 0;
3680: regs.n = ((LONG)(val)) < 0;
3681: regs.c = regs.x = carry!=0;
3682: regs.d[dstreg] = (val);
3683: }}}}}}
3684: void op_e990(UWORD opcode)
3685: {
3686: ULONG srcreg = 4;
3687: ULONG dstreg = (opcode & 7) >> 0;
3688: {{ ULONG cnt = srcreg;
3689: { LONG data = regs.d[dstreg];
3690: { ULONG val = data;
3691: cnt &= 63;
3692: { int carry = 0;
3693: ULONG cmask = 0x80000000;
3694: for(;cnt;--cnt){
3695: carry=val&cmask; val <<= 1;
3696: if(regs.x) val |= 1;
3697: regs.x = carry != 0;
3698: }
3699: regs.v = regs.c = 0;
3700: regs.z = ((LONG)(val)) == 0;
3701: regs.n = ((LONG)(val)) < 0;
3702: regs.x = regs.c = carry!=0;
3703: regs.d[dstreg] = (val);
3704: }}}}}}
3705: void op_e998(UWORD opcode)
3706: {
3707: ULONG srcreg = 4;
3708: ULONG dstreg = (opcode & 7) >> 0;
3709: {{ ULONG cnt = srcreg;
3710: { LONG data = regs.d[dstreg];
3711: { ULONG val = data;
3712: cnt &= 63;
3713: { int carry = 0;
3714: ULONG cmask = 0x80000000;
3715: for(;cnt;--cnt){
3716: carry=val&cmask; val <<= 1;
3717: if(carry) val |= 1;
3718: }
3719: regs.v = regs.c = 0;
3720: regs.z = ((LONG)(val)) == 0;
3721: regs.n = ((LONG)(val)) < 0;
3722: regs.c = carry!=0;
3723: regs.d[dstreg] = (val);
3724: }}}}}}
3725: void op_ea00(UWORD opcode)
3726: {
3727: ULONG srcreg = 5;
3728: ULONG dstreg = (opcode & 7) >> 0;
3729: {{ ULONG cnt = srcreg;
3730: { BYTE data = regs.d[dstreg];
3731: { UBYTE val = data;
3732: cnt &= 63;
3733: regs.v = 0;
3734: { ULONG cmask = 0x80;
3735: ULONG sign = cmask & val;
3736: for(;cnt;--cnt){
3737: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
3738: }
3739: regs.n = sign != 0;
3740: regs.z = val == 0;
3741: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3742: }}}}}}
3743: void op_ea08(UWORD opcode)
3744: {
3745: ULONG srcreg = 5;
3746: ULONG dstreg = (opcode & 7) >> 0;
3747: {{ ULONG cnt = srcreg;
3748: { BYTE data = regs.d[dstreg];
3749: { UBYTE val = data;
3750: cnt &= 63;
3751: { int carry = 0;
3752: for(;cnt;--cnt){
3753: carry=val&1; val >>= 1;
3754: }
3755: regs.v = regs.c = 0;
3756: regs.z = ((BYTE)(val)) == 0;
3757: regs.n = ((BYTE)(val)) < 0;
3758: regs.c = regs.x = carry!=0;
3759: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3760: }}}}}}
3761: void op_ea10(UWORD opcode)
3762: {
3763: ULONG srcreg = 5;
3764: ULONG dstreg = (opcode & 7) >> 0;
3765: {{ ULONG cnt = srcreg;
3766: { BYTE data = regs.d[dstreg];
3767: { UBYTE val = data;
3768: cnt &= 63;
3769: { int carry = 0;
3770: ULONG cmask = 0x80;
3771: for(;cnt;--cnt){
3772: carry=val&1; val >>= 1;
3773: if(regs.x) val |= cmask;
3774: regs.x = carry != 0;
3775: }
3776: regs.v = regs.c = 0;
3777: regs.z = ((BYTE)(val)) == 0;
3778: regs.n = ((BYTE)(val)) < 0;
3779: regs.x = regs.c = carry!=0;
3780: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3781: }}}}}}
3782: void op_ea18(UWORD opcode)
3783: {
3784: ULONG srcreg = 5;
3785: ULONG dstreg = (opcode & 7) >> 0;
3786: {{ ULONG cnt = srcreg;
3787: { BYTE data = regs.d[dstreg];
3788: { UBYTE val = data;
3789: cnt &= 63;
3790: { int carry = 0;
3791: ULONG cmask = 0x80;
3792: for(;cnt;--cnt){
3793: carry=val&1; val = (ULONG)val >> 1;
3794: if(carry) val |= cmask;
3795: }
3796: regs.v = regs.c = 0;
3797: regs.z = ((BYTE)(val)) == 0;
3798: regs.n = ((BYTE)(val)) < 0;
3799: regs.c = carry!=0;
3800: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3801: }}}}}}
3802: void op_ea40(UWORD opcode)
3803: {
3804: ULONG srcreg = 5;
3805: ULONG dstreg = (opcode & 7) >> 0;
3806: {{ ULONG cnt = srcreg;
3807: { WORD data = regs.d[dstreg];
3808: { UWORD val = data;
3809: cnt &= 63;
3810: regs.v = 0;
3811: { ULONG cmask = 0x8000;
3812: ULONG sign = cmask & val;
3813: for(;cnt;--cnt){
3814: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
3815: }
3816: regs.n = sign != 0;
3817: regs.z = val == 0;
3818: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3819: }}}}}}
3820: void op_ea48(UWORD opcode)
3821: {
3822: ULONG srcreg = 5;
3823: ULONG dstreg = (opcode & 7) >> 0;
3824: {{ ULONG cnt = srcreg;
3825: { WORD data = regs.d[dstreg];
3826: { UWORD val = data;
3827: cnt &= 63;
3828: { int carry = 0;
3829: for(;cnt;--cnt){
3830: carry=val&1; val >>= 1;
3831: }
3832: regs.v = regs.c = 0;
3833: regs.z = ((WORD)(val)) == 0;
3834: regs.n = ((WORD)(val)) < 0;
3835: regs.c = regs.x = carry!=0;
3836: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3837: }}}}}}
3838: void op_ea50(UWORD opcode)
3839: {
3840: ULONG srcreg = 5;
3841: ULONG dstreg = (opcode & 7) >> 0;
3842: {{ ULONG cnt = srcreg;
3843: { WORD data = regs.d[dstreg];
3844: { UWORD val = data;
3845: cnt &= 63;
3846: { int carry = 0;
3847: ULONG cmask = 0x8000;
3848: for(;cnt;--cnt){
3849: carry=val&1; val >>= 1;
3850: if(regs.x) val |= cmask;
3851: regs.x = carry != 0;
3852: }
3853: regs.v = regs.c = 0;
3854: regs.z = ((WORD)(val)) == 0;
3855: regs.n = ((WORD)(val)) < 0;
3856: regs.x = regs.c = carry!=0;
3857: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3858: }}}}}}
3859: void op_ea58(UWORD opcode)
3860: {
3861: ULONG srcreg = 5;
3862: ULONG dstreg = (opcode & 7) >> 0;
3863: {{ ULONG cnt = srcreg;
3864: { WORD data = regs.d[dstreg];
3865: { UWORD val = data;
3866: cnt &= 63;
3867: { int carry = 0;
3868: ULONG cmask = 0x8000;
3869: for(;cnt;--cnt){
3870: carry=val&1; val = (ULONG)val >> 1;
3871: if(carry) val |= cmask;
3872: }
3873: regs.v = regs.c = 0;
3874: regs.z = ((WORD)(val)) == 0;
3875: regs.n = ((WORD)(val)) < 0;
3876: regs.c = carry!=0;
3877: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
3878: }}}}}}
3879: void op_ea80(UWORD opcode)
3880: {
3881: ULONG srcreg = 5;
3882: ULONG dstreg = (opcode & 7) >> 0;
3883: {{ ULONG cnt = srcreg;
3884: { LONG data = regs.d[dstreg];
3885: { ULONG val = data;
3886: cnt &= 63;
3887: regs.v = 0;
3888: { ULONG cmask = 0x80000000;
3889: ULONG sign = cmask & val;
3890: for(;cnt;--cnt){
3891: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
3892: }
3893: regs.n = sign != 0;
3894: regs.z = val == 0;
3895: regs.d[dstreg] = (val);
3896: }}}}}}
3897: void op_ea88(UWORD opcode)
3898: {
3899: ULONG srcreg = 5;
3900: ULONG dstreg = (opcode & 7) >> 0;
3901: {{ ULONG cnt = srcreg;
3902: { LONG data = regs.d[dstreg];
3903: { ULONG val = data;
3904: cnt &= 63;
3905: { int carry = 0;
3906: for(;cnt;--cnt){
3907: carry=val&1; val >>= 1;
3908: }
3909: regs.v = regs.c = 0;
3910: regs.z = ((LONG)(val)) == 0;
3911: regs.n = ((LONG)(val)) < 0;
3912: regs.c = regs.x = carry!=0;
3913: regs.d[dstreg] = (val);
3914: }}}}}}
3915: void op_ea90(UWORD opcode)
3916: {
3917: ULONG srcreg = 5;
3918: ULONG dstreg = (opcode & 7) >> 0;
3919: {{ ULONG cnt = srcreg;
3920: { LONG data = regs.d[dstreg];
3921: { ULONG val = data;
3922: cnt &= 63;
3923: { int carry = 0;
3924: ULONG cmask = 0x80000000;
3925: for(;cnt;--cnt){
3926: carry=val&1; val >>= 1;
3927: if(regs.x) val |= cmask;
3928: regs.x = carry != 0;
3929: }
3930: regs.v = regs.c = 0;
3931: regs.z = ((LONG)(val)) == 0;
3932: regs.n = ((LONG)(val)) < 0;
3933: regs.x = regs.c = carry!=0;
3934: regs.d[dstreg] = (val);
3935: }}}}}}
3936: void op_ea98(UWORD opcode)
3937: {
3938: ULONG srcreg = 5;
3939: ULONG dstreg = (opcode & 7) >> 0;
3940: {{ ULONG cnt = srcreg;
3941: { LONG data = regs.d[dstreg];
3942: { ULONG val = data;
3943: cnt &= 63;
3944: { int carry = 0;
3945: ULONG cmask = 0x80000000;
3946: for(;cnt;--cnt){
3947: carry=val&1; val = (ULONG)val >> 1;
3948: if(carry) val |= cmask;
3949: }
3950: regs.v = regs.c = 0;
3951: regs.z = ((LONG)(val)) == 0;
3952: regs.n = ((LONG)(val)) < 0;
3953: regs.c = carry!=0;
3954: regs.d[dstreg] = (val);
3955: }}}}}}
3956: void op_eb00(UWORD opcode)
3957: {
3958: ULONG srcreg = 5;
3959: ULONG dstreg = (opcode & 7) >> 0;
3960: {{ ULONG cnt = srcreg;
3961: { BYTE data = regs.d[dstreg];
3962: { UBYTE val = data;
3963: cnt &= 63;
3964: regs.v = 0;
3965: { ULONG cmask = 0x80;
3966: ULONG sign = cmask & val;
3967: for(;cnt;--cnt){
3968: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
3969: if ((val&cmask)!=sign)regs.v=1;
3970: }
3971: regs.n = (val&cmask) != 0;
3972: regs.z = val == 0;
3973: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3974: }}}}}}
3975: void op_eb08(UWORD opcode)
3976: {
3977: ULONG srcreg = 5;
3978: ULONG dstreg = (opcode & 7) >> 0;
3979: {{ ULONG cnt = srcreg;
3980: { BYTE data = regs.d[dstreg];
3981: { UBYTE val = data;
3982: cnt &= 63;
3983: { int carry = 0;
3984: ULONG cmask = 0x80;
3985: for(;cnt;--cnt){
3986: carry=val&cmask; val <<= 1;
3987: }
3988: regs.v = regs.c = 0;
3989: regs.z = ((BYTE)(val)) == 0;
3990: regs.n = ((BYTE)(val)) < 0;
3991: regs.c = regs.x = carry!=0;
3992: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
3993: }}}}}}
3994: void op_eb10(UWORD opcode)
3995: {
3996: ULONG srcreg = 5;
3997: ULONG dstreg = (opcode & 7) >> 0;
3998: {{ ULONG cnt = srcreg;
3999: { BYTE data = regs.d[dstreg];
4000: { UBYTE val = data;
4001: cnt &= 63;
4002: { int carry = 0;
4003: ULONG cmask = 0x80;
4004: for(;cnt;--cnt){
4005: carry=val&cmask; val <<= 1;
4006: if(regs.x) val |= 1;
4007: regs.x = carry != 0;
4008: }
4009: regs.v = regs.c = 0;
4010: regs.z = ((BYTE)(val)) == 0;
4011: regs.n = ((BYTE)(val)) < 0;
4012: regs.x = regs.c = carry!=0;
4013: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4014: }}}}}}
4015: void op_eb18(UWORD opcode)
4016: {
4017: ULONG srcreg = 5;
4018: ULONG dstreg = (opcode & 7) >> 0;
4019: {{ ULONG cnt = srcreg;
4020: { BYTE data = regs.d[dstreg];
4021: { UBYTE val = data;
4022: cnt &= 63;
4023: { int carry = 0;
4024: ULONG cmask = 0x80;
4025: for(;cnt;--cnt){
4026: carry=val&cmask; val <<= 1;
4027: if(carry) val |= 1;
4028: }
4029: regs.v = regs.c = 0;
4030: regs.z = ((BYTE)(val)) == 0;
4031: regs.n = ((BYTE)(val)) < 0;
4032: regs.c = carry!=0;
4033: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4034: }}}}}}
4035: void op_eb40(UWORD opcode)
4036: {
4037: ULONG srcreg = 5;
4038: ULONG dstreg = (opcode & 7) >> 0;
4039: {{ ULONG cnt = srcreg;
4040: { WORD data = regs.d[dstreg];
4041: { UWORD val = data;
4042: cnt &= 63;
4043: regs.v = 0;
4044: { ULONG cmask = 0x8000;
4045: ULONG sign = cmask & val;
4046: for(;cnt;--cnt){
4047: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
4048: if ((val&cmask)!=sign)regs.v=1;
4049: }
4050: regs.n = (val&cmask) != 0;
4051: regs.z = val == 0;
4052: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4053: }}}}}}
4054: void op_eb48(UWORD opcode)
4055: {
4056: ULONG srcreg = 5;
4057: ULONG dstreg = (opcode & 7) >> 0;
4058: {{ ULONG cnt = srcreg;
4059: { WORD data = regs.d[dstreg];
4060: { UWORD val = data;
4061: cnt &= 63;
4062: { int carry = 0;
4063: ULONG cmask = 0x8000;
4064: for(;cnt;--cnt){
4065: carry=val&cmask; val <<= 1;
4066: }
4067: regs.v = regs.c = 0;
4068: regs.z = ((WORD)(val)) == 0;
4069: regs.n = ((WORD)(val)) < 0;
4070: regs.c = regs.x = carry!=0;
4071: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4072: }}}}}}
4073: void op_eb50(UWORD opcode)
4074: {
4075: ULONG srcreg = 5;
4076: ULONG dstreg = (opcode & 7) >> 0;
4077: {{ ULONG cnt = srcreg;
4078: { WORD data = regs.d[dstreg];
4079: { UWORD val = data;
4080: cnt &= 63;
4081: { int carry = 0;
4082: ULONG cmask = 0x8000;
4083: for(;cnt;--cnt){
4084: carry=val&cmask; val <<= 1;
4085: if(regs.x) val |= 1;
4086: regs.x = carry != 0;
4087: }
4088: regs.v = regs.c = 0;
4089: regs.z = ((WORD)(val)) == 0;
4090: regs.n = ((WORD)(val)) < 0;
4091: regs.x = regs.c = carry!=0;
4092: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4093: }}}}}}
4094: void op_eb58(UWORD opcode)
4095: {
4096: ULONG srcreg = 5;
4097: ULONG dstreg = (opcode & 7) >> 0;
4098: {{ ULONG cnt = srcreg;
4099: { WORD data = regs.d[dstreg];
4100: { UWORD val = data;
4101: cnt &= 63;
4102: { int carry = 0;
4103: ULONG cmask = 0x8000;
4104: for(;cnt;--cnt){
4105: carry=val&cmask; val <<= 1;
4106: if(carry) val |= 1;
4107: }
4108: regs.v = regs.c = 0;
4109: regs.z = ((WORD)(val)) == 0;
4110: regs.n = ((WORD)(val)) < 0;
4111: regs.c = carry!=0;
4112: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4113: }}}}}}
4114: void op_eb80(UWORD opcode)
4115: {
4116: ULONG srcreg = 5;
4117: ULONG dstreg = (opcode & 7) >> 0;
4118: {{ ULONG cnt = srcreg;
4119: { LONG data = regs.d[dstreg];
4120: { ULONG val = data;
4121: cnt &= 63;
4122: regs.v = 0;
4123: { ULONG cmask = 0x80000000;
4124: ULONG sign = cmask & val;
4125: for(;cnt;--cnt){
4126: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
4127: if ((val&cmask)!=sign)regs.v=1;
4128: }
4129: regs.n = (val&cmask) != 0;
4130: regs.z = val == 0;
4131: regs.d[dstreg] = (val);
4132: }}}}}}
4133: void op_eb88(UWORD opcode)
4134: {
4135: ULONG srcreg = 5;
4136: ULONG dstreg = (opcode & 7) >> 0;
4137: {{ ULONG cnt = srcreg;
4138: { LONG data = regs.d[dstreg];
4139: { ULONG val = data;
4140: cnt &= 63;
4141: { int carry = 0;
4142: ULONG cmask = 0x80000000;
4143: for(;cnt;--cnt){
4144: carry=val&cmask; val <<= 1;
4145: }
4146: regs.v = regs.c = 0;
4147: regs.z = ((LONG)(val)) == 0;
4148: regs.n = ((LONG)(val)) < 0;
4149: regs.c = regs.x = carry!=0;
4150: regs.d[dstreg] = (val);
4151: }}}}}}
4152: void op_eb90(UWORD opcode)
4153: {
4154: ULONG srcreg = 5;
4155: ULONG dstreg = (opcode & 7) >> 0;
4156: {{ ULONG cnt = srcreg;
4157: { LONG data = regs.d[dstreg];
4158: { ULONG val = data;
4159: cnt &= 63;
4160: { int carry = 0;
4161: ULONG cmask = 0x80000000;
4162: for(;cnt;--cnt){
4163: carry=val&cmask; val <<= 1;
4164: if(regs.x) val |= 1;
4165: regs.x = carry != 0;
4166: }
4167: regs.v = regs.c = 0;
4168: regs.z = ((LONG)(val)) == 0;
4169: regs.n = ((LONG)(val)) < 0;
4170: regs.x = regs.c = carry!=0;
4171: regs.d[dstreg] = (val);
4172: }}}}}}
4173: void op_eb98(UWORD opcode)
4174: {
4175: ULONG srcreg = 5;
4176: ULONG dstreg = (opcode & 7) >> 0;
4177: {{ ULONG cnt = srcreg;
4178: { LONG data = regs.d[dstreg];
4179: { ULONG val = data;
4180: cnt &= 63;
4181: { int carry = 0;
4182: ULONG cmask = 0x80000000;
4183: for(;cnt;--cnt){
4184: carry=val&cmask; val <<= 1;
4185: if(carry) val |= 1;
4186: }
4187: regs.v = regs.c = 0;
4188: regs.z = ((LONG)(val)) == 0;
4189: regs.n = ((LONG)(val)) < 0;
4190: regs.c = carry!=0;
4191: regs.d[dstreg] = (val);
4192: }}}}}}
4193: void op_ec00(UWORD opcode)
4194: {
4195: ULONG srcreg = 6;
4196: ULONG dstreg = (opcode & 7) >> 0;
4197: {{ ULONG cnt = srcreg;
4198: { BYTE data = regs.d[dstreg];
4199: { UBYTE val = data;
4200: cnt &= 63;
4201: regs.v = 0;
4202: { ULONG cmask = 0x80;
4203: ULONG sign = cmask & val;
4204: for(;cnt;--cnt){
4205: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
4206: }
4207: regs.n = sign != 0;
4208: regs.z = val == 0;
4209: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4210: }}}}}}
4211: void op_ec08(UWORD opcode)
4212: {
4213: ULONG srcreg = 6;
4214: ULONG dstreg = (opcode & 7) >> 0;
4215: {{ ULONG cnt = srcreg;
4216: { BYTE data = regs.d[dstreg];
4217: { UBYTE val = data;
4218: cnt &= 63;
4219: { int carry = 0;
4220: for(;cnt;--cnt){
4221: carry=val&1; val >>= 1;
4222: }
4223: regs.v = regs.c = 0;
4224: regs.z = ((BYTE)(val)) == 0;
4225: regs.n = ((BYTE)(val)) < 0;
4226: regs.c = regs.x = carry!=0;
4227: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4228: }}}}}}
4229: void op_ec10(UWORD opcode)
4230: {
4231: ULONG srcreg = 6;
4232: ULONG dstreg = (opcode & 7) >> 0;
4233: {{ ULONG cnt = srcreg;
4234: { BYTE data = regs.d[dstreg];
4235: { UBYTE val = data;
4236: cnt &= 63;
4237: { int carry = 0;
4238: ULONG cmask = 0x80;
4239: for(;cnt;--cnt){
4240: carry=val&1; val >>= 1;
4241: if(regs.x) val |= cmask;
4242: regs.x = carry != 0;
4243: }
4244: regs.v = regs.c = 0;
4245: regs.z = ((BYTE)(val)) == 0;
4246: regs.n = ((BYTE)(val)) < 0;
4247: regs.x = regs.c = carry!=0;
4248: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4249: }}}}}}
4250: void op_ec18(UWORD opcode)
4251: {
4252: ULONG srcreg = 6;
4253: ULONG dstreg = (opcode & 7) >> 0;
4254: {{ ULONG cnt = srcreg;
4255: { BYTE data = regs.d[dstreg];
4256: { UBYTE val = data;
4257: cnt &= 63;
4258: { int carry = 0;
4259: ULONG cmask = 0x80;
4260: for(;cnt;--cnt){
4261: carry=val&1; val = (ULONG)val >> 1;
4262: if(carry) val |= cmask;
4263: }
4264: regs.v = regs.c = 0;
4265: regs.z = ((BYTE)(val)) == 0;
4266: regs.n = ((BYTE)(val)) < 0;
4267: regs.c = carry!=0;
4268: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4269: }}}}}}
4270: void op_ec40(UWORD opcode)
4271: {
4272: ULONG srcreg = 6;
4273: ULONG dstreg = (opcode & 7) >> 0;
4274: {{ ULONG cnt = srcreg;
4275: { WORD data = regs.d[dstreg];
4276: { UWORD val = data;
4277: cnt &= 63;
4278: regs.v = 0;
4279: { ULONG cmask = 0x8000;
4280: ULONG sign = cmask & val;
4281: for(;cnt;--cnt){
4282: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
4283: }
4284: regs.n = sign != 0;
4285: regs.z = val == 0;
4286: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4287: }}}}}}
4288: void op_ec48(UWORD opcode)
4289: {
4290: ULONG srcreg = 6;
4291: ULONG dstreg = (opcode & 7) >> 0;
4292: {{ ULONG cnt = srcreg;
4293: { WORD data = regs.d[dstreg];
4294: { UWORD val = data;
4295: cnt &= 63;
4296: { int carry = 0;
4297: for(;cnt;--cnt){
4298: carry=val&1; val >>= 1;
4299: }
4300: regs.v = regs.c = 0;
4301: regs.z = ((WORD)(val)) == 0;
4302: regs.n = ((WORD)(val)) < 0;
4303: regs.c = regs.x = carry!=0;
4304: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4305: }}}}}}
4306: void op_ec50(UWORD opcode)
4307: {
4308: ULONG srcreg = 6;
4309: ULONG dstreg = (opcode & 7) >> 0;
4310: {{ ULONG cnt = srcreg;
4311: { WORD data = regs.d[dstreg];
4312: { UWORD val = data;
4313: cnt &= 63;
4314: { int carry = 0;
4315: ULONG cmask = 0x8000;
4316: for(;cnt;--cnt){
4317: carry=val&1; val >>= 1;
4318: if(regs.x) val |= cmask;
4319: regs.x = carry != 0;
4320: }
4321: regs.v = regs.c = 0;
4322: regs.z = ((WORD)(val)) == 0;
4323: regs.n = ((WORD)(val)) < 0;
4324: regs.x = regs.c = carry!=0;
4325: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4326: }}}}}}
4327: void op_ec58(UWORD opcode)
4328: {
4329: ULONG srcreg = 6;
4330: ULONG dstreg = (opcode & 7) >> 0;
4331: {{ ULONG cnt = srcreg;
4332: { WORD data = regs.d[dstreg];
4333: { UWORD val = data;
4334: cnt &= 63;
4335: { int carry = 0;
4336: ULONG cmask = 0x8000;
4337: for(;cnt;--cnt){
4338: carry=val&1; val = (ULONG)val >> 1;
4339: if(carry) val |= cmask;
4340: }
4341: regs.v = regs.c = 0;
4342: regs.z = ((WORD)(val)) == 0;
4343: regs.n = ((WORD)(val)) < 0;
4344: regs.c = carry!=0;
4345: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4346: }}}}}}
4347: void op_ec80(UWORD opcode)
4348: {
4349: ULONG srcreg = 6;
4350: ULONG dstreg = (opcode & 7) >> 0;
4351: {{ ULONG cnt = srcreg;
4352: { LONG data = regs.d[dstreg];
4353: { ULONG val = data;
4354: cnt &= 63;
4355: regs.v = 0;
4356: { ULONG cmask = 0x80000000;
4357: ULONG sign = cmask & val;
4358: for(;cnt;--cnt){
4359: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
4360: }
4361: regs.n = sign != 0;
4362: regs.z = val == 0;
4363: regs.d[dstreg] = (val);
4364: }}}}}}
4365: void op_ec88(UWORD opcode)
4366: {
4367: ULONG srcreg = 6;
4368: ULONG dstreg = (opcode & 7) >> 0;
4369: {{ ULONG cnt = srcreg;
4370: { LONG data = regs.d[dstreg];
4371: { ULONG val = data;
4372: cnt &= 63;
4373: { int carry = 0;
4374: for(;cnt;--cnt){
4375: carry=val&1; val >>= 1;
4376: }
4377: regs.v = regs.c = 0;
4378: regs.z = ((LONG)(val)) == 0;
4379: regs.n = ((LONG)(val)) < 0;
4380: regs.c = regs.x = carry!=0;
4381: regs.d[dstreg] = (val);
4382: }}}}}}
4383: void op_ec90(UWORD opcode)
4384: {
4385: ULONG srcreg = 6;
4386: ULONG dstreg = (opcode & 7) >> 0;
4387: {{ ULONG cnt = srcreg;
4388: { LONG data = regs.d[dstreg];
4389: { ULONG val = data;
4390: cnt &= 63;
4391: { int carry = 0;
4392: ULONG cmask = 0x80000000;
4393: for(;cnt;--cnt){
4394: carry=val&1; val >>= 1;
4395: if(regs.x) val |= cmask;
4396: regs.x = carry != 0;
4397: }
4398: regs.v = regs.c = 0;
4399: regs.z = ((LONG)(val)) == 0;
4400: regs.n = ((LONG)(val)) < 0;
4401: regs.x = regs.c = carry!=0;
4402: regs.d[dstreg] = (val);
4403: }}}}}}
4404: void op_ec98(UWORD opcode)
4405: {
4406: ULONG srcreg = 6;
4407: ULONG dstreg = (opcode & 7) >> 0;
4408: {{ ULONG cnt = srcreg;
4409: { LONG data = regs.d[dstreg];
4410: { ULONG val = data;
4411: cnt &= 63;
4412: { int carry = 0;
4413: ULONG cmask = 0x80000000;
4414: for(;cnt;--cnt){
4415: carry=val&1; val = (ULONG)val >> 1;
4416: if(carry) val |= cmask;
4417: }
4418: regs.v = regs.c = 0;
4419: regs.z = ((LONG)(val)) == 0;
4420: regs.n = ((LONG)(val)) < 0;
4421: regs.c = carry!=0;
4422: regs.d[dstreg] = (val);
4423: }}}}}}
4424: void op_ed00(UWORD opcode)
4425: {
4426: ULONG srcreg = 6;
4427: ULONG dstreg = (opcode & 7) >> 0;
4428: {{ ULONG cnt = srcreg;
4429: { BYTE data = regs.d[dstreg];
4430: { UBYTE val = data;
4431: cnt &= 63;
4432: regs.v = 0;
4433: { ULONG cmask = 0x80;
4434: ULONG sign = cmask & val;
4435: for(;cnt;--cnt){
4436: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
4437: if ((val&cmask)!=sign)regs.v=1;
4438: }
4439: regs.n = (val&cmask) != 0;
4440: regs.z = val == 0;
4441: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4442: }}}}}}
4443: void op_ed08(UWORD opcode)
4444: {
4445: ULONG srcreg = 6;
4446: ULONG dstreg = (opcode & 7) >> 0;
4447: {{ ULONG cnt = srcreg;
4448: { BYTE data = regs.d[dstreg];
4449: { UBYTE val = data;
4450: cnt &= 63;
4451: { int carry = 0;
4452: ULONG cmask = 0x80;
4453: for(;cnt;--cnt){
4454: carry=val&cmask; val <<= 1;
4455: }
4456: regs.v = regs.c = 0;
4457: regs.z = ((BYTE)(val)) == 0;
4458: regs.n = ((BYTE)(val)) < 0;
4459: regs.c = regs.x = carry!=0;
4460: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4461: }}}}}}
4462: void op_ed10(UWORD opcode)
4463: {
4464: ULONG srcreg = 6;
4465: ULONG dstreg = (opcode & 7) >> 0;
4466: {{ ULONG cnt = srcreg;
4467: { BYTE data = regs.d[dstreg];
4468: { UBYTE val = data;
4469: cnt &= 63;
4470: { int carry = 0;
4471: ULONG cmask = 0x80;
4472: for(;cnt;--cnt){
4473: carry=val&cmask; val <<= 1;
4474: if(regs.x) val |= 1;
4475: regs.x = carry != 0;
4476: }
4477: regs.v = regs.c = 0;
4478: regs.z = ((BYTE)(val)) == 0;
4479: regs.n = ((BYTE)(val)) < 0;
4480: regs.x = regs.c = carry!=0;
4481: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4482: }}}}}}
4483: void op_ed18(UWORD opcode)
4484: {
4485: ULONG srcreg = 6;
4486: ULONG dstreg = (opcode & 7) >> 0;
4487: {{ ULONG cnt = srcreg;
4488: { BYTE data = regs.d[dstreg];
4489: { UBYTE val = data;
4490: cnt &= 63;
4491: { int carry = 0;
4492: ULONG cmask = 0x80;
4493: for(;cnt;--cnt){
4494: carry=val&cmask; val <<= 1;
4495: if(carry) val |= 1;
4496: }
4497: regs.v = regs.c = 0;
4498: regs.z = ((BYTE)(val)) == 0;
4499: regs.n = ((BYTE)(val)) < 0;
4500: regs.c = carry!=0;
4501: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4502: }}}}}}
4503: void op_ed40(UWORD opcode)
4504: {
4505: ULONG srcreg = 6;
4506: ULONG dstreg = (opcode & 7) >> 0;
4507: {{ ULONG cnt = srcreg;
4508: { WORD data = regs.d[dstreg];
4509: { UWORD val = data;
4510: cnt &= 63;
4511: regs.v = 0;
4512: { ULONG cmask = 0x8000;
4513: ULONG sign = cmask & val;
4514: for(;cnt;--cnt){
4515: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
4516: if ((val&cmask)!=sign)regs.v=1;
4517: }
4518: regs.n = (val&cmask) != 0;
4519: regs.z = val == 0;
4520: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4521: }}}}}}
4522: void op_ed48(UWORD opcode)
4523: {
4524: ULONG srcreg = 6;
4525: ULONG dstreg = (opcode & 7) >> 0;
4526: {{ ULONG cnt = srcreg;
4527: { WORD data = regs.d[dstreg];
4528: { UWORD val = data;
4529: cnt &= 63;
4530: { int carry = 0;
4531: ULONG cmask = 0x8000;
4532: for(;cnt;--cnt){
4533: carry=val&cmask; val <<= 1;
4534: }
4535: regs.v = regs.c = 0;
4536: regs.z = ((WORD)(val)) == 0;
4537: regs.n = ((WORD)(val)) < 0;
4538: regs.c = regs.x = carry!=0;
4539: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4540: }}}}}}
4541: void op_ed50(UWORD opcode)
4542: {
4543: ULONG srcreg = 6;
4544: ULONG dstreg = (opcode & 7) >> 0;
4545: {{ ULONG cnt = srcreg;
4546: { WORD data = regs.d[dstreg];
4547: { UWORD val = data;
4548: cnt &= 63;
4549: { int carry = 0;
4550: ULONG cmask = 0x8000;
4551: for(;cnt;--cnt){
4552: carry=val&cmask; val <<= 1;
4553: if(regs.x) val |= 1;
4554: regs.x = carry != 0;
4555: }
4556: regs.v = regs.c = 0;
4557: regs.z = ((WORD)(val)) == 0;
4558: regs.n = ((WORD)(val)) < 0;
4559: regs.x = regs.c = carry!=0;
4560: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4561: }}}}}}
4562: void op_ed58(UWORD opcode)
4563: {
4564: ULONG srcreg = 6;
4565: ULONG dstreg = (opcode & 7) >> 0;
4566: {{ ULONG cnt = srcreg;
4567: { WORD data = regs.d[dstreg];
4568: { UWORD val = data;
4569: cnt &= 63;
4570: { int carry = 0;
4571: ULONG cmask = 0x8000;
4572: for(;cnt;--cnt){
4573: carry=val&cmask; val <<= 1;
4574: if(carry) val |= 1;
4575: }
4576: regs.v = regs.c = 0;
4577: regs.z = ((WORD)(val)) == 0;
4578: regs.n = ((WORD)(val)) < 0;
4579: regs.c = carry!=0;
4580: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4581: }}}}}}
4582: void op_ed80(UWORD opcode)
4583: {
4584: ULONG srcreg = 6;
4585: ULONG dstreg = (opcode & 7) >> 0;
4586: {{ ULONG cnt = srcreg;
4587: { LONG data = regs.d[dstreg];
4588: { ULONG val = data;
4589: cnt &= 63;
4590: regs.v = 0;
4591: { ULONG cmask = 0x80000000;
4592: ULONG sign = cmask & val;
4593: for(;cnt;--cnt){
4594: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
4595: if ((val&cmask)!=sign)regs.v=1;
4596: }
4597: regs.n = (val&cmask) != 0;
4598: regs.z = val == 0;
4599: regs.d[dstreg] = (val);
4600: }}}}}}
4601: void op_ed88(UWORD opcode)
4602: {
4603: ULONG srcreg = 6;
4604: ULONG dstreg = (opcode & 7) >> 0;
4605: {{ ULONG cnt = srcreg;
4606: { LONG data = regs.d[dstreg];
4607: { ULONG val = data;
4608: cnt &= 63;
4609: { int carry = 0;
4610: ULONG cmask = 0x80000000;
4611: for(;cnt;--cnt){
4612: carry=val&cmask; val <<= 1;
4613: }
4614: regs.v = regs.c = 0;
4615: regs.z = ((LONG)(val)) == 0;
4616: regs.n = ((LONG)(val)) < 0;
4617: regs.c = regs.x = carry!=0;
4618: regs.d[dstreg] = (val);
4619: }}}}}}
4620: void op_ed90(UWORD opcode)
4621: {
4622: ULONG srcreg = 6;
4623: ULONG dstreg = (opcode & 7) >> 0;
4624: {{ ULONG cnt = srcreg;
4625: { LONG data = regs.d[dstreg];
4626: { ULONG val = data;
4627: cnt &= 63;
4628: { int carry = 0;
4629: ULONG cmask = 0x80000000;
4630: for(;cnt;--cnt){
4631: carry=val&cmask; val <<= 1;
4632: if(regs.x) val |= 1;
4633: regs.x = carry != 0;
4634: }
4635: regs.v = regs.c = 0;
4636: regs.z = ((LONG)(val)) == 0;
4637: regs.n = ((LONG)(val)) < 0;
4638: regs.x = regs.c = carry!=0;
4639: regs.d[dstreg] = (val);
4640: }}}}}}
4641: void op_ed98(UWORD opcode)
4642: {
4643: ULONG srcreg = 6;
4644: ULONG dstreg = (opcode & 7) >> 0;
4645: {{ ULONG cnt = srcreg;
4646: { LONG data = regs.d[dstreg];
4647: { ULONG val = data;
4648: cnt &= 63;
4649: { int carry = 0;
4650: ULONG cmask = 0x80000000;
4651: for(;cnt;--cnt){
4652: carry=val&cmask; val <<= 1;
4653: if(carry) val |= 1;
4654: }
4655: regs.v = regs.c = 0;
4656: regs.z = ((LONG)(val)) == 0;
4657: regs.n = ((LONG)(val)) < 0;
4658: regs.c = carry!=0;
4659: regs.d[dstreg] = (val);
4660: }}}}}}
4661: void op_ee00(UWORD opcode)
4662: {
4663: ULONG srcreg = 7;
4664: ULONG dstreg = (opcode & 7) >> 0;
4665: {{ ULONG cnt = srcreg;
4666: { BYTE data = regs.d[dstreg];
4667: { UBYTE val = data;
4668: cnt &= 63;
4669: regs.v = 0;
4670: { ULONG cmask = 0x80;
4671: ULONG sign = cmask & val;
4672: for(;cnt;--cnt){
4673: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
4674: }
4675: regs.n = sign != 0;
4676: regs.z = val == 0;
4677: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4678: }}}}}}
4679: void op_ee08(UWORD opcode)
4680: {
4681: ULONG srcreg = 7;
4682: ULONG dstreg = (opcode & 7) >> 0;
4683: {{ ULONG cnt = srcreg;
4684: { BYTE data = regs.d[dstreg];
4685: { UBYTE val = data;
4686: cnt &= 63;
4687: { int carry = 0;
4688: for(;cnt;--cnt){
4689: carry=val&1; val >>= 1;
4690: }
4691: regs.v = regs.c = 0;
4692: regs.z = ((BYTE)(val)) == 0;
4693: regs.n = ((BYTE)(val)) < 0;
4694: regs.c = regs.x = carry!=0;
4695: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4696: }}}}}}
4697: void op_ee10(UWORD opcode)
4698: {
4699: ULONG srcreg = 7;
4700: ULONG dstreg = (opcode & 7) >> 0;
4701: {{ ULONG cnt = srcreg;
4702: { BYTE data = regs.d[dstreg];
4703: { UBYTE val = data;
4704: cnt &= 63;
4705: { int carry = 0;
4706: ULONG cmask = 0x80;
4707: for(;cnt;--cnt){
4708: carry=val&1; val >>= 1;
4709: if(regs.x) val |= cmask;
4710: regs.x = carry != 0;
4711: }
4712: regs.v = regs.c = 0;
4713: regs.z = ((BYTE)(val)) == 0;
4714: regs.n = ((BYTE)(val)) < 0;
4715: regs.x = regs.c = carry!=0;
4716: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4717: }}}}}}
4718: void op_ee18(UWORD opcode)
4719: {
4720: ULONG srcreg = 7;
4721: ULONG dstreg = (opcode & 7) >> 0;
4722: {{ ULONG cnt = srcreg;
4723: { BYTE data = regs.d[dstreg];
4724: { UBYTE val = data;
4725: cnt &= 63;
4726: { int carry = 0;
4727: ULONG cmask = 0x80;
4728: for(;cnt;--cnt){
4729: carry=val&1; val = (ULONG)val >> 1;
4730: if(carry) val |= cmask;
4731: }
4732: regs.v = regs.c = 0;
4733: regs.z = ((BYTE)(val)) == 0;
4734: regs.n = ((BYTE)(val)) < 0;
4735: regs.c = carry!=0;
4736: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4737: }}}}}}
4738: void op_ee40(UWORD opcode)
4739: {
4740: ULONG srcreg = 7;
4741: ULONG dstreg = (opcode & 7) >> 0;
4742: {{ ULONG cnt = srcreg;
4743: { WORD data = regs.d[dstreg];
4744: { UWORD val = data;
4745: cnt &= 63;
4746: regs.v = 0;
4747: { ULONG cmask = 0x8000;
4748: ULONG sign = cmask & val;
4749: for(;cnt;--cnt){
4750: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
4751: }
4752: regs.n = sign != 0;
4753: regs.z = val == 0;
4754: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4755: }}}}}}
4756: void op_ee48(UWORD opcode)
4757: {
4758: ULONG srcreg = 7;
4759: ULONG dstreg = (opcode & 7) >> 0;
4760: {{ ULONG cnt = srcreg;
4761: { WORD data = regs.d[dstreg];
4762: { UWORD val = data;
4763: cnt &= 63;
4764: { int carry = 0;
4765: for(;cnt;--cnt){
4766: carry=val&1; val >>= 1;
4767: }
4768: regs.v = regs.c = 0;
4769: regs.z = ((WORD)(val)) == 0;
4770: regs.n = ((WORD)(val)) < 0;
4771: regs.c = regs.x = carry!=0;
4772: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4773: }}}}}}
4774: void op_ee50(UWORD opcode)
4775: {
4776: ULONG srcreg = 7;
4777: ULONG dstreg = (opcode & 7) >> 0;
4778: {{ ULONG cnt = srcreg;
4779: { WORD data = regs.d[dstreg];
4780: { UWORD val = data;
4781: cnt &= 63;
4782: { int carry = 0;
4783: ULONG cmask = 0x8000;
4784: for(;cnt;--cnt){
4785: carry=val&1; val >>= 1;
4786: if(regs.x) val |= cmask;
4787: regs.x = carry != 0;
4788: }
4789: regs.v = regs.c = 0;
4790: regs.z = ((WORD)(val)) == 0;
4791: regs.n = ((WORD)(val)) < 0;
4792: regs.x = regs.c = carry!=0;
4793: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4794: }}}}}}
4795: void op_ee58(UWORD opcode)
4796: {
4797: ULONG srcreg = 7;
4798: ULONG dstreg = (opcode & 7) >> 0;
4799: {{ ULONG cnt = srcreg;
4800: { WORD data = regs.d[dstreg];
4801: { UWORD val = data;
4802: cnt &= 63;
4803: { int carry = 0;
4804: ULONG cmask = 0x8000;
4805: for(;cnt;--cnt){
4806: carry=val&1; val = (ULONG)val >> 1;
4807: if(carry) val |= cmask;
4808: }
4809: regs.v = regs.c = 0;
4810: regs.z = ((WORD)(val)) == 0;
4811: regs.n = ((WORD)(val)) < 0;
4812: regs.c = carry!=0;
4813: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4814: }}}}}}
4815: void op_ee80(UWORD opcode)
4816: {
4817: ULONG srcreg = 7;
4818: ULONG dstreg = (opcode & 7) >> 0;
4819: {{ ULONG cnt = srcreg;
4820: { LONG data = regs.d[dstreg];
4821: { ULONG val = data;
4822: cnt &= 63;
4823: regs.v = 0;
4824: { ULONG cmask = 0x80000000;
4825: ULONG sign = cmask & val;
4826: for(;cnt;--cnt){
4827: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign;
4828: }
4829: regs.n = sign != 0;
4830: regs.z = val == 0;
4831: regs.d[dstreg] = (val);
4832: }}}}}}
4833: void op_ee88(UWORD opcode)
4834: {
4835: ULONG srcreg = 7;
4836: ULONG dstreg = (opcode & 7) >> 0;
4837: {{ ULONG cnt = srcreg;
4838: { LONG data = regs.d[dstreg];
4839: { ULONG val = data;
4840: cnt &= 63;
4841: { int carry = 0;
4842: for(;cnt;--cnt){
4843: carry=val&1; val >>= 1;
4844: }
4845: regs.v = regs.c = 0;
4846: regs.z = ((LONG)(val)) == 0;
4847: regs.n = ((LONG)(val)) < 0;
4848: regs.c = regs.x = carry!=0;
4849: regs.d[dstreg] = (val);
4850: }}}}}}
4851: void op_ee90(UWORD opcode)
4852: {
4853: ULONG srcreg = 7;
4854: ULONG dstreg = (opcode & 7) >> 0;
4855: {{ ULONG cnt = srcreg;
4856: { LONG data = regs.d[dstreg];
4857: { ULONG val = data;
4858: cnt &= 63;
4859: { int carry = 0;
4860: ULONG cmask = 0x80000000;
4861: for(;cnt;--cnt){
4862: carry=val&1; val >>= 1;
4863: if(regs.x) val |= cmask;
4864: regs.x = carry != 0;
4865: }
4866: regs.v = regs.c = 0;
4867: regs.z = ((LONG)(val)) == 0;
4868: regs.n = ((LONG)(val)) < 0;
4869: regs.x = regs.c = carry!=0;
4870: regs.d[dstreg] = (val);
4871: }}}}}}
4872: void op_ee98(UWORD opcode)
4873: {
4874: ULONG srcreg = 7;
4875: ULONG dstreg = (opcode & 7) >> 0;
4876: {{ ULONG cnt = srcreg;
4877: { LONG data = regs.d[dstreg];
4878: { ULONG val = data;
4879: cnt &= 63;
4880: { int carry = 0;
4881: ULONG cmask = 0x80000000;
4882: for(;cnt;--cnt){
4883: carry=val&1; val = (ULONG)val >> 1;
4884: if(carry) val |= cmask;
4885: }
4886: regs.v = regs.c = 0;
4887: regs.z = ((LONG)(val)) == 0;
4888: regs.n = ((LONG)(val)) < 0;
4889: regs.c = carry!=0;
4890: regs.d[dstreg] = (val);
4891: }}}}}}
4892: void op_ef00(UWORD opcode)
4893: {
4894: ULONG srcreg = 7;
4895: ULONG dstreg = (opcode & 7) >> 0;
4896: {{ ULONG cnt = srcreg;
4897: { BYTE data = regs.d[dstreg];
4898: { UBYTE val = data;
4899: cnt &= 63;
4900: regs.v = 0;
4901: { ULONG cmask = 0x80;
4902: ULONG sign = cmask & val;
4903: for(;cnt;--cnt){
4904: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
4905: if ((val&cmask)!=sign)regs.v=1;
4906: }
4907: regs.n = (val&cmask) != 0;
4908: regs.z = val == 0;
4909: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4910: }}}}}}
4911: void op_ef08(UWORD opcode)
4912: {
4913: ULONG srcreg = 7;
4914: ULONG dstreg = (opcode & 7) >> 0;
4915: {{ ULONG cnt = srcreg;
4916: { BYTE data = regs.d[dstreg];
4917: { UBYTE val = data;
4918: cnt &= 63;
4919: { int carry = 0;
4920: ULONG cmask = 0x80;
4921: for(;cnt;--cnt){
4922: carry=val&cmask; val <<= 1;
4923: }
4924: regs.v = regs.c = 0;
4925: regs.z = ((BYTE)(val)) == 0;
4926: regs.n = ((BYTE)(val)) < 0;
4927: regs.c = regs.x = carry!=0;
4928: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4929: }}}}}}
4930: void op_ef10(UWORD opcode)
4931: {
4932: ULONG srcreg = 7;
4933: ULONG dstreg = (opcode & 7) >> 0;
4934: {{ ULONG cnt = srcreg;
4935: { BYTE data = regs.d[dstreg];
4936: { UBYTE val = data;
4937: cnt &= 63;
4938: { int carry = 0;
4939: ULONG cmask = 0x80;
4940: for(;cnt;--cnt){
4941: carry=val&cmask; val <<= 1;
4942: if(regs.x) val |= 1;
4943: regs.x = carry != 0;
4944: }
4945: regs.v = regs.c = 0;
4946: regs.z = ((BYTE)(val)) == 0;
4947: regs.n = ((BYTE)(val)) < 0;
4948: regs.x = regs.c = carry!=0;
4949: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4950: }}}}}}
4951: void op_ef18(UWORD opcode)
4952: {
4953: ULONG srcreg = 7;
4954: ULONG dstreg = (opcode & 7) >> 0;
4955: {{ ULONG cnt = srcreg;
4956: { BYTE data = regs.d[dstreg];
4957: { UBYTE val = data;
4958: cnt &= 63;
4959: { int carry = 0;
4960: ULONG cmask = 0x80;
4961: for(;cnt;--cnt){
4962: carry=val&cmask; val <<= 1;
4963: if(carry) val |= 1;
4964: }
4965: regs.v = regs.c = 0;
4966: regs.z = ((BYTE)(val)) == 0;
4967: regs.n = ((BYTE)(val)) < 0;
4968: regs.c = carry!=0;
4969: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff;
4970: }}}}}}
4971: void op_ef40(UWORD opcode)
4972: {
4973: ULONG srcreg = 7;
4974: ULONG dstreg = (opcode & 7) >> 0;
4975: {{ ULONG cnt = srcreg;
4976: { WORD data = regs.d[dstreg];
4977: { UWORD val = data;
4978: cnt &= 63;
4979: regs.v = 0;
4980: { ULONG cmask = 0x8000;
4981: ULONG sign = cmask & val;
4982: for(;cnt;--cnt){
4983: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
4984: if ((val&cmask)!=sign)regs.v=1;
4985: }
4986: regs.n = (val&cmask) != 0;
4987: regs.z = val == 0;
4988: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
4989: }}}}}}
4990: void op_ef48(UWORD opcode)
4991: {
4992: ULONG srcreg = 7;
4993: ULONG dstreg = (opcode & 7) >> 0;
4994: {{ ULONG cnt = srcreg;
4995: { WORD data = regs.d[dstreg];
4996: { UWORD val = data;
4997: cnt &= 63;
4998: { int carry = 0;
4999: ULONG cmask = 0x8000;
5000: for(;cnt;--cnt){
5001: carry=val&cmask; val <<= 1;
5002: }
5003: regs.v = regs.c = 0;
5004: regs.z = ((WORD)(val)) == 0;
5005: regs.n = ((WORD)(val)) < 0;
5006: regs.c = regs.x = carry!=0;
5007: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
5008: }}}}}}
5009: void op_ef50(UWORD opcode)
5010: {
5011: ULONG srcreg = 7;
5012: ULONG dstreg = (opcode & 7) >> 0;
5013: {{ ULONG cnt = srcreg;
5014: { WORD data = regs.d[dstreg];
5015: { UWORD val = data;
5016: cnt &= 63;
5017: { int carry = 0;
5018: ULONG cmask = 0x8000;
5019: for(;cnt;--cnt){
5020: carry=val&cmask; val <<= 1;
5021: if(regs.x) val |= 1;
5022: regs.x = carry != 0;
5023: }
5024: regs.v = regs.c = 0;
5025: regs.z = ((WORD)(val)) == 0;
5026: regs.n = ((WORD)(val)) < 0;
5027: regs.x = regs.c = carry!=0;
5028: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
5029: }}}}}}
5030: void op_ef58(UWORD opcode)
5031: {
5032: ULONG srcreg = 7;
5033: ULONG dstreg = (opcode & 7) >> 0;
5034: {{ ULONG cnt = srcreg;
5035: { WORD data = regs.d[dstreg];
5036: { UWORD val = data;
5037: cnt &= 63;
5038: { int carry = 0;
5039: ULONG cmask = 0x8000;
5040: for(;cnt;--cnt){
5041: carry=val&cmask; val <<= 1;
5042: if(carry) val |= 1;
5043: }
5044: regs.v = regs.c = 0;
5045: regs.z = ((WORD)(val)) == 0;
5046: regs.n = ((WORD)(val)) < 0;
5047: regs.c = carry!=0;
5048: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff;
5049: }}}}}}
5050: void op_ef80(UWORD opcode)
5051: {
5052: ULONG srcreg = 7;
5053: ULONG dstreg = (opcode & 7) >> 0;
5054: {{ ULONG cnt = srcreg;
5055: { LONG data = regs.d[dstreg];
5056: { ULONG val = data;
5057: cnt &= 63;
5058: regs.v = 0;
5059: { ULONG cmask = 0x80000000;
5060: ULONG sign = cmask & val;
5061: for(;cnt;--cnt){
5062: regs.c=regs.x=(val&cmask)!=0; val <<= 1;
5063: if ((val&cmask)!=sign)regs.v=1;
5064: }
5065: regs.n = (val&cmask) != 0;
5066: regs.z = val == 0;
5067: regs.d[dstreg] = (val);
5068: }}}}}}
5069: void op_ef88(UWORD opcode)
5070: {
5071: ULONG srcreg = 7;
5072: ULONG dstreg = (opcode & 7) >> 0;
5073: {{ ULONG cnt = srcreg;
5074: { LONG data = regs.d[dstreg];
5075: { ULONG val = data;
5076: cnt &= 63;
5077: { int carry = 0;
5078: ULONG cmask = 0x80000000;
5079: for(;cnt;--cnt){
5080: carry=val&cmask; val <<= 1;
5081: }
5082: regs.v = regs.c = 0;
5083: regs.z = ((LONG)(val)) == 0;
5084: regs.n = ((LONG)(val)) < 0;
5085: regs.c = regs.x = carry!=0;
5086: regs.d[dstreg] = (val);
5087: }}}}}}
5088: void op_ef90(UWORD opcode)
5089: {
5090: ULONG srcreg = 7;
5091: ULONG dstreg = (opcode & 7) >> 0;
5092: {{ ULONG cnt = srcreg;
5093: { LONG data = regs.d[dstreg];
5094: { ULONG val = data;
5095: cnt &= 63;
5096: { int carry = 0;
5097: ULONG cmask = 0x80000000;
5098: for(;cnt;--cnt){
5099: carry=val&cmask; val <<= 1;
5100: if(regs.x) val |= 1;
5101: regs.x = carry != 0;
5102: }
5103: regs.v = regs.c = 0;
5104: regs.z = ((LONG)(val)) == 0;
5105: regs.n = ((LONG)(val)) < 0;
5106: regs.x = regs.c = carry!=0;
5107: regs.d[dstreg] = (val);
5108: }}}}}}
5109: void op_ef98(UWORD opcode)
5110: {
5111: ULONG srcreg = 7;
5112: ULONG dstreg = (opcode & 7) >> 0;
5113: {{ ULONG cnt = srcreg;
5114: { LONG data = regs.d[dstreg];
5115: { ULONG val = data;
5116: cnt &= 63;
5117: { int carry = 0;
5118: ULONG cmask = 0x80000000;
5119: for(;cnt;--cnt){
5120: carry=val&cmask; val <<= 1;
5121: if(carry) val |= 1;
5122: }
5123: regs.v = regs.c = 0;
5124: regs.z = ((LONG)(val)) == 0;
5125: regs.n = ((LONG)(val)) < 0;
5126: regs.c = carry!=0;
5127: regs.d[dstreg] = (val);
5128: }}}}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.