|
|
1.1 root 1: /*****************************************************************************/
2: /* Generator - Sega Genesis emulation - (c) James Ponder 1997-1998 */
3: /*****************************************************************************/
4: /* */
5: /* cpu68k-e.c */
6: /* */
7: /*****************************************************************************/
8:
9: #include "generator.h"
10: #include "cpu68k.h"
11: #include "mem68k.h"
12: #include "reg68k.h"
13:
14: #include "cpu68k-inline.h"
15:
16: #include <stdio.h>
17:
18: void cpu_op_1484a(t_ipc *ipc) /* ASR */ {
19: /* mask f1f8, bits e000, mnemonic 66, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
20: unsigned int srcdata = ipc->src;
21: int dstreg = (ipc->opcode >> 0) & 7;
22: uint8 dstdata = DATAREG(dstreg);
23: uint8 bits = 8;
24: uint8 count = srcdata & 63;
25: uint8 outdata = ((sint8)dstdata) >> (count > 7 ? 7 : count);
26:
27: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
28: PC+= 2;
29: }
30:
31: void cpu_op_1484b(t_ipc *ipc) /* ASR */ {
32: /* mask f1f8, bits e000, mnemonic 66, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
33: unsigned int srcdata = ipc->src;
34: int dstreg = (ipc->opcode >> 0) & 7;
35: uint8 dstdata = DATAREG(dstreg);
36: uint8 bits = 8;
37: uint8 count = srcdata & 63;
38: uint8 outdata = ((sint8)dstdata) >> (count > 7 ? 7 : count);
39:
40: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
41:
42: if (!srcdata)
43: CFLAG = 0;
44: else if (srcdata >= bits) {
45: CFLAG = dstdata>>(bits-1);
46: XFLAG = dstdata>>(bits-1);
47: } else {
48: CFLAG = dstdata>>(count-1) & 1;
49: XFLAG = dstdata>>(count-1) & 1;
50: }
51: VFLAG = 0;
52: NFLAG = ((sint8)outdata) < 0;
53: ZFLAG = !outdata;
54: PC+= 2;
55: }
56:
57: void cpu_op_1485a(t_ipc *ipc) /* ASR */ {
58: /* mask f1f8, bits e040, mnemonic 66, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
59: unsigned int srcdata = ipc->src;
60: int dstreg = (ipc->opcode >> 0) & 7;
61: uint16 dstdata = DATAREG(dstreg);
62: uint8 bits = 16;
63: uint8 count = srcdata & 63;
64: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
65:
66: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
67: PC+= 2;
68: }
69:
70: void cpu_op_1485b(t_ipc *ipc) /* ASR */ {
71: /* mask f1f8, bits e040, mnemonic 66, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
72: unsigned int srcdata = ipc->src;
73: int dstreg = (ipc->opcode >> 0) & 7;
74: uint16 dstdata = DATAREG(dstreg);
75: uint8 bits = 16;
76: uint8 count = srcdata & 63;
77: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
78:
79: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
80:
81: if (!srcdata)
82: CFLAG = 0;
83: else if (srcdata >= bits) {
84: CFLAG = dstdata>>(bits-1);
85: XFLAG = dstdata>>(bits-1);
86: } else {
87: CFLAG = dstdata>>(count-1) & 1;
88: XFLAG = dstdata>>(count-1) & 1;
89: }
90: VFLAG = 0;
91: NFLAG = ((sint16)outdata) < 0;
92: ZFLAG = !outdata;
93: PC+= 2;
94: }
95:
96: void cpu_op_1486a(t_ipc *ipc) /* ASR */ {
97: /* mask f1f8, bits e080, mnemonic 66, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
98: unsigned int srcdata = ipc->src;
99: int dstreg = (ipc->opcode >> 0) & 7;
100: uint32 dstdata = DATAREG(dstreg);
101: uint8 bits = 32;
102: uint8 count = srcdata & 63;
103: uint32 outdata = ((sint32)dstdata) >> (count > 31 ? 31 : count);
104:
105: DATAREG(dstreg) = outdata;
106: PC+= 2;
107: }
108:
109: void cpu_op_1486b(t_ipc *ipc) /* ASR */ {
110: /* mask f1f8, bits e080, mnemonic 66, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
111: unsigned int srcdata = ipc->src;
112: int dstreg = (ipc->opcode >> 0) & 7;
113: uint32 dstdata = DATAREG(dstreg);
114: uint8 bits = 32;
115: uint8 count = srcdata & 63;
116: uint32 outdata = ((sint32)dstdata) >> (count > 31 ? 31 : count);
117:
118: DATAREG(dstreg) = outdata;
119:
120: if (!srcdata)
121: CFLAG = 0;
122: else if (srcdata >= bits) {
123: CFLAG = dstdata>>(bits-1);
124: XFLAG = dstdata>>(bits-1);
125: } else {
126: CFLAG = dstdata>>(count-1) & 1;
127: XFLAG = dstdata>>(count-1) & 1;
128: }
129: VFLAG = 0;
130: NFLAG = ((sint32)outdata) < 0;
131: ZFLAG = !outdata;
132: PC+= 2;
133: }
134:
135: void cpu_op_1487a(t_ipc *ipc) /* LSR */ {
136: /* mask f1f8, bits e008, mnemonic 67, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
137: unsigned int srcdata = ipc->src;
138: int dstreg = (ipc->opcode >> 0) & 7;
139: uint8 dstdata = DATAREG(dstreg);
140: uint8 bits = 8;
141: uint8 count = srcdata & 63;
142: uint8 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
143:
144: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
145: PC+= 2;
146: }
147:
148: void cpu_op_1487b(t_ipc *ipc) /* LSR */ {
149: /* mask f1f8, bits e008, mnemonic 67, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
150: unsigned int srcdata = ipc->src;
151: int dstreg = (ipc->opcode >> 0) & 7;
152: uint8 dstdata = DATAREG(dstreg);
153: uint8 bits = 8;
154: uint8 count = srcdata & 63;
155: uint8 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
156:
157: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
158:
159: if (!count)
160: CFLAG = 0;
161: else if (count >= bits) {
162: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
163: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
164: } else {
165: CFLAG = dstdata>>(count-1) & 1;
166: XFLAG = dstdata>>(count-1) & 1;
167: }
168: VFLAG = 0;
169: NFLAG = ((sint8)outdata) < 0;
170: ZFLAG = !outdata;
171: PC+= 2;
172: }
173:
174: void cpu_op_1488a(t_ipc *ipc) /* LSR */ {
175: /* mask f1f8, bits e048, mnemonic 67, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
176: unsigned int srcdata = ipc->src;
177: int dstreg = (ipc->opcode >> 0) & 7;
178: uint16 dstdata = DATAREG(dstreg);
179: uint8 bits = 16;
180: uint8 count = srcdata & 63;
181: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
182:
183: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
184: PC+= 2;
185: }
186:
187: void cpu_op_1488b(t_ipc *ipc) /* LSR */ {
188: /* mask f1f8, bits e048, mnemonic 67, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
189: unsigned int srcdata = ipc->src;
190: int dstreg = (ipc->opcode >> 0) & 7;
191: uint16 dstdata = DATAREG(dstreg);
192: uint8 bits = 16;
193: uint8 count = srcdata & 63;
194: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
195:
196: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
197:
198: if (!count)
199: CFLAG = 0;
200: else if (count >= bits) {
201: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
202: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
203: } else {
204: CFLAG = dstdata>>(count-1) & 1;
205: XFLAG = dstdata>>(count-1) & 1;
206: }
207: VFLAG = 0;
208: NFLAG = ((sint16)outdata) < 0;
209: ZFLAG = !outdata;
210: PC+= 2;
211: }
212:
213: void cpu_op_1489a(t_ipc *ipc) /* LSR */ {
214: /* mask f1f8, bits e088, mnemonic 67, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
215: unsigned int srcdata = ipc->src;
216: int dstreg = (ipc->opcode >> 0) & 7;
217: uint32 dstdata = DATAREG(dstreg);
218: uint8 bits = 32;
219: uint8 count = srcdata & 63;
220: uint32 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
221:
222: DATAREG(dstreg) = outdata;
223: PC+= 2;
224: }
225:
226: void cpu_op_1489b(t_ipc *ipc) /* LSR */ {
227: /* mask f1f8, bits e088, mnemonic 67, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
228: unsigned int srcdata = ipc->src;
229: int dstreg = (ipc->opcode >> 0) & 7;
230: uint32 dstdata = DATAREG(dstreg);
231: uint8 bits = 32;
232: uint8 count = srcdata & 63;
233: uint32 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
234:
235: DATAREG(dstreg) = outdata;
236:
237: if (!count)
238: CFLAG = 0;
239: else if (count >= bits) {
240: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
241: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
242: } else {
243: CFLAG = dstdata>>(count-1) & 1;
244: XFLAG = dstdata>>(count-1) & 1;
245: }
246: VFLAG = 0;
247: NFLAG = ((sint32)outdata) < 0;
248: ZFLAG = !outdata;
249: PC+= 2;
250: }
251:
252: void cpu_op_1490a(t_ipc *ipc) /* ROXR */ {
253: /* mask f1f8, bits e010, mnemonic 68, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
254: unsigned int srcdata = ipc->src;
255: int dstreg = (ipc->opcode >> 0) & 7;
256: uint8 dstdata = DATAREG(dstreg);
257: uint8 bits = 8;
258: uint8 loop = srcdata & 63;
259: uint8 cflag = CFLAG;
260: uint8 xflag = XFLAG;
261: uint8 outdata = dstdata;
262:
263: while(loop) {
264: cflag = outdata & 1;
265: outdata>>= 1;
266: if (xflag)
267: outdata |= 1<<(bits-1);
268: xflag = cflag;
269: loop--;
270: }
271: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
272: PC+= 2;
273: }
274:
275: void cpu_op_1490b(t_ipc *ipc) /* ROXR */ {
276: /* mask f1f8, bits e010, mnemonic 68, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
277: unsigned int srcdata = ipc->src;
278: int dstreg = (ipc->opcode >> 0) & 7;
279: uint8 dstdata = DATAREG(dstreg);
280: uint8 bits = 8;
281: uint8 loop = srcdata & 63;
282: uint8 cflag = CFLAG;
283: uint8 xflag = XFLAG;
284: uint8 outdata = dstdata;
285:
286: while(loop) {
287: cflag = outdata & 1;
288: outdata>>= 1;
289: if (xflag)
290: outdata |= 1<<(bits-1);
291: xflag = cflag;
292: loop--;
293: }
294: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
295:
296: XFLAG = xflag;
297: CFLAG = xflag;
298: NFLAG = ((sint8)outdata) < 0;
299: ZFLAG = !outdata;
300: VFLAG = 0;
301: PC+= 2;
302: }
303:
304: void cpu_op_1491a(t_ipc *ipc) /* ROXR */ {
305: /* mask f1f8, bits e050, mnemonic 68, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
306: unsigned int srcdata = ipc->src;
307: int dstreg = (ipc->opcode >> 0) & 7;
308: uint16 dstdata = DATAREG(dstreg);
309: uint8 bits = 16;
310: uint8 loop = srcdata & 63;
311: uint8 cflag = CFLAG;
312: uint8 xflag = XFLAG;
313: uint16 outdata = dstdata;
314:
315: while(loop) {
316: cflag = outdata & 1;
317: outdata>>= 1;
318: if (xflag)
319: outdata |= 1<<(bits-1);
320: xflag = cflag;
321: loop--;
322: }
323: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
324: PC+= 2;
325: }
326:
327: void cpu_op_1491b(t_ipc *ipc) /* ROXR */ {
328: /* mask f1f8, bits e050, mnemonic 68, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
329: unsigned int srcdata = ipc->src;
330: int dstreg = (ipc->opcode >> 0) & 7;
331: uint16 dstdata = DATAREG(dstreg);
332: uint8 bits = 16;
333: uint8 loop = srcdata & 63;
334: uint8 cflag = CFLAG;
335: uint8 xflag = XFLAG;
336: uint16 outdata = dstdata;
337:
338: while(loop) {
339: cflag = outdata & 1;
340: outdata>>= 1;
341: if (xflag)
342: outdata |= 1<<(bits-1);
343: xflag = cflag;
344: loop--;
345: }
346: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
347:
348: XFLAG = xflag;
349: CFLAG = xflag;
350: NFLAG = ((sint16)outdata) < 0;
351: ZFLAG = !outdata;
352: VFLAG = 0;
353: PC+= 2;
354: }
355:
356: void cpu_op_1492a(t_ipc *ipc) /* ROXR */ {
357: /* mask f1f8, bits e090, mnemonic 68, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
358: unsigned int srcdata = ipc->src;
359: int dstreg = (ipc->opcode >> 0) & 7;
360: uint32 dstdata = DATAREG(dstreg);
361: uint8 bits = 32;
362: uint8 loop = srcdata & 63;
363: uint8 cflag = CFLAG;
364: uint8 xflag = XFLAG;
365: uint32 outdata = dstdata;
366:
367: while(loop) {
368: cflag = outdata & 1;
369: outdata>>= 1;
370: if (xflag)
371: outdata |= 1<<(bits-1);
372: xflag = cflag;
373: loop--;
374: }
375: DATAREG(dstreg) = outdata;
376: PC+= 2;
377: }
378:
379: void cpu_op_1492b(t_ipc *ipc) /* ROXR */ {
380: /* mask f1f8, bits e090, mnemonic 68, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
381: unsigned int srcdata = ipc->src;
382: int dstreg = (ipc->opcode >> 0) & 7;
383: uint32 dstdata = DATAREG(dstreg);
384: uint8 bits = 32;
385: uint8 loop = srcdata & 63;
386: uint8 cflag = CFLAG;
387: uint8 xflag = XFLAG;
388: uint32 outdata = dstdata;
389:
390: while(loop) {
391: cflag = outdata & 1;
392: outdata>>= 1;
393: if (xflag)
394: outdata |= 1<<(bits-1);
395: xflag = cflag;
396: loop--;
397: }
398: DATAREG(dstreg) = outdata;
399:
400: XFLAG = xflag;
401: CFLAG = xflag;
402: NFLAG = ((sint32)outdata) < 0;
403: ZFLAG = !outdata;
404: VFLAG = 0;
405: PC+= 2;
406: }
407:
408: void cpu_op_1493a(t_ipc *ipc) /* ROR */ {
409: /* mask f1f8, bits e018, mnemonic 69, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
410: unsigned int srcdata = ipc->src;
411: int dstreg = (ipc->opcode >> 0) & 7;
412: uint8 dstdata = DATAREG(dstreg);
413: uint8 bits = 8;
414: uint8 loop = srcdata & 63;
415: uint8 cflag = 0;
416: uint8 outdata = dstdata;
417:
418: while(loop) {
419: cflag = outdata & 1;
420: outdata>>= 1;
421: if (cflag)
422: outdata |= 1<<(bits-1);
423: loop--;
424: }
425: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
426: PC+= 2;
427: }
428:
429: void cpu_op_1493b(t_ipc *ipc) /* ROR */ {
430: /* mask f1f8, bits e018, mnemonic 69, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
431: unsigned int srcdata = ipc->src;
432: int dstreg = (ipc->opcode >> 0) & 7;
433: uint8 dstdata = DATAREG(dstreg);
434: uint8 bits = 8;
435: uint8 loop = srcdata & 63;
436: uint8 cflag = 0;
437: uint8 outdata = dstdata;
438:
439: while(loop) {
440: cflag = outdata & 1;
441: outdata>>= 1;
442: if (cflag)
443: outdata |= 1<<(bits-1);
444: loop--;
445: }
446: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
447:
448: CFLAG = cflag;
449: NFLAG = ((sint8)outdata) < 0;
450: ZFLAG = !outdata;
451: VFLAG = 0;
452: PC+= 2;
453: }
454:
455: void cpu_op_1494a(t_ipc *ipc) /* ROR */ {
456: /* mask f1f8, bits e058, mnemonic 69, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
457: unsigned int srcdata = ipc->src;
458: int dstreg = (ipc->opcode >> 0) & 7;
459: uint16 dstdata = DATAREG(dstreg);
460: uint8 bits = 16;
461: uint8 loop = srcdata & 63;
462: uint8 cflag = 0;
463: uint16 outdata = dstdata;
464:
465: while(loop) {
466: cflag = outdata & 1;
467: outdata>>= 1;
468: if (cflag)
469: outdata |= 1<<(bits-1);
470: loop--;
471: }
472: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
473: PC+= 2;
474: }
475:
476: void cpu_op_1494b(t_ipc *ipc) /* ROR */ {
477: /* mask f1f8, bits e058, mnemonic 69, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
478: unsigned int srcdata = ipc->src;
479: int dstreg = (ipc->opcode >> 0) & 7;
480: uint16 dstdata = DATAREG(dstreg);
481: uint8 bits = 16;
482: uint8 loop = srcdata & 63;
483: uint8 cflag = 0;
484: uint16 outdata = dstdata;
485:
486: while(loop) {
487: cflag = outdata & 1;
488: outdata>>= 1;
489: if (cflag)
490: outdata |= 1<<(bits-1);
491: loop--;
492: }
493: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
494:
495: CFLAG = cflag;
496: NFLAG = ((sint16)outdata) < 0;
497: ZFLAG = !outdata;
498: VFLAG = 0;
499: PC+= 2;
500: }
501:
502: void cpu_op_1495a(t_ipc *ipc) /* ROR */ {
503: /* mask f1f8, bits e098, mnemonic 69, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
504: unsigned int srcdata = ipc->src;
505: int dstreg = (ipc->opcode >> 0) & 7;
506: uint32 dstdata = DATAREG(dstreg);
507: uint8 bits = 32;
508: uint8 loop = srcdata & 63;
509: uint8 cflag = 0;
510: uint32 outdata = dstdata;
511:
512: while(loop) {
513: cflag = outdata & 1;
514: outdata>>= 1;
515: if (cflag)
516: outdata |= 1<<(bits-1);
517: loop--;
518: }
519: DATAREG(dstreg) = outdata;
520: PC+= 2;
521: }
522:
523: void cpu_op_1495b(t_ipc *ipc) /* ROR */ {
524: /* mask f1f8, bits e098, mnemonic 69, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
525: unsigned int srcdata = ipc->src;
526: int dstreg = (ipc->opcode >> 0) & 7;
527: uint32 dstdata = DATAREG(dstreg);
528: uint8 bits = 32;
529: uint8 loop = srcdata & 63;
530: uint8 cflag = 0;
531: uint32 outdata = dstdata;
532:
533: while(loop) {
534: cflag = outdata & 1;
535: outdata>>= 1;
536: if (cflag)
537: outdata |= 1<<(bits-1);
538: loop--;
539: }
540: DATAREG(dstreg) = outdata;
541:
542: CFLAG = cflag;
543: NFLAG = ((sint32)outdata) < 0;
544: ZFLAG = !outdata;
545: VFLAG = 0;
546: PC+= 2;
547: }
548:
549: void cpu_op_1496a(t_ipc *ipc) /* ASR */ {
550: /* mask fff8, bits e000, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
551: unsigned int srcdata = 8;
552: int dstreg = (ipc->opcode >> 0) & 7;
553: uint8 dstdata = DATAREG(dstreg);
554: uint8 bits = 8;
555: uint8 count = srcdata & 63;
556: uint8 outdata = ((sint8)dstdata) >> (count > 7 ? 7 : count);
557:
558: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
559: PC+= 2;
560: }
561:
562: void cpu_op_1496b(t_ipc *ipc) /* ASR */ {
563: /* mask fff8, bits e000, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
564: unsigned int srcdata = 8;
565: int dstreg = (ipc->opcode >> 0) & 7;
566: uint8 dstdata = DATAREG(dstreg);
567: uint8 bits = 8;
568: uint8 count = srcdata & 63;
569: uint8 outdata = ((sint8)dstdata) >> (count > 7 ? 7 : count);
570:
571: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
572:
573: if (!srcdata)
574: CFLAG = 0;
575: else if (srcdata >= bits) {
576: CFLAG = dstdata>>(bits-1);
577: XFLAG = dstdata>>(bits-1);
578: } else {
579: CFLAG = dstdata>>(count-1) & 1;
580: XFLAG = dstdata>>(count-1) & 1;
581: }
582: VFLAG = 0;
583: NFLAG = ((sint8)outdata) < 0;
584: ZFLAG = !outdata;
585: PC+= 2;
586: }
587:
588: void cpu_op_1497a(t_ipc *ipc) /* ASR */ {
589: /* mask fff8, bits e040, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
590: unsigned int srcdata = 8;
591: int dstreg = (ipc->opcode >> 0) & 7;
592: uint16 dstdata = DATAREG(dstreg);
593: uint8 bits = 16;
594: uint8 count = srcdata & 63;
595: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
596:
597: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
598: PC+= 2;
599: }
600:
601: void cpu_op_1497b(t_ipc *ipc) /* ASR */ {
602: /* mask fff8, bits e040, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
603: unsigned int srcdata = 8;
604: int dstreg = (ipc->opcode >> 0) & 7;
605: uint16 dstdata = DATAREG(dstreg);
606: uint8 bits = 16;
607: uint8 count = srcdata & 63;
608: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
609:
610: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
611:
612: if (!srcdata)
613: CFLAG = 0;
614: else if (srcdata >= bits) {
615: CFLAG = dstdata>>(bits-1);
616: XFLAG = dstdata>>(bits-1);
617: } else {
618: CFLAG = dstdata>>(count-1) & 1;
619: XFLAG = dstdata>>(count-1) & 1;
620: }
621: VFLAG = 0;
622: NFLAG = ((sint16)outdata) < 0;
623: ZFLAG = !outdata;
624: PC+= 2;
625: }
626:
627: void cpu_op_1498a(t_ipc *ipc) /* ASR */ {
628: /* mask fff8, bits e080, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
629: unsigned int srcdata = 8;
630: int dstreg = (ipc->opcode >> 0) & 7;
631: uint32 dstdata = DATAREG(dstreg);
632: uint8 bits = 32;
633: uint8 count = srcdata & 63;
634: uint32 outdata = ((sint32)dstdata) >> (count > 31 ? 31 : count);
635:
636: DATAREG(dstreg) = outdata;
637: PC+= 2;
638: }
639:
640: void cpu_op_1498b(t_ipc *ipc) /* ASR */ {
641: /* mask fff8, bits e080, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
642: unsigned int srcdata = 8;
643: int dstreg = (ipc->opcode >> 0) & 7;
644: uint32 dstdata = DATAREG(dstreg);
645: uint8 bits = 32;
646: uint8 count = srcdata & 63;
647: uint32 outdata = ((sint32)dstdata) >> (count > 31 ? 31 : count);
648:
649: DATAREG(dstreg) = outdata;
650:
651: if (!srcdata)
652: CFLAG = 0;
653: else if (srcdata >= bits) {
654: CFLAG = dstdata>>(bits-1);
655: XFLAG = dstdata>>(bits-1);
656: } else {
657: CFLAG = dstdata>>(count-1) & 1;
658: XFLAG = dstdata>>(count-1) & 1;
659: }
660: VFLAG = 0;
661: NFLAG = ((sint32)outdata) < 0;
662: ZFLAG = !outdata;
663: PC+= 2;
664: }
665:
666: void cpu_op_1499a(t_ipc *ipc) /* LSR */ {
667: /* mask fff8, bits e008, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
668: unsigned int srcdata = 8;
669: int dstreg = (ipc->opcode >> 0) & 7;
670: uint8 dstdata = DATAREG(dstreg);
671: uint8 bits = 8;
672: uint8 count = srcdata & 63;
673: uint8 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
674:
675: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
676: PC+= 2;
677: }
678:
679: void cpu_op_1499b(t_ipc *ipc) /* LSR */ {
680: /* mask fff8, bits e008, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
681: unsigned int srcdata = 8;
682: int dstreg = (ipc->opcode >> 0) & 7;
683: uint8 dstdata = DATAREG(dstreg);
684: uint8 bits = 8;
685: uint8 count = srcdata & 63;
686: uint8 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
687:
688: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
689:
690: if (!count)
691: CFLAG = 0;
692: else if (count >= bits) {
693: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
694: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
695: } else {
696: CFLAG = dstdata>>(count-1) & 1;
697: XFLAG = dstdata>>(count-1) & 1;
698: }
699: VFLAG = 0;
700: NFLAG = ((sint8)outdata) < 0;
701: ZFLAG = !outdata;
702: PC+= 2;
703: }
704:
705: void cpu_op_1500a(t_ipc *ipc) /* LSR */ {
706: /* mask fff8, bits e048, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
707: unsigned int srcdata = 8;
708: int dstreg = (ipc->opcode >> 0) & 7;
709: uint16 dstdata = DATAREG(dstreg);
710: uint8 bits = 16;
711: uint8 count = srcdata & 63;
712: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
713:
714: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
715: PC+= 2;
716: }
717:
718: void cpu_op_1500b(t_ipc *ipc) /* LSR */ {
719: /* mask fff8, bits e048, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
720: unsigned int srcdata = 8;
721: int dstreg = (ipc->opcode >> 0) & 7;
722: uint16 dstdata = DATAREG(dstreg);
723: uint8 bits = 16;
724: uint8 count = srcdata & 63;
725: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
726:
727: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
728:
729: if (!count)
730: CFLAG = 0;
731: else if (count >= bits) {
732: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
733: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
734: } else {
735: CFLAG = dstdata>>(count-1) & 1;
736: XFLAG = dstdata>>(count-1) & 1;
737: }
738: VFLAG = 0;
739: NFLAG = ((sint16)outdata) < 0;
740: ZFLAG = !outdata;
741: PC+= 2;
742: }
743:
744: void cpu_op_1501a(t_ipc *ipc) /* LSR */ {
745: /* mask fff8, bits e088, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
746: unsigned int srcdata = 8;
747: int dstreg = (ipc->opcode >> 0) & 7;
748: uint32 dstdata = DATAREG(dstreg);
749: uint8 bits = 32;
750: uint8 count = srcdata & 63;
751: uint32 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
752:
753: DATAREG(dstreg) = outdata;
754: PC+= 2;
755: }
756:
757: void cpu_op_1501b(t_ipc *ipc) /* LSR */ {
758: /* mask fff8, bits e088, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
759: unsigned int srcdata = 8;
760: int dstreg = (ipc->opcode >> 0) & 7;
761: uint32 dstdata = DATAREG(dstreg);
762: uint8 bits = 32;
763: uint8 count = srcdata & 63;
764: uint32 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
765:
766: DATAREG(dstreg) = outdata;
767:
768: if (!count)
769: CFLAG = 0;
770: else if (count >= bits) {
771: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
772: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
773: } else {
774: CFLAG = dstdata>>(count-1) & 1;
775: XFLAG = dstdata>>(count-1) & 1;
776: }
777: VFLAG = 0;
778: NFLAG = ((sint32)outdata) < 0;
779: ZFLAG = !outdata;
780: PC+= 2;
781: }
782:
783: void cpu_op_1502a(t_ipc *ipc) /* ROXR */ {
784: /* mask fff8, bits e010, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
785: unsigned int srcdata = 8;
786: int dstreg = (ipc->opcode >> 0) & 7;
787: uint8 dstdata = DATAREG(dstreg);
788: uint8 bits = 8;
789: uint8 loop = srcdata & 63;
790: uint8 cflag = CFLAG;
791: uint8 xflag = XFLAG;
792: uint8 outdata = dstdata;
793:
794: while(loop) {
795: cflag = outdata & 1;
796: outdata>>= 1;
797: if (xflag)
798: outdata |= 1<<(bits-1);
799: xflag = cflag;
800: loop--;
801: }
802: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
803: PC+= 2;
804: }
805:
806: void cpu_op_1502b(t_ipc *ipc) /* ROXR */ {
807: /* mask fff8, bits e010, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
808: unsigned int srcdata = 8;
809: int dstreg = (ipc->opcode >> 0) & 7;
810: uint8 dstdata = DATAREG(dstreg);
811: uint8 bits = 8;
812: uint8 loop = srcdata & 63;
813: uint8 cflag = CFLAG;
814: uint8 xflag = XFLAG;
815: uint8 outdata = dstdata;
816:
817: while(loop) {
818: cflag = outdata & 1;
819: outdata>>= 1;
820: if (xflag)
821: outdata |= 1<<(bits-1);
822: xflag = cflag;
823: loop--;
824: }
825: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
826:
827: XFLAG = xflag;
828: CFLAG = xflag;
829: NFLAG = ((sint8)outdata) < 0;
830: ZFLAG = !outdata;
831: VFLAG = 0;
832: PC+= 2;
833: }
834:
835: void cpu_op_1503a(t_ipc *ipc) /* ROXR */ {
836: /* mask fff8, bits e050, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
837: unsigned int srcdata = 8;
838: int dstreg = (ipc->opcode >> 0) & 7;
839: uint16 dstdata = DATAREG(dstreg);
840: uint8 bits = 16;
841: uint8 loop = srcdata & 63;
842: uint8 cflag = CFLAG;
843: uint8 xflag = XFLAG;
844: uint16 outdata = dstdata;
845:
846: while(loop) {
847: cflag = outdata & 1;
848: outdata>>= 1;
849: if (xflag)
850: outdata |= 1<<(bits-1);
851: xflag = cflag;
852: loop--;
853: }
854: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
855: PC+= 2;
856: }
857:
858: void cpu_op_1503b(t_ipc *ipc) /* ROXR */ {
859: /* mask fff8, bits e050, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
860: unsigned int srcdata = 8;
861: int dstreg = (ipc->opcode >> 0) & 7;
862: uint16 dstdata = DATAREG(dstreg);
863: uint8 bits = 16;
864: uint8 loop = srcdata & 63;
865: uint8 cflag = CFLAG;
866: uint8 xflag = XFLAG;
867: uint16 outdata = dstdata;
868:
869: while(loop) {
870: cflag = outdata & 1;
871: outdata>>= 1;
872: if (xflag)
873: outdata |= 1<<(bits-1);
874: xflag = cflag;
875: loop--;
876: }
877: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
878:
879: XFLAG = xflag;
880: CFLAG = xflag;
881: NFLAG = ((sint16)outdata) < 0;
882: ZFLAG = !outdata;
883: VFLAG = 0;
884: PC+= 2;
885: }
886:
887: void cpu_op_1504a(t_ipc *ipc) /* ROXR */ {
888: /* mask fff8, bits e090, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
889: unsigned int srcdata = 8;
890: int dstreg = (ipc->opcode >> 0) & 7;
891: uint32 dstdata = DATAREG(dstreg);
892: uint8 bits = 32;
893: uint8 loop = srcdata & 63;
894: uint8 cflag = CFLAG;
895: uint8 xflag = XFLAG;
896: uint32 outdata = dstdata;
897:
898: while(loop) {
899: cflag = outdata & 1;
900: outdata>>= 1;
901: if (xflag)
902: outdata |= 1<<(bits-1);
903: xflag = cflag;
904: loop--;
905: }
906: DATAREG(dstreg) = outdata;
907: PC+= 2;
908: }
909:
910: void cpu_op_1504b(t_ipc *ipc) /* ROXR */ {
911: /* mask fff8, bits e090, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
912: unsigned int srcdata = 8;
913: int dstreg = (ipc->opcode >> 0) & 7;
914: uint32 dstdata = DATAREG(dstreg);
915: uint8 bits = 32;
916: uint8 loop = srcdata & 63;
917: uint8 cflag = CFLAG;
918: uint8 xflag = XFLAG;
919: uint32 outdata = dstdata;
920:
921: while(loop) {
922: cflag = outdata & 1;
923: outdata>>= 1;
924: if (xflag)
925: outdata |= 1<<(bits-1);
926: xflag = cflag;
927: loop--;
928: }
929: DATAREG(dstreg) = outdata;
930:
931: XFLAG = xflag;
932: CFLAG = xflag;
933: NFLAG = ((sint32)outdata) < 0;
934: ZFLAG = !outdata;
935: VFLAG = 0;
936: PC+= 2;
937: }
938:
939: void cpu_op_1505a(t_ipc *ipc) /* ROR */ {
940: /* mask fff8, bits e018, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
941: unsigned int srcdata = 8;
942: int dstreg = (ipc->opcode >> 0) & 7;
943: uint8 dstdata = DATAREG(dstreg);
944: uint8 bits = 8;
945: uint8 loop = srcdata & 63;
946: uint8 cflag = 0;
947: uint8 outdata = dstdata;
948:
949: while(loop) {
950: cflag = outdata & 1;
951: outdata>>= 1;
952: if (cflag)
953: outdata |= 1<<(bits-1);
954: loop--;
955: }
956: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
957: PC+= 2;
958: }
959:
960: void cpu_op_1505b(t_ipc *ipc) /* ROR */ {
961: /* mask fff8, bits e018, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
962: unsigned int srcdata = 8;
963: int dstreg = (ipc->opcode >> 0) & 7;
964: uint8 dstdata = DATAREG(dstreg);
965: uint8 bits = 8;
966: uint8 loop = srcdata & 63;
967: uint8 cflag = 0;
968: uint8 outdata = dstdata;
969:
970: while(loop) {
971: cflag = outdata & 1;
972: outdata>>= 1;
973: if (cflag)
974: outdata |= 1<<(bits-1);
975: loop--;
976: }
977: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
978:
979: CFLAG = cflag;
980: NFLAG = ((sint8)outdata) < 0;
981: ZFLAG = !outdata;
982: VFLAG = 0;
983: PC+= 2;
984: }
985:
986: void cpu_op_1506a(t_ipc *ipc) /* ROR */ {
987: /* mask fff8, bits e058, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
988: unsigned int srcdata = 8;
989: int dstreg = (ipc->opcode >> 0) & 7;
990: uint16 dstdata = DATAREG(dstreg);
991: uint8 bits = 16;
992: uint8 loop = srcdata & 63;
993: uint8 cflag = 0;
994: uint16 outdata = dstdata;
995:
996: while(loop) {
997: cflag = outdata & 1;
998: outdata>>= 1;
999: if (cflag)
1000: outdata |= 1<<(bits-1);
1001: loop--;
1002: }
1003: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1004: PC+= 2;
1005: }
1006:
1007: void cpu_op_1506b(t_ipc *ipc) /* ROR */ {
1008: /* mask fff8, bits e058, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
1009: unsigned int srcdata = 8;
1010: int dstreg = (ipc->opcode >> 0) & 7;
1011: uint16 dstdata = DATAREG(dstreg);
1012: uint8 bits = 16;
1013: uint8 loop = srcdata & 63;
1014: uint8 cflag = 0;
1015: uint16 outdata = dstdata;
1016:
1017: while(loop) {
1018: cflag = outdata & 1;
1019: outdata>>= 1;
1020: if (cflag)
1021: outdata |= 1<<(bits-1);
1022: loop--;
1023: }
1024: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1025:
1026: CFLAG = cflag;
1027: NFLAG = ((sint16)outdata) < 0;
1028: ZFLAG = !outdata;
1029: VFLAG = 0;
1030: PC+= 2;
1031: }
1032:
1033: void cpu_op_1507a(t_ipc *ipc) /* ROR */ {
1034: /* mask fff8, bits e098, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
1035: unsigned int srcdata = 8;
1036: int dstreg = (ipc->opcode >> 0) & 7;
1037: uint32 dstdata = DATAREG(dstreg);
1038: uint8 bits = 32;
1039: uint8 loop = srcdata & 63;
1040: uint8 cflag = 0;
1041: uint32 outdata = dstdata;
1042:
1043: while(loop) {
1044: cflag = outdata & 1;
1045: outdata>>= 1;
1046: if (cflag)
1047: outdata |= 1<<(bits-1);
1048: loop--;
1049: }
1050: DATAREG(dstreg) = outdata;
1051: PC+= 2;
1052: }
1053:
1054: void cpu_op_1507b(t_ipc *ipc) /* ROR */ {
1055: /* mask fff8, bits e098, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
1056: unsigned int srcdata = 8;
1057: int dstreg = (ipc->opcode >> 0) & 7;
1058: uint32 dstdata = DATAREG(dstreg);
1059: uint8 bits = 32;
1060: uint8 loop = srcdata & 63;
1061: uint8 cflag = 0;
1062: uint32 outdata = dstdata;
1063:
1064: while(loop) {
1065: cflag = outdata & 1;
1066: outdata>>= 1;
1067: if (cflag)
1068: outdata |= 1<<(bits-1);
1069: loop--;
1070: }
1071: DATAREG(dstreg) = outdata;
1072:
1073: CFLAG = cflag;
1074: NFLAG = ((sint32)outdata) < 0;
1075: ZFLAG = !outdata;
1076: VFLAG = 0;
1077: PC+= 2;
1078: }
1079:
1080: void cpu_op_1508a(t_ipc *ipc) /* ASR */ {
1081: /* mask f1f8, bits e020, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1082: int srcreg = (ipc->opcode >> 9) & 7;
1083: uint8 srcdata = DATAREG(srcreg);
1084: int dstreg = (ipc->opcode >> 0) & 7;
1085: uint8 dstdata = DATAREG(dstreg);
1086: uint8 bits = 8;
1087: uint8 count = srcdata & 63;
1088: uint8 outdata = ((sint8)dstdata) >> (count > 7 ? 7 : count);
1089:
1090: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1091: PC+= 2;
1092: }
1093:
1094: void cpu_op_1508b(t_ipc *ipc) /* ASR */ {
1095: /* mask f1f8, bits e020, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1096: int srcreg = (ipc->opcode >> 9) & 7;
1097: uint8 srcdata = DATAREG(srcreg);
1098: int dstreg = (ipc->opcode >> 0) & 7;
1099: uint8 dstdata = DATAREG(dstreg);
1100: uint8 bits = 8;
1101: uint8 count = srcdata & 63;
1102: uint8 outdata = ((sint8)dstdata) >> (count > 7 ? 7 : count);
1103:
1104: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1105:
1106: if (!srcdata)
1107: CFLAG = 0;
1108: else if (srcdata >= bits) {
1109: CFLAG = dstdata>>(bits-1);
1110: XFLAG = dstdata>>(bits-1);
1111: } else {
1112: CFLAG = dstdata>>(count-1) & 1;
1113: XFLAG = dstdata>>(count-1) & 1;
1114: }
1115: VFLAG = 0;
1116: NFLAG = ((sint8)outdata) < 0;
1117: ZFLAG = !outdata;
1118: PC+= 2;
1119: }
1120:
1121: void cpu_op_1509a(t_ipc *ipc) /* ASR */ {
1122: /* mask f1f8, bits e060, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1123: int srcreg = (ipc->opcode >> 9) & 7;
1124: uint16 srcdata = DATAREG(srcreg);
1125: int dstreg = (ipc->opcode >> 0) & 7;
1126: uint16 dstdata = DATAREG(dstreg);
1127: uint8 bits = 16;
1128: uint8 count = srcdata & 63;
1129: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
1130:
1131: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1132: PC+= 2;
1133: }
1134:
1135: void cpu_op_1509b(t_ipc *ipc) /* ASR */ {
1136: /* mask f1f8, bits e060, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1137: int srcreg = (ipc->opcode >> 9) & 7;
1138: uint16 srcdata = DATAREG(srcreg);
1139: int dstreg = (ipc->opcode >> 0) & 7;
1140: uint16 dstdata = DATAREG(dstreg);
1141: uint8 bits = 16;
1142: uint8 count = srcdata & 63;
1143: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
1144:
1145: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1146:
1147: if (!srcdata)
1148: CFLAG = 0;
1149: else if (srcdata >= bits) {
1150: CFLAG = dstdata>>(bits-1);
1151: XFLAG = dstdata>>(bits-1);
1152: } else {
1153: CFLAG = dstdata>>(count-1) & 1;
1154: XFLAG = dstdata>>(count-1) & 1;
1155: }
1156: VFLAG = 0;
1157: NFLAG = ((sint16)outdata) < 0;
1158: ZFLAG = !outdata;
1159: PC+= 2;
1160: }
1161:
1162: void cpu_op_1510a(t_ipc *ipc) /* ASR */ {
1163: /* mask f1f8, bits e0a0, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1164: int srcreg = (ipc->opcode >> 9) & 7;
1165: uint32 srcdata = DATAREG(srcreg);
1166: int dstreg = (ipc->opcode >> 0) & 7;
1167: uint32 dstdata = DATAREG(dstreg);
1168: uint8 bits = 32;
1169: uint8 count = srcdata & 63;
1170: uint32 outdata = ((sint32)dstdata) >> (count > 31 ? 31 : count);
1171:
1172: DATAREG(dstreg) = outdata;
1173: PC+= 2;
1174: }
1175:
1176: void cpu_op_1510b(t_ipc *ipc) /* ASR */ {
1177: /* mask f1f8, bits e0a0, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1178: int srcreg = (ipc->opcode >> 9) & 7;
1179: uint32 srcdata = DATAREG(srcreg);
1180: int dstreg = (ipc->opcode >> 0) & 7;
1181: uint32 dstdata = DATAREG(dstreg);
1182: uint8 bits = 32;
1183: uint8 count = srcdata & 63;
1184: uint32 outdata = ((sint32)dstdata) >> (count > 31 ? 31 : count);
1185:
1186: DATAREG(dstreg) = outdata;
1187:
1188: if (!srcdata)
1189: CFLAG = 0;
1190: else if (srcdata >= bits) {
1191: CFLAG = dstdata>>(bits-1);
1192: XFLAG = dstdata>>(bits-1);
1193: } else {
1194: CFLAG = dstdata>>(count-1) & 1;
1195: XFLAG = dstdata>>(count-1) & 1;
1196: }
1197: VFLAG = 0;
1198: NFLAG = ((sint32)outdata) < 0;
1199: ZFLAG = !outdata;
1200: PC+= 2;
1201: }
1202:
1203: void cpu_op_1511a(t_ipc *ipc) /* LSR */ {
1204: /* mask f1f8, bits e028, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1205: int srcreg = (ipc->opcode >> 9) & 7;
1206: uint8 srcdata = DATAREG(srcreg);
1207: int dstreg = (ipc->opcode >> 0) & 7;
1208: uint8 dstdata = DATAREG(dstreg);
1209: uint8 bits = 8;
1210: uint8 count = srcdata & 63;
1211: uint8 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
1212:
1213: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1214: PC+= 2;
1215: }
1216:
1217: void cpu_op_1511b(t_ipc *ipc) /* LSR */ {
1218: /* mask f1f8, bits e028, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1219: int srcreg = (ipc->opcode >> 9) & 7;
1220: uint8 srcdata = DATAREG(srcreg);
1221: int dstreg = (ipc->opcode >> 0) & 7;
1222: uint8 dstdata = DATAREG(dstreg);
1223: uint8 bits = 8;
1224: uint8 count = srcdata & 63;
1225: uint8 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
1226:
1227: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1228:
1229: if (!count)
1230: CFLAG = 0;
1231: else if (count >= bits) {
1232: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
1233: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
1234: } else {
1235: CFLAG = dstdata>>(count-1) & 1;
1236: XFLAG = dstdata>>(count-1) & 1;
1237: }
1238: VFLAG = 0;
1239: NFLAG = ((sint8)outdata) < 0;
1240: ZFLAG = !outdata;
1241: PC+= 2;
1242: }
1243:
1244: void cpu_op_1512a(t_ipc *ipc) /* LSR */ {
1245: /* mask f1f8, bits e068, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1246: int srcreg = (ipc->opcode >> 9) & 7;
1247: uint16 srcdata = DATAREG(srcreg);
1248: int dstreg = (ipc->opcode >> 0) & 7;
1249: uint16 dstdata = DATAREG(dstreg);
1250: uint8 bits = 16;
1251: uint8 count = srcdata & 63;
1252: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
1253:
1254: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1255: PC+= 2;
1256: }
1257:
1258: void cpu_op_1512b(t_ipc *ipc) /* LSR */ {
1259: /* mask f1f8, bits e068, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1260: int srcreg = (ipc->opcode >> 9) & 7;
1261: uint16 srcdata = DATAREG(srcreg);
1262: int dstreg = (ipc->opcode >> 0) & 7;
1263: uint16 dstdata = DATAREG(dstreg);
1264: uint8 bits = 16;
1265: uint8 count = srcdata & 63;
1266: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
1267:
1268: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1269:
1270: if (!count)
1271: CFLAG = 0;
1272: else if (count >= bits) {
1273: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
1274: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
1275: } else {
1276: CFLAG = dstdata>>(count-1) & 1;
1277: XFLAG = dstdata>>(count-1) & 1;
1278: }
1279: VFLAG = 0;
1280: NFLAG = ((sint16)outdata) < 0;
1281: ZFLAG = !outdata;
1282: PC+= 2;
1283: }
1284:
1285: void cpu_op_1513a(t_ipc *ipc) /* LSR */ {
1286: /* mask f1f8, bits e0a8, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1287: int srcreg = (ipc->opcode >> 9) & 7;
1288: uint32 srcdata = DATAREG(srcreg);
1289: int dstreg = (ipc->opcode >> 0) & 7;
1290: uint32 dstdata = DATAREG(dstreg);
1291: uint8 bits = 32;
1292: uint8 count = srcdata & 63;
1293: uint32 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
1294:
1295: DATAREG(dstreg) = outdata;
1296: PC+= 2;
1297: }
1298:
1299: void cpu_op_1513b(t_ipc *ipc) /* LSR */ {
1300: /* mask f1f8, bits e0a8, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1301: int srcreg = (ipc->opcode >> 9) & 7;
1302: uint32 srcdata = DATAREG(srcreg);
1303: int dstreg = (ipc->opcode >> 0) & 7;
1304: uint32 dstdata = DATAREG(dstreg);
1305: uint8 bits = 32;
1306: uint8 count = srcdata & 63;
1307: uint32 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
1308:
1309: DATAREG(dstreg) = outdata;
1310:
1311: if (!count)
1312: CFLAG = 0;
1313: else if (count >= bits) {
1314: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
1315: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
1316: } else {
1317: CFLAG = dstdata>>(count-1) & 1;
1318: XFLAG = dstdata>>(count-1) & 1;
1319: }
1320: VFLAG = 0;
1321: NFLAG = ((sint32)outdata) < 0;
1322: ZFLAG = !outdata;
1323: PC+= 2;
1324: }
1325:
1326: void cpu_op_1514a(t_ipc *ipc) /* ROXR */ {
1327: /* mask f1f8, bits e030, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1328: int srcreg = (ipc->opcode >> 9) & 7;
1329: uint8 srcdata = DATAREG(srcreg);
1330: int dstreg = (ipc->opcode >> 0) & 7;
1331: uint8 dstdata = DATAREG(dstreg);
1332: uint8 bits = 8;
1333: uint8 loop = srcdata & 63;
1334: uint8 cflag = CFLAG;
1335: uint8 xflag = XFLAG;
1336: uint8 outdata = dstdata;
1337:
1338: while(loop) {
1339: cflag = outdata & 1;
1340: outdata>>= 1;
1341: if (xflag)
1342: outdata |= 1<<(bits-1);
1343: xflag = cflag;
1344: loop--;
1345: }
1346: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1347: PC+= 2;
1348: }
1349:
1350: void cpu_op_1514b(t_ipc *ipc) /* ROXR */ {
1351: /* mask f1f8, bits e030, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1352: int srcreg = (ipc->opcode >> 9) & 7;
1353: uint8 srcdata = DATAREG(srcreg);
1354: int dstreg = (ipc->opcode >> 0) & 7;
1355: uint8 dstdata = DATAREG(dstreg);
1356: uint8 bits = 8;
1357: uint8 loop = srcdata & 63;
1358: uint8 cflag = CFLAG;
1359: uint8 xflag = XFLAG;
1360: uint8 outdata = dstdata;
1361:
1362: while(loop) {
1363: cflag = outdata & 1;
1364: outdata>>= 1;
1365: if (xflag)
1366: outdata |= 1<<(bits-1);
1367: xflag = cflag;
1368: loop--;
1369: }
1370: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1371:
1372: XFLAG = xflag;
1373: CFLAG = xflag;
1374: NFLAG = ((sint8)outdata) < 0;
1375: ZFLAG = !outdata;
1376: VFLAG = 0;
1377: PC+= 2;
1378: }
1379:
1380: void cpu_op_1515a(t_ipc *ipc) /* ROXR */ {
1381: /* mask f1f8, bits e070, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1382: int srcreg = (ipc->opcode >> 9) & 7;
1383: uint16 srcdata = DATAREG(srcreg);
1384: int dstreg = (ipc->opcode >> 0) & 7;
1385: uint16 dstdata = DATAREG(dstreg);
1386: uint8 bits = 16;
1387: uint8 loop = srcdata & 63;
1388: uint8 cflag = CFLAG;
1389: uint8 xflag = XFLAG;
1390: uint16 outdata = dstdata;
1391:
1392: while(loop) {
1393: cflag = outdata & 1;
1394: outdata>>= 1;
1395: if (xflag)
1396: outdata |= 1<<(bits-1);
1397: xflag = cflag;
1398: loop--;
1399: }
1400: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1401: PC+= 2;
1402: }
1403:
1404: void cpu_op_1515b(t_ipc *ipc) /* ROXR */ {
1405: /* mask f1f8, bits e070, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1406: int srcreg = (ipc->opcode >> 9) & 7;
1407: uint16 srcdata = DATAREG(srcreg);
1408: int dstreg = (ipc->opcode >> 0) & 7;
1409: uint16 dstdata = DATAREG(dstreg);
1410: uint8 bits = 16;
1411: uint8 loop = srcdata & 63;
1412: uint8 cflag = CFLAG;
1413: uint8 xflag = XFLAG;
1414: uint16 outdata = dstdata;
1415:
1416: while(loop) {
1417: cflag = outdata & 1;
1418: outdata>>= 1;
1419: if (xflag)
1420: outdata |= 1<<(bits-1);
1421: xflag = cflag;
1422: loop--;
1423: }
1424: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1425:
1426: XFLAG = xflag;
1427: CFLAG = xflag;
1428: NFLAG = ((sint16)outdata) < 0;
1429: ZFLAG = !outdata;
1430: VFLAG = 0;
1431: PC+= 2;
1432: }
1433:
1434: void cpu_op_1516a(t_ipc *ipc) /* ROXR */ {
1435: /* mask f1f8, bits e0b0, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1436: int srcreg = (ipc->opcode >> 9) & 7;
1437: uint32 srcdata = DATAREG(srcreg);
1438: int dstreg = (ipc->opcode >> 0) & 7;
1439: uint32 dstdata = DATAREG(dstreg);
1440: uint8 bits = 32;
1441: uint8 loop = srcdata & 63;
1442: uint8 cflag = CFLAG;
1443: uint8 xflag = XFLAG;
1444: uint32 outdata = dstdata;
1445:
1446: while(loop) {
1447: cflag = outdata & 1;
1448: outdata>>= 1;
1449: if (xflag)
1450: outdata |= 1<<(bits-1);
1451: xflag = cflag;
1452: loop--;
1453: }
1454: DATAREG(dstreg) = outdata;
1455: PC+= 2;
1456: }
1457:
1458: void cpu_op_1516b(t_ipc *ipc) /* ROXR */ {
1459: /* mask f1f8, bits e0b0, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1460: int srcreg = (ipc->opcode >> 9) & 7;
1461: uint32 srcdata = DATAREG(srcreg);
1462: int dstreg = (ipc->opcode >> 0) & 7;
1463: uint32 dstdata = DATAREG(dstreg);
1464: uint8 bits = 32;
1465: uint8 loop = srcdata & 63;
1466: uint8 cflag = CFLAG;
1467: uint8 xflag = XFLAG;
1468: uint32 outdata = dstdata;
1469:
1470: while(loop) {
1471: cflag = outdata & 1;
1472: outdata>>= 1;
1473: if (xflag)
1474: outdata |= 1<<(bits-1);
1475: xflag = cflag;
1476: loop--;
1477: }
1478: DATAREG(dstreg) = outdata;
1479:
1480: XFLAG = xflag;
1481: CFLAG = xflag;
1482: NFLAG = ((sint32)outdata) < 0;
1483: ZFLAG = !outdata;
1484: VFLAG = 0;
1485: PC+= 2;
1486: }
1487:
1488: void cpu_op_1517a(t_ipc *ipc) /* ROR */ {
1489: /* mask f1f8, bits e038, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1490: int srcreg = (ipc->opcode >> 9) & 7;
1491: uint8 srcdata = DATAREG(srcreg);
1492: int dstreg = (ipc->opcode >> 0) & 7;
1493: uint8 dstdata = DATAREG(dstreg);
1494: uint8 bits = 8;
1495: uint8 loop = srcdata & 63;
1496: uint8 cflag = 0;
1497: uint8 outdata = dstdata;
1498:
1499: while(loop) {
1500: cflag = outdata & 1;
1501: outdata>>= 1;
1502: if (cflag)
1503: outdata |= 1<<(bits-1);
1504: loop--;
1505: }
1506: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1507: PC+= 2;
1508: }
1509:
1510: void cpu_op_1517b(t_ipc *ipc) /* ROR */ {
1511: /* mask f1f8, bits e038, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1512: int srcreg = (ipc->opcode >> 9) & 7;
1513: uint8 srcdata = DATAREG(srcreg);
1514: int dstreg = (ipc->opcode >> 0) & 7;
1515: uint8 dstdata = DATAREG(dstreg);
1516: uint8 bits = 8;
1517: uint8 loop = srcdata & 63;
1518: uint8 cflag = 0;
1519: uint8 outdata = dstdata;
1520:
1521: while(loop) {
1522: cflag = outdata & 1;
1523: outdata>>= 1;
1524: if (cflag)
1525: outdata |= 1<<(bits-1);
1526: loop--;
1527: }
1528: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1529:
1530: CFLAG = cflag;
1531: NFLAG = ((sint8)outdata) < 0;
1532: ZFLAG = !outdata;
1533: VFLAG = 0;
1534: PC+= 2;
1535: }
1536:
1537: void cpu_op_1518a(t_ipc *ipc) /* ROR */ {
1538: /* mask f1f8, bits e078, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1539: int srcreg = (ipc->opcode >> 9) & 7;
1540: uint16 srcdata = DATAREG(srcreg);
1541: int dstreg = (ipc->opcode >> 0) & 7;
1542: uint16 dstdata = DATAREG(dstreg);
1543: uint8 bits = 16;
1544: uint8 loop = srcdata & 63;
1545: uint8 cflag = 0;
1546: uint16 outdata = dstdata;
1547:
1548: while(loop) {
1549: cflag = outdata & 1;
1550: outdata>>= 1;
1551: if (cflag)
1552: outdata |= 1<<(bits-1);
1553: loop--;
1554: }
1555: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1556: PC+= 2;
1557: }
1558:
1559: void cpu_op_1518b(t_ipc *ipc) /* ROR */ {
1560: /* mask f1f8, bits e078, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1561: int srcreg = (ipc->opcode >> 9) & 7;
1562: uint16 srcdata = DATAREG(srcreg);
1563: int dstreg = (ipc->opcode >> 0) & 7;
1564: uint16 dstdata = DATAREG(dstreg);
1565: uint8 bits = 16;
1566: uint8 loop = srcdata & 63;
1567: uint8 cflag = 0;
1568: uint16 outdata = dstdata;
1569:
1570: while(loop) {
1571: cflag = outdata & 1;
1572: outdata>>= 1;
1573: if (cflag)
1574: outdata |= 1<<(bits-1);
1575: loop--;
1576: }
1577: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1578:
1579: CFLAG = cflag;
1580: NFLAG = ((sint16)outdata) < 0;
1581: ZFLAG = !outdata;
1582: VFLAG = 0;
1583: PC+= 2;
1584: }
1585:
1586: void cpu_op_1519a(t_ipc *ipc) /* ROR */ {
1587: /* mask f1f8, bits e0b8, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1588: int srcreg = (ipc->opcode >> 9) & 7;
1589: uint32 srcdata = DATAREG(srcreg);
1590: int dstreg = (ipc->opcode >> 0) & 7;
1591: uint32 dstdata = DATAREG(dstreg);
1592: uint8 bits = 32;
1593: uint8 loop = srcdata & 63;
1594: uint8 cflag = 0;
1595: uint32 outdata = dstdata;
1596:
1597: while(loop) {
1598: cflag = outdata & 1;
1599: outdata>>= 1;
1600: if (cflag)
1601: outdata |= 1<<(bits-1);
1602: loop--;
1603: }
1604: DATAREG(dstreg) = outdata;
1605: PC+= 2;
1606: }
1607:
1608: void cpu_op_1519b(t_ipc *ipc) /* ROR */ {
1609: /* mask f1f8, bits e0b8, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1610: int srcreg = (ipc->opcode >> 9) & 7;
1611: uint32 srcdata = DATAREG(srcreg);
1612: int dstreg = (ipc->opcode >> 0) & 7;
1613: uint32 dstdata = DATAREG(dstreg);
1614: uint8 bits = 32;
1615: uint8 loop = srcdata & 63;
1616: uint8 cflag = 0;
1617: uint32 outdata = dstdata;
1618:
1619: while(loop) {
1620: cflag = outdata & 1;
1621: outdata>>= 1;
1622: if (cflag)
1623: outdata |= 1<<(bits-1);
1624: loop--;
1625: }
1626: DATAREG(dstreg) = outdata;
1627:
1628: CFLAG = cflag;
1629: NFLAG = ((sint32)outdata) < 0;
1630: ZFLAG = !outdata;
1631: VFLAG = 0;
1632: PC+= 2;
1633: }
1634:
1635: void cpu_op_1520a(t_ipc *ipc) /* ASL */ {
1636: /* mask f1f8, bits e100, mnemonic 70, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1637: unsigned int srcdata = ipc->src;
1638: int dstreg = (ipc->opcode >> 0) & 7;
1639: uint8 dstdata = DATAREG(dstreg);
1640: uint8 bits = 8;
1641: uint8 count = srcdata & 63;
1642: uint8 outdata = count >= bits ? 0 : (dstdata << count);
1643:
1644: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1645: PC+= 2;
1646: }
1647:
1648: void cpu_op_1520b(t_ipc *ipc) /* ASL */ {
1649: /* mask f1f8, bits e100, mnemonic 70, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1650: unsigned int srcdata = ipc->src;
1651: int dstreg = (ipc->opcode >> 0) & 7;
1652: uint8 dstdata = DATAREG(dstreg);
1653: uint8 bits = 8;
1654: uint8 count = srcdata & 63;
1655: uint8 outdata = count >= bits ? 0 : (dstdata << count);
1656:
1657: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1658:
1659: if (!count)
1660: CFLAG = 0;
1661: else if (count >= bits) {
1662: CFLAG = (count == bits) ? dstdata & 1 : 0;
1663: XFLAG = (count == bits) ? dstdata & 1 : 0;
1664: VFLAG = !dstdata;
1665: } else {
1666: CFLAG = dstdata>>(bits-count) & 1;
1667: XFLAG = dstdata>>(bits-count) & 1;
1668: {
1669: uint8 mask = 0xff << (7-count);
1670: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
1671: }
1672: }
1673: NFLAG = ((sint8)outdata) < 0;
1674: ZFLAG = !outdata;
1675: PC+= 2;
1676: }
1677:
1678: void cpu_op_1521a(t_ipc *ipc) /* ASL */ {
1679: /* mask f1f8, bits e140, mnemonic 70, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1680: unsigned int srcdata = ipc->src;
1681: int dstreg = (ipc->opcode >> 0) & 7;
1682: uint16 dstdata = DATAREG(dstreg);
1683: uint8 bits = 16;
1684: uint8 count = srcdata & 63;
1685: uint16 outdata = count >= bits ? 0 : (dstdata << count);
1686:
1687: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1688: PC+= 2;
1689: }
1690:
1691: void cpu_op_1521b(t_ipc *ipc) /* ASL */ {
1692: /* mask f1f8, bits e140, mnemonic 70, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1693: unsigned int srcdata = ipc->src;
1694: int dstreg = (ipc->opcode >> 0) & 7;
1695: uint16 dstdata = DATAREG(dstreg);
1696: uint8 bits = 16;
1697: uint8 count = srcdata & 63;
1698: uint16 outdata = count >= bits ? 0 : (dstdata << count);
1699:
1700: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1701:
1702: if (!count)
1703: CFLAG = 0;
1704: else if (count >= bits) {
1705: CFLAG = (count == bits) ? dstdata & 1 : 0;
1706: XFLAG = (count == bits) ? dstdata & 1 : 0;
1707: VFLAG = !dstdata;
1708: } else {
1709: CFLAG = dstdata>>(bits-count) & 1;
1710: XFLAG = dstdata>>(bits-count) & 1;
1711: {
1712: uint16 mask = 0xffff << (15-count);
1713: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
1714: }
1715: }
1716: NFLAG = ((sint16)outdata) < 0;
1717: ZFLAG = !outdata;
1718: PC+= 2;
1719: }
1720:
1721: void cpu_op_1522a(t_ipc *ipc) /* ASL */ {
1722: /* mask f1f8, bits e180, mnemonic 70, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1723: unsigned int srcdata = ipc->src;
1724: int dstreg = (ipc->opcode >> 0) & 7;
1725: uint32 dstdata = DATAREG(dstreg);
1726: uint8 bits = 32;
1727: uint8 count = srcdata & 63;
1728: uint32 outdata = count >= bits ? 0 : (dstdata << count);
1729:
1730: DATAREG(dstreg) = outdata;
1731: PC+= 2;
1732: }
1733:
1734: void cpu_op_1522b(t_ipc *ipc) /* ASL */ {
1735: /* mask f1f8, bits e180, mnemonic 70, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1736: unsigned int srcdata = ipc->src;
1737: int dstreg = (ipc->opcode >> 0) & 7;
1738: uint32 dstdata = DATAREG(dstreg);
1739: uint8 bits = 32;
1740: uint8 count = srcdata & 63;
1741: uint32 outdata = count >= bits ? 0 : (dstdata << count);
1742:
1743: DATAREG(dstreg) = outdata;
1744:
1745: if (!count)
1746: CFLAG = 0;
1747: else if (count >= bits) {
1748: CFLAG = (count == bits) ? dstdata & 1 : 0;
1749: XFLAG = (count == bits) ? dstdata & 1 : 0;
1750: VFLAG = !dstdata;
1751: } else {
1752: CFLAG = dstdata>>(bits-count) & 1;
1753: XFLAG = dstdata>>(bits-count) & 1;
1754: {
1755: uint32 mask = 0xffffffff <<(31-count);
1756: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
1757: }
1758: }
1759: NFLAG = ((sint32)outdata) < 0;
1760: ZFLAG = !outdata;
1761: PC+= 2;
1762: }
1763:
1764: void cpu_op_1523a(t_ipc *ipc) /* LSL */ {
1765: /* mask f1f8, bits e108, mnemonic 71, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1766: unsigned int srcdata = ipc->src;
1767: int dstreg = (ipc->opcode >> 0) & 7;
1768: uint8 dstdata = DATAREG(dstreg);
1769: uint8 bits = 8;
1770: uint8 count = srcdata & 63;
1771: uint8 outdata = count >= bits ? 0 : (dstdata << count);
1772:
1773: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1774: PC+= 2;
1775: }
1776:
1777: void cpu_op_1523b(t_ipc *ipc) /* LSL */ {
1778: /* mask f1f8, bits e108, mnemonic 71, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1779: unsigned int srcdata = ipc->src;
1780: int dstreg = (ipc->opcode >> 0) & 7;
1781: uint8 dstdata = DATAREG(dstreg);
1782: uint8 bits = 8;
1783: uint8 count = srcdata & 63;
1784: uint8 outdata = count >= bits ? 0 : (dstdata << count);
1785:
1786: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1787:
1788: if (!count)
1789: CFLAG = 0;
1790: else if (count >= bits) {
1791: CFLAG = (count == bits) ? dstdata & 1 : 0;
1792: XFLAG = (count == bits) ? dstdata & 1 : 0;
1793: } else {
1794: CFLAG = dstdata>>(bits-count) & 1;
1795: XFLAG = dstdata>>(bits-count) & 1;
1796: }
1797: VFLAG = 0;
1798: NFLAG = ((sint8)outdata) < 0;
1799: ZFLAG = !outdata;
1800: PC+= 2;
1801: }
1802:
1803: void cpu_op_1524a(t_ipc *ipc) /* LSL */ {
1804: /* mask f1f8, bits e148, mnemonic 71, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1805: unsigned int srcdata = ipc->src;
1806: int dstreg = (ipc->opcode >> 0) & 7;
1807: uint16 dstdata = DATAREG(dstreg);
1808: uint8 bits = 16;
1809: uint8 count = srcdata & 63;
1810: uint16 outdata = count >= bits ? 0 : (dstdata << count);
1811:
1812: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1813: PC+= 2;
1814: }
1815:
1816: void cpu_op_1524b(t_ipc *ipc) /* LSL */ {
1817: /* mask f1f8, bits e148, mnemonic 71, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1818: unsigned int srcdata = ipc->src;
1819: int dstreg = (ipc->opcode >> 0) & 7;
1820: uint16 dstdata = DATAREG(dstreg);
1821: uint8 bits = 16;
1822: uint8 count = srcdata & 63;
1823: uint16 outdata = count >= bits ? 0 : (dstdata << count);
1824:
1825: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1826:
1827: if (!count)
1828: CFLAG = 0;
1829: else if (count >= bits) {
1830: CFLAG = (count == bits) ? dstdata & 1 : 0;
1831: XFLAG = (count == bits) ? dstdata & 1 : 0;
1832: } else {
1833: CFLAG = dstdata>>(bits-count) & 1;
1834: XFLAG = dstdata>>(bits-count) & 1;
1835: }
1836: VFLAG = 0;
1837: NFLAG = ((sint16)outdata) < 0;
1838: ZFLAG = !outdata;
1839: PC+= 2;
1840: }
1841:
1842: void cpu_op_1525a(t_ipc *ipc) /* LSL */ {
1843: /* mask f1f8, bits e188, mnemonic 71, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1844: unsigned int srcdata = ipc->src;
1845: int dstreg = (ipc->opcode >> 0) & 7;
1846: uint32 dstdata = DATAREG(dstreg);
1847: uint8 bits = 32;
1848: uint8 count = srcdata & 63;
1849: uint32 outdata = count >= bits ? 0 : (dstdata << count);
1850:
1851: DATAREG(dstreg) = outdata;
1852: PC+= 2;
1853: }
1854:
1855: void cpu_op_1525b(t_ipc *ipc) /* LSL */ {
1856: /* mask f1f8, bits e188, mnemonic 71, priv 0, endblk 0, imm_notzero -1, used 0 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1857: unsigned int srcdata = ipc->src;
1858: int dstreg = (ipc->opcode >> 0) & 7;
1859: uint32 dstdata = DATAREG(dstreg);
1860: uint8 bits = 32;
1861: uint8 count = srcdata & 63;
1862: uint32 outdata = count >= bits ? 0 : (dstdata << count);
1863:
1864: DATAREG(dstreg) = outdata;
1865:
1866: if (!count)
1867: CFLAG = 0;
1868: else if (count >= bits) {
1869: CFLAG = (count == bits) ? dstdata & 1 : 0;
1870: XFLAG = (count == bits) ? dstdata & 1 : 0;
1871: } else {
1872: CFLAG = dstdata>>(bits-count) & 1;
1873: XFLAG = dstdata>>(bits-count) & 1;
1874: }
1875: VFLAG = 0;
1876: NFLAG = ((sint32)outdata) < 0;
1877: ZFLAG = !outdata;
1878: PC+= 2;
1879: }
1880:
1881: void cpu_op_1526a(t_ipc *ipc) /* ROXL */ {
1882: /* mask f1f8, bits e110, mnemonic 72, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1883: unsigned int srcdata = ipc->src;
1884: int dstreg = (ipc->opcode >> 0) & 7;
1885: uint8 dstdata = DATAREG(dstreg);
1886: uint8 bits = 8;
1887: uint8 loop = srcdata & 63;
1888: uint8 cflag = CFLAG;
1889: uint8 xflag = XFLAG;
1890: uint8 outdata = dstdata;
1891:
1892: while(loop) {
1893: cflag = outdata & 1<<(bits-1) ? 1 : 0;
1894: outdata<<= 1;
1895: outdata |= xflag;
1896: xflag = cflag;
1897: loop--;
1898: }
1899: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1900: PC+= 2;
1901: }
1902:
1903: void cpu_op_1526b(t_ipc *ipc) /* ROXL */ {
1904: /* mask f1f8, bits e110, mnemonic 72, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1905: unsigned int srcdata = ipc->src;
1906: int dstreg = (ipc->opcode >> 0) & 7;
1907: uint8 dstdata = DATAREG(dstreg);
1908: uint8 bits = 8;
1909: uint8 loop = srcdata & 63;
1910: uint8 cflag = CFLAG;
1911: uint8 xflag = XFLAG;
1912: uint8 outdata = dstdata;
1913:
1914: while(loop) {
1915: cflag = outdata & 1<<(bits-1) ? 1 : 0;
1916: outdata<<= 1;
1917: outdata |= xflag;
1918: xflag = cflag;
1919: loop--;
1920: }
1921: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
1922:
1923: XFLAG = xflag;
1924: CFLAG = xflag;
1925: NFLAG = ((sint8)outdata) < 0;
1926: ZFLAG = !outdata;
1927: VFLAG = 0;
1928: PC+= 2;
1929: }
1930:
1931: void cpu_op_1527a(t_ipc *ipc) /* ROXL */ {
1932: /* mask f1f8, bits e150, mnemonic 72, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1933: unsigned int srcdata = ipc->src;
1934: int dstreg = (ipc->opcode >> 0) & 7;
1935: uint16 dstdata = DATAREG(dstreg);
1936: uint8 bits = 16;
1937: uint8 loop = srcdata & 63;
1938: uint8 cflag = CFLAG;
1939: uint8 xflag = XFLAG;
1940: uint16 outdata = dstdata;
1941:
1942: while(loop) {
1943: cflag = outdata & 1<<(bits-1) ? 1 : 0;
1944: outdata<<= 1;
1945: outdata |= xflag;
1946: xflag = cflag;
1947: loop--;
1948: }
1949: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1950: PC+= 2;
1951: }
1952:
1953: void cpu_op_1527b(t_ipc *ipc) /* ROXL */ {
1954: /* mask f1f8, bits e150, mnemonic 72, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1955: unsigned int srcdata = ipc->src;
1956: int dstreg = (ipc->opcode >> 0) & 7;
1957: uint16 dstdata = DATAREG(dstreg);
1958: uint8 bits = 16;
1959: uint8 loop = srcdata & 63;
1960: uint8 cflag = CFLAG;
1961: uint8 xflag = XFLAG;
1962: uint16 outdata = dstdata;
1963:
1964: while(loop) {
1965: cflag = outdata & 1<<(bits-1) ? 1 : 0;
1966: outdata<<= 1;
1967: outdata |= xflag;
1968: xflag = cflag;
1969: loop--;
1970: }
1971: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
1972:
1973: XFLAG = xflag;
1974: CFLAG = xflag;
1975: NFLAG = ((sint16)outdata) < 0;
1976: ZFLAG = !outdata;
1977: VFLAG = 0;
1978: PC+= 2;
1979: }
1980:
1981: void cpu_op_1528a(t_ipc *ipc) /* ROXL */ {
1982: /* mask f1f8, bits e190, mnemonic 72, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
1983: unsigned int srcdata = ipc->src;
1984: int dstreg = (ipc->opcode >> 0) & 7;
1985: uint32 dstdata = DATAREG(dstreg);
1986: uint8 bits = 32;
1987: uint8 loop = srcdata & 63;
1988: uint8 cflag = CFLAG;
1989: uint8 xflag = XFLAG;
1990: uint32 outdata = dstdata;
1991:
1992: while(loop) {
1993: cflag = outdata & 1<<(bits-1) ? 1 : 0;
1994: outdata<<= 1;
1995: outdata |= xflag;
1996: xflag = cflag;
1997: loop--;
1998: }
1999: DATAREG(dstreg) = outdata;
2000: PC+= 2;
2001: }
2002:
2003: void cpu_op_1528b(t_ipc *ipc) /* ROXL */ {
2004: /* mask f1f8, bits e190, mnemonic 72, priv 0, endblk 0, imm_notzero -1, used 1 set -1, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2005: unsigned int srcdata = ipc->src;
2006: int dstreg = (ipc->opcode >> 0) & 7;
2007: uint32 dstdata = DATAREG(dstreg);
2008: uint8 bits = 32;
2009: uint8 loop = srcdata & 63;
2010: uint8 cflag = CFLAG;
2011: uint8 xflag = XFLAG;
2012: uint32 outdata = dstdata;
2013:
2014: while(loop) {
2015: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2016: outdata<<= 1;
2017: outdata |= xflag;
2018: xflag = cflag;
2019: loop--;
2020: }
2021: DATAREG(dstreg) = outdata;
2022:
2023: XFLAG = xflag;
2024: CFLAG = xflag;
2025: NFLAG = ((sint32)outdata) < 0;
2026: ZFLAG = !outdata;
2027: VFLAG = 0;
2028: PC+= 2;
2029: }
2030:
2031: void cpu_op_1529a(t_ipc *ipc) /* ROL */ {
2032: /* mask f1f8, bits e118, mnemonic 73, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2033: unsigned int srcdata = ipc->src;
2034: int dstreg = (ipc->opcode >> 0) & 7;
2035: uint8 dstdata = DATAREG(dstreg);
2036: uint8 bits = 8;
2037: uint8 loop = srcdata & 63;
2038: uint8 cflag = 0;
2039: uint8 outdata = dstdata;
2040:
2041: while(loop) {
2042: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2043: outdata<<= 1;
2044: if (cflag)
2045: outdata |= 1;
2046: loop--;
2047: }
2048: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2049: PC+= 2;
2050: }
2051:
2052: void cpu_op_1529b(t_ipc *ipc) /* ROL */ {
2053: /* mask f1f8, bits e118, mnemonic 73, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 1, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2054: unsigned int srcdata = ipc->src;
2055: int dstreg = (ipc->opcode >> 0) & 7;
2056: uint8 dstdata = DATAREG(dstreg);
2057: uint8 bits = 8;
2058: uint8 loop = srcdata & 63;
2059: uint8 cflag = 0;
2060: uint8 outdata = dstdata;
2061:
2062: while(loop) {
2063: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2064: outdata<<= 1;
2065: if (cflag)
2066: outdata |= 1;
2067: loop--;
2068: }
2069: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2070:
2071: CFLAG = cflag;
2072: NFLAG = ((sint8)outdata) < 0;
2073: ZFLAG = !outdata;
2074: VFLAG = 0;
2075: PC+= 2;
2076: }
2077:
2078: void cpu_op_1530a(t_ipc *ipc) /* ROL */ {
2079: /* mask f1f8, bits e158, mnemonic 73, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2080: unsigned int srcdata = ipc->src;
2081: int dstreg = (ipc->opcode >> 0) & 7;
2082: uint16 dstdata = DATAREG(dstreg);
2083: uint8 bits = 16;
2084: uint8 loop = srcdata & 63;
2085: uint8 cflag = 0;
2086: uint16 outdata = dstdata;
2087:
2088: while(loop) {
2089: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2090: outdata<<= 1;
2091: if (cflag)
2092: outdata |= 1;
2093: loop--;
2094: }
2095: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2096: PC+= 2;
2097: }
2098:
2099: void cpu_op_1530b(t_ipc *ipc) /* ROL */ {
2100: /* mask f1f8, bits e158, mnemonic 73, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 2, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2101: unsigned int srcdata = ipc->src;
2102: int dstreg = (ipc->opcode >> 0) & 7;
2103: uint16 dstdata = DATAREG(dstreg);
2104: uint8 bits = 16;
2105: uint8 loop = srcdata & 63;
2106: uint8 cflag = 0;
2107: uint16 outdata = dstdata;
2108:
2109: while(loop) {
2110: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2111: outdata<<= 1;
2112: if (cflag)
2113: outdata |= 1;
2114: loop--;
2115: }
2116: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2117:
2118: CFLAG = cflag;
2119: NFLAG = ((sint16)outdata) < 0;
2120: ZFLAG = !outdata;
2121: VFLAG = 0;
2122: PC+= 2;
2123: }
2124:
2125: void cpu_op_1531a(t_ipc *ipc) /* ROL */ {
2126: /* mask f1f8, bits e198, mnemonic 73, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2127: unsigned int srcdata = ipc->src;
2128: int dstreg = (ipc->opcode >> 0) & 7;
2129: uint32 dstdata = DATAREG(dstreg);
2130: uint8 bits = 32;
2131: uint8 loop = srcdata & 63;
2132: uint8 cflag = 0;
2133: uint32 outdata = dstdata;
2134:
2135: while(loop) {
2136: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2137: outdata<<= 1;
2138: if (cflag)
2139: outdata |= 1;
2140: loop--;
2141: }
2142: DATAREG(dstreg) = outdata;
2143: PC+= 2;
2144: }
2145:
2146: void cpu_op_1531b(t_ipc *ipc) /* ROL */ {
2147: /* mask f1f8, bits e198, mnemonic 73, priv 0, endblk 0, imm_notzero -1, used 0 set -2, size 3, stype 15, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2148: unsigned int srcdata = ipc->src;
2149: int dstreg = (ipc->opcode >> 0) & 7;
2150: uint32 dstdata = DATAREG(dstreg);
2151: uint8 bits = 32;
2152: uint8 loop = srcdata & 63;
2153: uint8 cflag = 0;
2154: uint32 outdata = dstdata;
2155:
2156: while(loop) {
2157: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2158: outdata<<= 1;
2159: if (cflag)
2160: outdata |= 1;
2161: loop--;
2162: }
2163: DATAREG(dstreg) = outdata;
2164:
2165: CFLAG = cflag;
2166: NFLAG = ((sint32)outdata) < 0;
2167: ZFLAG = !outdata;
2168: VFLAG = 0;
2169: PC+= 2;
2170: }
2171:
2172: void cpu_op_1532a(t_ipc *ipc) /* ASL */ {
2173: /* mask fff8, bits e100, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2174: unsigned int srcdata = 8;
2175: int dstreg = (ipc->opcode >> 0) & 7;
2176: uint8 dstdata = DATAREG(dstreg);
2177: uint8 bits = 8;
2178: uint8 count = srcdata & 63;
2179: uint8 outdata = count >= bits ? 0 : (dstdata << count);
2180:
2181: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2182: PC+= 2;
2183: }
2184:
2185: void cpu_op_1532b(t_ipc *ipc) /* ASL */ {
2186: /* mask fff8, bits e100, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2187: unsigned int srcdata = 8;
2188: int dstreg = (ipc->opcode >> 0) & 7;
2189: uint8 dstdata = DATAREG(dstreg);
2190: uint8 bits = 8;
2191: uint8 count = srcdata & 63;
2192: uint8 outdata = count >= bits ? 0 : (dstdata << count);
2193:
2194: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2195:
2196: if (!count)
2197: CFLAG = 0;
2198: else if (count >= bits) {
2199: CFLAG = (count == bits) ? dstdata & 1 : 0;
2200: XFLAG = (count == bits) ? dstdata & 1 : 0;
2201: VFLAG = !dstdata;
2202: } else {
2203: CFLAG = dstdata>>(bits-count) & 1;
2204: XFLAG = dstdata>>(bits-count) & 1;
2205: {
2206: uint8 mask = 0xff << (7-count);
2207: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
2208: }
2209: }
2210: NFLAG = ((sint8)outdata) < 0;
2211: ZFLAG = !outdata;
2212: PC+= 2;
2213: }
2214:
2215: void cpu_op_1533a(t_ipc *ipc) /* ASL */ {
2216: /* mask fff8, bits e140, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2217: unsigned int srcdata = 8;
2218: int dstreg = (ipc->opcode >> 0) & 7;
2219: uint16 dstdata = DATAREG(dstreg);
2220: uint8 bits = 16;
2221: uint8 count = srcdata & 63;
2222: uint16 outdata = count >= bits ? 0 : (dstdata << count);
2223:
2224: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2225: PC+= 2;
2226: }
2227:
2228: void cpu_op_1533b(t_ipc *ipc) /* ASL */ {
2229: /* mask fff8, bits e140, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2230: unsigned int srcdata = 8;
2231: int dstreg = (ipc->opcode >> 0) & 7;
2232: uint16 dstdata = DATAREG(dstreg);
2233: uint8 bits = 16;
2234: uint8 count = srcdata & 63;
2235: uint16 outdata = count >= bits ? 0 : (dstdata << count);
2236:
2237: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2238:
2239: if (!count)
2240: CFLAG = 0;
2241: else if (count >= bits) {
2242: CFLAG = (count == bits) ? dstdata & 1 : 0;
2243: XFLAG = (count == bits) ? dstdata & 1 : 0;
2244: VFLAG = !dstdata;
2245: } else {
2246: CFLAG = dstdata>>(bits-count) & 1;
2247: XFLAG = dstdata>>(bits-count) & 1;
2248: {
2249: uint16 mask = 0xffff << (15-count);
2250: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
2251: }
2252: }
2253: NFLAG = ((sint16)outdata) < 0;
2254: ZFLAG = !outdata;
2255: PC+= 2;
2256: }
2257:
2258: void cpu_op_1534a(t_ipc *ipc) /* ASL */ {
2259: /* mask fff8, bits e180, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2260: unsigned int srcdata = 8;
2261: int dstreg = (ipc->opcode >> 0) & 7;
2262: uint32 dstdata = DATAREG(dstreg);
2263: uint8 bits = 32;
2264: uint8 count = srcdata & 63;
2265: uint32 outdata = count >= bits ? 0 : (dstdata << count);
2266:
2267: DATAREG(dstreg) = outdata;
2268: PC+= 2;
2269: }
2270:
2271: void cpu_op_1534b(t_ipc *ipc) /* ASL */ {
2272: /* mask fff8, bits e180, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2273: unsigned int srcdata = 8;
2274: int dstreg = (ipc->opcode >> 0) & 7;
2275: uint32 dstdata = DATAREG(dstreg);
2276: uint8 bits = 32;
2277: uint8 count = srcdata & 63;
2278: uint32 outdata = count >= bits ? 0 : (dstdata << count);
2279:
2280: DATAREG(dstreg) = outdata;
2281:
2282: if (!count)
2283: CFLAG = 0;
2284: else if (count >= bits) {
2285: CFLAG = (count == bits) ? dstdata & 1 : 0;
2286: XFLAG = (count == bits) ? dstdata & 1 : 0;
2287: VFLAG = !dstdata;
2288: } else {
2289: CFLAG = dstdata>>(bits-count) & 1;
2290: XFLAG = dstdata>>(bits-count) & 1;
2291: {
2292: uint32 mask = 0xffffffff <<(31-count);
2293: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
2294: }
2295: }
2296: NFLAG = ((sint32)outdata) < 0;
2297: ZFLAG = !outdata;
2298: PC+= 2;
2299: }
2300:
2301: void cpu_op_1535a(t_ipc *ipc) /* LSL */ {
2302: /* mask fff8, bits e108, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2303: unsigned int srcdata = 8;
2304: int dstreg = (ipc->opcode >> 0) & 7;
2305: uint8 dstdata = DATAREG(dstreg);
2306: uint8 bits = 8;
2307: uint8 count = srcdata & 63;
2308: uint8 outdata = count >= bits ? 0 : (dstdata << count);
2309:
2310: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2311: PC+= 2;
2312: }
2313:
2314: void cpu_op_1535b(t_ipc *ipc) /* LSL */ {
2315: /* mask fff8, bits e108, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2316: unsigned int srcdata = 8;
2317: int dstreg = (ipc->opcode >> 0) & 7;
2318: uint8 dstdata = DATAREG(dstreg);
2319: uint8 bits = 8;
2320: uint8 count = srcdata & 63;
2321: uint8 outdata = count >= bits ? 0 : (dstdata << count);
2322:
2323: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2324:
2325: if (!count)
2326: CFLAG = 0;
2327: else if (count >= bits) {
2328: CFLAG = (count == bits) ? dstdata & 1 : 0;
2329: XFLAG = (count == bits) ? dstdata & 1 : 0;
2330: } else {
2331: CFLAG = dstdata>>(bits-count) & 1;
2332: XFLAG = dstdata>>(bits-count) & 1;
2333: }
2334: VFLAG = 0;
2335: NFLAG = ((sint8)outdata) < 0;
2336: ZFLAG = !outdata;
2337: PC+= 2;
2338: }
2339:
2340: void cpu_op_1536a(t_ipc *ipc) /* LSL */ {
2341: /* mask fff8, bits e148, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2342: unsigned int srcdata = 8;
2343: int dstreg = (ipc->opcode >> 0) & 7;
2344: uint16 dstdata = DATAREG(dstreg);
2345: uint8 bits = 16;
2346: uint8 count = srcdata & 63;
2347: uint16 outdata = count >= bits ? 0 : (dstdata << count);
2348:
2349: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2350: PC+= 2;
2351: }
2352:
2353: void cpu_op_1536b(t_ipc *ipc) /* LSL */ {
2354: /* mask fff8, bits e148, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2355: unsigned int srcdata = 8;
2356: int dstreg = (ipc->opcode >> 0) & 7;
2357: uint16 dstdata = DATAREG(dstreg);
2358: uint8 bits = 16;
2359: uint8 count = srcdata & 63;
2360: uint16 outdata = count >= bits ? 0 : (dstdata << count);
2361:
2362: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2363:
2364: if (!count)
2365: CFLAG = 0;
2366: else if (count >= bits) {
2367: CFLAG = (count == bits) ? dstdata & 1 : 0;
2368: XFLAG = (count == bits) ? dstdata & 1 : 0;
2369: } else {
2370: CFLAG = dstdata>>(bits-count) & 1;
2371: XFLAG = dstdata>>(bits-count) & 1;
2372: }
2373: VFLAG = 0;
2374: NFLAG = ((sint16)outdata) < 0;
2375: ZFLAG = !outdata;
2376: PC+= 2;
2377: }
2378:
2379: void cpu_op_1537a(t_ipc *ipc) /* LSL */ {
2380: /* mask fff8, bits e188, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2381: unsigned int srcdata = 8;
2382: int dstreg = (ipc->opcode >> 0) & 7;
2383: uint32 dstdata = DATAREG(dstreg);
2384: uint8 bits = 32;
2385: uint8 count = srcdata & 63;
2386: uint32 outdata = count >= bits ? 0 : (dstdata << count);
2387:
2388: DATAREG(dstreg) = outdata;
2389: PC+= 2;
2390: }
2391:
2392: void cpu_op_1537b(t_ipc *ipc) /* LSL */ {
2393: /* mask fff8, bits e188, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2394: unsigned int srcdata = 8;
2395: int dstreg = (ipc->opcode >> 0) & 7;
2396: uint32 dstdata = DATAREG(dstreg);
2397: uint8 bits = 32;
2398: uint8 count = srcdata & 63;
2399: uint32 outdata = count >= bits ? 0 : (dstdata << count);
2400:
2401: DATAREG(dstreg) = outdata;
2402:
2403: if (!count)
2404: CFLAG = 0;
2405: else if (count >= bits) {
2406: CFLAG = (count == bits) ? dstdata & 1 : 0;
2407: XFLAG = (count == bits) ? dstdata & 1 : 0;
2408: } else {
2409: CFLAG = dstdata>>(bits-count) & 1;
2410: XFLAG = dstdata>>(bits-count) & 1;
2411: }
2412: VFLAG = 0;
2413: NFLAG = ((sint32)outdata) < 0;
2414: ZFLAG = !outdata;
2415: PC+= 2;
2416: }
2417:
2418: void cpu_op_1538a(t_ipc *ipc) /* ROXL */ {
2419: /* mask fff8, bits e110, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2420: unsigned int srcdata = 8;
2421: int dstreg = (ipc->opcode >> 0) & 7;
2422: uint8 dstdata = DATAREG(dstreg);
2423: uint8 bits = 8;
2424: uint8 loop = srcdata & 63;
2425: uint8 cflag = CFLAG;
2426: uint8 xflag = XFLAG;
2427: uint8 outdata = dstdata;
2428:
2429: while(loop) {
2430: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2431: outdata<<= 1;
2432: outdata |= xflag;
2433: xflag = cflag;
2434: loop--;
2435: }
2436: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2437: PC+= 2;
2438: }
2439:
2440: void cpu_op_1538b(t_ipc *ipc) /* ROXL */ {
2441: /* mask fff8, bits e110, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2442: unsigned int srcdata = 8;
2443: int dstreg = (ipc->opcode >> 0) & 7;
2444: uint8 dstdata = DATAREG(dstreg);
2445: uint8 bits = 8;
2446: uint8 loop = srcdata & 63;
2447: uint8 cflag = CFLAG;
2448: uint8 xflag = XFLAG;
2449: uint8 outdata = dstdata;
2450:
2451: while(loop) {
2452: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2453: outdata<<= 1;
2454: outdata |= xflag;
2455: xflag = cflag;
2456: loop--;
2457: }
2458: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2459:
2460: XFLAG = xflag;
2461: CFLAG = xflag;
2462: NFLAG = ((sint8)outdata) < 0;
2463: ZFLAG = !outdata;
2464: VFLAG = 0;
2465: PC+= 2;
2466: }
2467:
2468: void cpu_op_1539a(t_ipc *ipc) /* ROXL */ {
2469: /* mask fff8, bits e150, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2470: unsigned int srcdata = 8;
2471: int dstreg = (ipc->opcode >> 0) & 7;
2472: uint16 dstdata = DATAREG(dstreg);
2473: uint8 bits = 16;
2474: uint8 loop = srcdata & 63;
2475: uint8 cflag = CFLAG;
2476: uint8 xflag = XFLAG;
2477: uint16 outdata = dstdata;
2478:
2479: while(loop) {
2480: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2481: outdata<<= 1;
2482: outdata |= xflag;
2483: xflag = cflag;
2484: loop--;
2485: }
2486: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2487: PC+= 2;
2488: }
2489:
2490: void cpu_op_1539b(t_ipc *ipc) /* ROXL */ {
2491: /* mask fff8, bits e150, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2492: unsigned int srcdata = 8;
2493: int dstreg = (ipc->opcode >> 0) & 7;
2494: uint16 dstdata = DATAREG(dstreg);
2495: uint8 bits = 16;
2496: uint8 loop = srcdata & 63;
2497: uint8 cflag = CFLAG;
2498: uint8 xflag = XFLAG;
2499: uint16 outdata = dstdata;
2500:
2501: while(loop) {
2502: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2503: outdata<<= 1;
2504: outdata |= xflag;
2505: xflag = cflag;
2506: loop--;
2507: }
2508: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2509:
2510: XFLAG = xflag;
2511: CFLAG = xflag;
2512: NFLAG = ((sint16)outdata) < 0;
2513: ZFLAG = !outdata;
2514: VFLAG = 0;
2515: PC+= 2;
2516: }
2517:
2518: void cpu_op_1540a(t_ipc *ipc) /* ROXL */ {
2519: /* mask fff8, bits e190, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2520: unsigned int srcdata = 8;
2521: int dstreg = (ipc->opcode >> 0) & 7;
2522: uint32 dstdata = DATAREG(dstreg);
2523: uint8 bits = 32;
2524: uint8 loop = srcdata & 63;
2525: uint8 cflag = CFLAG;
2526: uint8 xflag = XFLAG;
2527: uint32 outdata = dstdata;
2528:
2529: while(loop) {
2530: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2531: outdata<<= 1;
2532: outdata |= xflag;
2533: xflag = cflag;
2534: loop--;
2535: }
2536: DATAREG(dstreg) = outdata;
2537: PC+= 2;
2538: }
2539:
2540: void cpu_op_1540b(t_ipc *ipc) /* ROXL */ {
2541: /* mask fff8, bits e190, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2542: unsigned int srcdata = 8;
2543: int dstreg = (ipc->opcode >> 0) & 7;
2544: uint32 dstdata = DATAREG(dstreg);
2545: uint8 bits = 32;
2546: uint8 loop = srcdata & 63;
2547: uint8 cflag = CFLAG;
2548: uint8 xflag = XFLAG;
2549: uint32 outdata = dstdata;
2550:
2551: while(loop) {
2552: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2553: outdata<<= 1;
2554: outdata |= xflag;
2555: xflag = cflag;
2556: loop--;
2557: }
2558: DATAREG(dstreg) = outdata;
2559:
2560: XFLAG = xflag;
2561: CFLAG = xflag;
2562: NFLAG = ((sint32)outdata) < 0;
2563: ZFLAG = !outdata;
2564: VFLAG = 0;
2565: PC+= 2;
2566: }
2567:
2568: void cpu_op_1541a(t_ipc *ipc) /* ROL */ {
2569: /* mask fff8, bits e118, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2570: unsigned int srcdata = 8;
2571: int dstreg = (ipc->opcode >> 0) & 7;
2572: uint8 dstdata = DATAREG(dstreg);
2573: uint8 bits = 8;
2574: uint8 loop = srcdata & 63;
2575: uint8 cflag = 0;
2576: uint8 outdata = dstdata;
2577:
2578: while(loop) {
2579: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2580: outdata<<= 1;
2581: if (cflag)
2582: outdata |= 1;
2583: loop--;
2584: }
2585: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2586: PC+= 2;
2587: }
2588:
2589: void cpu_op_1541b(t_ipc *ipc) /* ROL */ {
2590: /* mask fff8, bits e118, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 1, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2591: unsigned int srcdata = 8;
2592: int dstreg = (ipc->opcode >> 0) & 7;
2593: uint8 dstdata = DATAREG(dstreg);
2594: uint8 bits = 8;
2595: uint8 loop = srcdata & 63;
2596: uint8 cflag = 0;
2597: uint8 outdata = dstdata;
2598:
2599: while(loop) {
2600: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2601: outdata<<= 1;
2602: if (cflag)
2603: outdata |= 1;
2604: loop--;
2605: }
2606: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2607:
2608: CFLAG = cflag;
2609: NFLAG = ((sint8)outdata) < 0;
2610: ZFLAG = !outdata;
2611: VFLAG = 0;
2612: PC+= 2;
2613: }
2614:
2615: void cpu_op_1542a(t_ipc *ipc) /* ROL */ {
2616: /* mask fff8, bits e158, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2617: unsigned int srcdata = 8;
2618: int dstreg = (ipc->opcode >> 0) & 7;
2619: uint16 dstdata = DATAREG(dstreg);
2620: uint8 bits = 16;
2621: uint8 loop = srcdata & 63;
2622: uint8 cflag = 0;
2623: uint16 outdata = dstdata;
2624:
2625: while(loop) {
2626: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2627: outdata<<= 1;
2628: if (cflag)
2629: outdata |= 1;
2630: loop--;
2631: }
2632: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2633: PC+= 2;
2634: }
2635:
2636: void cpu_op_1542b(t_ipc *ipc) /* ROL */ {
2637: /* mask fff8, bits e158, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2638: unsigned int srcdata = 8;
2639: int dstreg = (ipc->opcode >> 0) & 7;
2640: uint16 dstdata = DATAREG(dstreg);
2641: uint8 bits = 16;
2642: uint8 loop = srcdata & 63;
2643: uint8 cflag = 0;
2644: uint16 outdata = dstdata;
2645:
2646: while(loop) {
2647: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2648: outdata<<= 1;
2649: if (cflag)
2650: outdata |= 1;
2651: loop--;
2652: }
2653: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2654:
2655: CFLAG = cflag;
2656: NFLAG = ((sint16)outdata) < 0;
2657: ZFLAG = !outdata;
2658: VFLAG = 0;
2659: PC+= 2;
2660: }
2661:
2662: void cpu_op_1543a(t_ipc *ipc) /* ROL */ {
2663: /* mask fff8, bits e198, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2664: unsigned int srcdata = 8;
2665: int dstreg = (ipc->opcode >> 0) & 7;
2666: uint32 dstdata = DATAREG(dstreg);
2667: uint8 bits = 32;
2668: uint8 loop = srcdata & 63;
2669: uint8 cflag = 0;
2670: uint32 outdata = dstdata;
2671:
2672: while(loop) {
2673: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2674: outdata<<= 1;
2675: if (cflag)
2676: outdata |= 1;
2677: loop--;
2678: }
2679: DATAREG(dstreg) = outdata;
2680: PC+= 2;
2681: }
2682:
2683: void cpu_op_1543b(t_ipc *ipc) /* ROL */ {
2684: /* mask fff8, bits e198, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 3, stype 14, dtype 0, sbitpos 0, dbitpos 0, immvalue 8 */
2685: unsigned int srcdata = 8;
2686: int dstreg = (ipc->opcode >> 0) & 7;
2687: uint32 dstdata = DATAREG(dstreg);
2688: uint8 bits = 32;
2689: uint8 loop = srcdata & 63;
2690: uint8 cflag = 0;
2691: uint32 outdata = dstdata;
2692:
2693: while(loop) {
2694: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2695: outdata<<= 1;
2696: if (cflag)
2697: outdata |= 1;
2698: loop--;
2699: }
2700: DATAREG(dstreg) = outdata;
2701:
2702: CFLAG = cflag;
2703: NFLAG = ((sint32)outdata) < 0;
2704: ZFLAG = !outdata;
2705: VFLAG = 0;
2706: PC+= 2;
2707: }
2708:
2709: void cpu_op_1544a(t_ipc *ipc) /* ASL */ {
2710: /* mask f1f8, bits e120, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2711: int srcreg = (ipc->opcode >> 9) & 7;
2712: uint8 srcdata = DATAREG(srcreg);
2713: int dstreg = (ipc->opcode >> 0) & 7;
2714: uint8 dstdata = DATAREG(dstreg);
2715: uint8 bits = 8;
2716: uint8 count = srcdata & 63;
2717: uint8 outdata = count >= bits ? 0 : (dstdata << count);
2718:
2719: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2720: PC+= 2;
2721: }
2722:
2723: void cpu_op_1544b(t_ipc *ipc) /* ASL */ {
2724: /* mask f1f8, bits e120, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2725: int srcreg = (ipc->opcode >> 9) & 7;
2726: uint8 srcdata = DATAREG(srcreg);
2727: int dstreg = (ipc->opcode >> 0) & 7;
2728: uint8 dstdata = DATAREG(dstreg);
2729: uint8 bits = 8;
2730: uint8 count = srcdata & 63;
2731: uint8 outdata = count >= bits ? 0 : (dstdata << count);
2732:
2733: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2734:
2735: if (!count)
2736: CFLAG = 0;
2737: else if (count >= bits) {
2738: CFLAG = (count == bits) ? dstdata & 1 : 0;
2739: XFLAG = (count == bits) ? dstdata & 1 : 0;
2740: VFLAG = !dstdata;
2741: } else {
2742: CFLAG = dstdata>>(bits-count) & 1;
2743: XFLAG = dstdata>>(bits-count) & 1;
2744: {
2745: uint8 mask = 0xff << (7-count);
2746: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
2747: }
2748: }
2749: NFLAG = ((sint8)outdata) < 0;
2750: ZFLAG = !outdata;
2751: PC+= 2;
2752: }
2753:
2754: void cpu_op_1545a(t_ipc *ipc) /* ASL */ {
2755: /* mask f1f8, bits e160, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2756: int srcreg = (ipc->opcode >> 9) & 7;
2757: uint16 srcdata = DATAREG(srcreg);
2758: int dstreg = (ipc->opcode >> 0) & 7;
2759: uint16 dstdata = DATAREG(dstreg);
2760: uint8 bits = 16;
2761: uint8 count = srcdata & 63;
2762: uint16 outdata = count >= bits ? 0 : (dstdata << count);
2763:
2764: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2765: PC+= 2;
2766: }
2767:
2768: void cpu_op_1545b(t_ipc *ipc) /* ASL */ {
2769: /* mask f1f8, bits e160, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2770: int srcreg = (ipc->opcode >> 9) & 7;
2771: uint16 srcdata = DATAREG(srcreg);
2772: int dstreg = (ipc->opcode >> 0) & 7;
2773: uint16 dstdata = DATAREG(dstreg);
2774: uint8 bits = 16;
2775: uint8 count = srcdata & 63;
2776: uint16 outdata = count >= bits ? 0 : (dstdata << count);
2777:
2778: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2779:
2780: if (!count)
2781: CFLAG = 0;
2782: else if (count >= bits) {
2783: CFLAG = (count == bits) ? dstdata & 1 : 0;
2784: XFLAG = (count == bits) ? dstdata & 1 : 0;
2785: VFLAG = !dstdata;
2786: } else {
2787: CFLAG = dstdata>>(bits-count) & 1;
2788: XFLAG = dstdata>>(bits-count) & 1;
2789: {
2790: uint16 mask = 0xffff << (15-count);
2791: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
2792: }
2793: }
2794: NFLAG = ((sint16)outdata) < 0;
2795: ZFLAG = !outdata;
2796: PC+= 2;
2797: }
2798:
2799: void cpu_op_1546a(t_ipc *ipc) /* ASL */ {
2800: /* mask f1f8, bits e1a0, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2801: int srcreg = (ipc->opcode >> 9) & 7;
2802: uint32 srcdata = DATAREG(srcreg);
2803: int dstreg = (ipc->opcode >> 0) & 7;
2804: uint32 dstdata = DATAREG(dstreg);
2805: uint8 bits = 32;
2806: uint8 count = srcdata & 63;
2807: uint32 outdata = count >= bits ? 0 : (dstdata << count);
2808:
2809: DATAREG(dstreg) = outdata;
2810: PC+= 2;
2811: }
2812:
2813: void cpu_op_1546b(t_ipc *ipc) /* ASL */ {
2814: /* mask f1f8, bits e1a0, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2815: int srcreg = (ipc->opcode >> 9) & 7;
2816: uint32 srcdata = DATAREG(srcreg);
2817: int dstreg = (ipc->opcode >> 0) & 7;
2818: uint32 dstdata = DATAREG(dstreg);
2819: uint8 bits = 32;
2820: uint8 count = srcdata & 63;
2821: uint32 outdata = count >= bits ? 0 : (dstdata << count);
2822:
2823: DATAREG(dstreg) = outdata;
2824:
2825: if (!count)
2826: CFLAG = 0;
2827: else if (count >= bits) {
2828: CFLAG = (count == bits) ? dstdata & 1 : 0;
2829: XFLAG = (count == bits) ? dstdata & 1 : 0;
2830: VFLAG = !dstdata;
2831: } else {
2832: CFLAG = dstdata>>(bits-count) & 1;
2833: XFLAG = dstdata>>(bits-count) & 1;
2834: {
2835: uint32 mask = 0xffffffff <<(31-count);
2836: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
2837: }
2838: }
2839: NFLAG = ((sint32)outdata) < 0;
2840: ZFLAG = !outdata;
2841: PC+= 2;
2842: }
2843:
2844: void cpu_op_1547a(t_ipc *ipc) /* LSL */ {
2845: /* mask f1f8, bits e128, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2846: int srcreg = (ipc->opcode >> 9) & 7;
2847: uint8 srcdata = DATAREG(srcreg);
2848: int dstreg = (ipc->opcode >> 0) & 7;
2849: uint8 dstdata = DATAREG(dstreg);
2850: uint8 bits = 8;
2851: uint8 count = srcdata & 63;
2852: uint8 outdata = count >= bits ? 0 : (dstdata << count);
2853:
2854: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2855: PC+= 2;
2856: }
2857:
2858: void cpu_op_1547b(t_ipc *ipc) /* LSL */ {
2859: /* mask f1f8, bits e128, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2860: int srcreg = (ipc->opcode >> 9) & 7;
2861: uint8 srcdata = DATAREG(srcreg);
2862: int dstreg = (ipc->opcode >> 0) & 7;
2863: uint8 dstdata = DATAREG(dstreg);
2864: uint8 bits = 8;
2865: uint8 count = srcdata & 63;
2866: uint8 outdata = count >= bits ? 0 : (dstdata << count);
2867:
2868: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2869:
2870: if (!count)
2871: CFLAG = 0;
2872: else if (count >= bits) {
2873: CFLAG = (count == bits) ? dstdata & 1 : 0;
2874: XFLAG = (count == bits) ? dstdata & 1 : 0;
2875: } else {
2876: CFLAG = dstdata>>(bits-count) & 1;
2877: XFLAG = dstdata>>(bits-count) & 1;
2878: }
2879: VFLAG = 0;
2880: NFLAG = ((sint8)outdata) < 0;
2881: ZFLAG = !outdata;
2882: PC+= 2;
2883: }
2884:
2885: void cpu_op_1548a(t_ipc *ipc) /* LSL */ {
2886: /* mask f1f8, bits e168, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2887: int srcreg = (ipc->opcode >> 9) & 7;
2888: uint16 srcdata = DATAREG(srcreg);
2889: int dstreg = (ipc->opcode >> 0) & 7;
2890: uint16 dstdata = DATAREG(dstreg);
2891: uint8 bits = 16;
2892: uint8 count = srcdata & 63;
2893: uint16 outdata = count >= bits ? 0 : (dstdata << count);
2894:
2895: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2896: PC+= 2;
2897: }
2898:
2899: void cpu_op_1548b(t_ipc *ipc) /* LSL */ {
2900: /* mask f1f8, bits e168, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2901: int srcreg = (ipc->opcode >> 9) & 7;
2902: uint16 srcdata = DATAREG(srcreg);
2903: int dstreg = (ipc->opcode >> 0) & 7;
2904: uint16 dstdata = DATAREG(dstreg);
2905: uint8 bits = 16;
2906: uint8 count = srcdata & 63;
2907: uint16 outdata = count >= bits ? 0 : (dstdata << count);
2908:
2909: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2910:
2911: if (!count)
2912: CFLAG = 0;
2913: else if (count >= bits) {
2914: CFLAG = (count == bits) ? dstdata & 1 : 0;
2915: XFLAG = (count == bits) ? dstdata & 1 : 0;
2916: } else {
2917: CFLAG = dstdata>>(bits-count) & 1;
2918: XFLAG = dstdata>>(bits-count) & 1;
2919: }
2920: VFLAG = 0;
2921: NFLAG = ((sint16)outdata) < 0;
2922: ZFLAG = !outdata;
2923: PC+= 2;
2924: }
2925:
2926: void cpu_op_1549a(t_ipc *ipc) /* LSL */ {
2927: /* mask f1f8, bits e1a8, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2928: int srcreg = (ipc->opcode >> 9) & 7;
2929: uint32 srcdata = DATAREG(srcreg);
2930: int dstreg = (ipc->opcode >> 0) & 7;
2931: uint32 dstdata = DATAREG(dstreg);
2932: uint8 bits = 32;
2933: uint8 count = srcdata & 63;
2934: uint32 outdata = count >= bits ? 0 : (dstdata << count);
2935:
2936: DATAREG(dstreg) = outdata;
2937: PC+= 2;
2938: }
2939:
2940: void cpu_op_1549b(t_ipc *ipc) /* LSL */ {
2941: /* mask f1f8, bits e1a8, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2942: int srcreg = (ipc->opcode >> 9) & 7;
2943: uint32 srcdata = DATAREG(srcreg);
2944: int dstreg = (ipc->opcode >> 0) & 7;
2945: uint32 dstdata = DATAREG(dstreg);
2946: uint8 bits = 32;
2947: uint8 count = srcdata & 63;
2948: uint32 outdata = count >= bits ? 0 : (dstdata << count);
2949:
2950: DATAREG(dstreg) = outdata;
2951:
2952: if (!count)
2953: CFLAG = 0;
2954: else if (count >= bits) {
2955: CFLAG = (count == bits) ? dstdata & 1 : 0;
2956: XFLAG = (count == bits) ? dstdata & 1 : 0;
2957: } else {
2958: CFLAG = dstdata>>(bits-count) & 1;
2959: XFLAG = dstdata>>(bits-count) & 1;
2960: }
2961: VFLAG = 0;
2962: NFLAG = ((sint32)outdata) < 0;
2963: ZFLAG = !outdata;
2964: PC+= 2;
2965: }
2966:
2967: void cpu_op_1550a(t_ipc *ipc) /* ROXL */ {
2968: /* mask f1f8, bits e130, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2969: int srcreg = (ipc->opcode >> 9) & 7;
2970: uint8 srcdata = DATAREG(srcreg);
2971: int dstreg = (ipc->opcode >> 0) & 7;
2972: uint8 dstdata = DATAREG(dstreg);
2973: uint8 bits = 8;
2974: uint8 loop = srcdata & 63;
2975: uint8 cflag = CFLAG;
2976: uint8 xflag = XFLAG;
2977: uint8 outdata = dstdata;
2978:
2979: while(loop) {
2980: cflag = outdata & 1<<(bits-1) ? 1 : 0;
2981: outdata<<= 1;
2982: outdata |= xflag;
2983: xflag = cflag;
2984: loop--;
2985: }
2986: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2987: PC+= 2;
2988: }
2989:
2990: void cpu_op_1550b(t_ipc *ipc) /* ROXL */ {
2991: /* mask f1f8, bits e130, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
2992: int srcreg = (ipc->opcode >> 9) & 7;
2993: uint8 srcdata = DATAREG(srcreg);
2994: int dstreg = (ipc->opcode >> 0) & 7;
2995: uint8 dstdata = DATAREG(dstreg);
2996: uint8 bits = 8;
2997: uint8 loop = srcdata & 63;
2998: uint8 cflag = CFLAG;
2999: uint8 xflag = XFLAG;
3000: uint8 outdata = dstdata;
3001:
3002: while(loop) {
3003: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3004: outdata<<= 1;
3005: outdata |= xflag;
3006: xflag = cflag;
3007: loop--;
3008: }
3009: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
3010:
3011: XFLAG = xflag;
3012: CFLAG = xflag;
3013: NFLAG = ((sint8)outdata) < 0;
3014: ZFLAG = !outdata;
3015: VFLAG = 0;
3016: PC+= 2;
3017: }
3018:
3019: void cpu_op_1551a(t_ipc *ipc) /* ROXL */ {
3020: /* mask f1f8, bits e170, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3021: int srcreg = (ipc->opcode >> 9) & 7;
3022: uint16 srcdata = DATAREG(srcreg);
3023: int dstreg = (ipc->opcode >> 0) & 7;
3024: uint16 dstdata = DATAREG(dstreg);
3025: uint8 bits = 16;
3026: uint8 loop = srcdata & 63;
3027: uint8 cflag = CFLAG;
3028: uint8 xflag = XFLAG;
3029: uint16 outdata = dstdata;
3030:
3031: while(loop) {
3032: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3033: outdata<<= 1;
3034: outdata |= xflag;
3035: xflag = cflag;
3036: loop--;
3037: }
3038: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
3039: PC+= 2;
3040: }
3041:
3042: void cpu_op_1551b(t_ipc *ipc) /* ROXL */ {
3043: /* mask f1f8, bits e170, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3044: int srcreg = (ipc->opcode >> 9) & 7;
3045: uint16 srcdata = DATAREG(srcreg);
3046: int dstreg = (ipc->opcode >> 0) & 7;
3047: uint16 dstdata = DATAREG(dstreg);
3048: uint8 bits = 16;
3049: uint8 loop = srcdata & 63;
3050: uint8 cflag = CFLAG;
3051: uint8 xflag = XFLAG;
3052: uint16 outdata = dstdata;
3053:
3054: while(loop) {
3055: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3056: outdata<<= 1;
3057: outdata |= xflag;
3058: xflag = cflag;
3059: loop--;
3060: }
3061: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
3062:
3063: XFLAG = xflag;
3064: CFLAG = xflag;
3065: NFLAG = ((sint16)outdata) < 0;
3066: ZFLAG = !outdata;
3067: VFLAG = 0;
3068: PC+= 2;
3069: }
3070:
3071: void cpu_op_1552a(t_ipc *ipc) /* ROXL */ {
3072: /* mask f1f8, bits e1b0, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3073: int srcreg = (ipc->opcode >> 9) & 7;
3074: uint32 srcdata = DATAREG(srcreg);
3075: int dstreg = (ipc->opcode >> 0) & 7;
3076: uint32 dstdata = DATAREG(dstreg);
3077: uint8 bits = 32;
3078: uint8 loop = srcdata & 63;
3079: uint8 cflag = CFLAG;
3080: uint8 xflag = XFLAG;
3081: uint32 outdata = dstdata;
3082:
3083: while(loop) {
3084: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3085: outdata<<= 1;
3086: outdata |= xflag;
3087: xflag = cflag;
3088: loop--;
3089: }
3090: DATAREG(dstreg) = outdata;
3091: PC+= 2;
3092: }
3093:
3094: void cpu_op_1552b(t_ipc *ipc) /* ROXL */ {
3095: /* mask f1f8, bits e1b0, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3096: int srcreg = (ipc->opcode >> 9) & 7;
3097: uint32 srcdata = DATAREG(srcreg);
3098: int dstreg = (ipc->opcode >> 0) & 7;
3099: uint32 dstdata = DATAREG(dstreg);
3100: uint8 bits = 32;
3101: uint8 loop = srcdata & 63;
3102: uint8 cflag = CFLAG;
3103: uint8 xflag = XFLAG;
3104: uint32 outdata = dstdata;
3105:
3106: while(loop) {
3107: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3108: outdata<<= 1;
3109: outdata |= xflag;
3110: xflag = cflag;
3111: loop--;
3112: }
3113: DATAREG(dstreg) = outdata;
3114:
3115: XFLAG = xflag;
3116: CFLAG = xflag;
3117: NFLAG = ((sint32)outdata) < 0;
3118: ZFLAG = !outdata;
3119: VFLAG = 0;
3120: PC+= 2;
3121: }
3122:
3123: void cpu_op_1553a(t_ipc *ipc) /* ROL */ {
3124: /* mask f1f8, bits e138, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3125: int srcreg = (ipc->opcode >> 9) & 7;
3126: uint8 srcdata = DATAREG(srcreg);
3127: int dstreg = (ipc->opcode >> 0) & 7;
3128: uint8 dstdata = DATAREG(dstreg);
3129: uint8 bits = 8;
3130: uint8 loop = srcdata & 63;
3131: uint8 cflag = 0;
3132: uint8 outdata = dstdata;
3133:
3134: while(loop) {
3135: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3136: outdata<<= 1;
3137: if (cflag)
3138: outdata |= 1;
3139: loop--;
3140: }
3141: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
3142: PC+= 2;
3143: }
3144:
3145: void cpu_op_1553b(t_ipc *ipc) /* ROL */ {
3146: /* mask f1f8, bits e138, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 1, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3147: int srcreg = (ipc->opcode >> 9) & 7;
3148: uint8 srcdata = DATAREG(srcreg);
3149: int dstreg = (ipc->opcode >> 0) & 7;
3150: uint8 dstdata = DATAREG(dstreg);
3151: uint8 bits = 8;
3152: uint8 loop = srcdata & 63;
3153: uint8 cflag = 0;
3154: uint8 outdata = dstdata;
3155:
3156: while(loop) {
3157: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3158: outdata<<= 1;
3159: if (cflag)
3160: outdata |= 1;
3161: loop--;
3162: }
3163: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
3164:
3165: CFLAG = cflag;
3166: NFLAG = ((sint8)outdata) < 0;
3167: ZFLAG = !outdata;
3168: VFLAG = 0;
3169: PC+= 2;
3170: }
3171:
3172: void cpu_op_1554a(t_ipc *ipc) /* ROL */ {
3173: /* mask f1f8, bits e178, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3174: int srcreg = (ipc->opcode >> 9) & 7;
3175: uint16 srcdata = DATAREG(srcreg);
3176: int dstreg = (ipc->opcode >> 0) & 7;
3177: uint16 dstdata = DATAREG(dstreg);
3178: uint8 bits = 16;
3179: uint8 loop = srcdata & 63;
3180: uint8 cflag = 0;
3181: uint16 outdata = dstdata;
3182:
3183: while(loop) {
3184: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3185: outdata<<= 1;
3186: if (cflag)
3187: outdata |= 1;
3188: loop--;
3189: }
3190: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
3191: PC+= 2;
3192: }
3193:
3194: void cpu_op_1554b(t_ipc *ipc) /* ROL */ {
3195: /* mask f1f8, bits e178, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3196: int srcreg = (ipc->opcode >> 9) & 7;
3197: uint16 srcdata = DATAREG(srcreg);
3198: int dstreg = (ipc->opcode >> 0) & 7;
3199: uint16 dstdata = DATAREG(dstreg);
3200: uint8 bits = 16;
3201: uint8 loop = srcdata & 63;
3202: uint8 cflag = 0;
3203: uint16 outdata = dstdata;
3204:
3205: while(loop) {
3206: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3207: outdata<<= 1;
3208: if (cflag)
3209: outdata |= 1;
3210: loop--;
3211: }
3212: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
3213:
3214: CFLAG = cflag;
3215: NFLAG = ((sint16)outdata) < 0;
3216: ZFLAG = !outdata;
3217: VFLAG = 0;
3218: PC+= 2;
3219: }
3220:
3221: void cpu_op_1555a(t_ipc *ipc) /* ROL */ {
3222: /* mask f1f8, bits e1b8, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3223: int srcreg = (ipc->opcode >> 9) & 7;
3224: uint32 srcdata = DATAREG(srcreg);
3225: int dstreg = (ipc->opcode >> 0) & 7;
3226: uint32 dstdata = DATAREG(dstreg);
3227: uint8 bits = 32;
3228: uint8 loop = srcdata & 63;
3229: uint8 cflag = 0;
3230: uint32 outdata = dstdata;
3231:
3232: while(loop) {
3233: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3234: outdata<<= 1;
3235: if (cflag)
3236: outdata |= 1;
3237: loop--;
3238: }
3239: DATAREG(dstreg) = outdata;
3240: PC+= 2;
3241: }
3242:
3243: void cpu_op_1555b(t_ipc *ipc) /* ROL */ {
3244: /* mask f1f8, bits e1b8, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 3, stype 0, dtype 0, sbitpos 9, dbitpos 0, immvalue 0 */
3245: int srcreg = (ipc->opcode >> 9) & 7;
3246: uint32 srcdata = DATAREG(srcreg);
3247: int dstreg = (ipc->opcode >> 0) & 7;
3248: uint32 dstdata = DATAREG(dstreg);
3249: uint8 bits = 32;
3250: uint8 loop = srcdata & 63;
3251: uint8 cflag = 0;
3252: uint32 outdata = dstdata;
3253:
3254: while(loop) {
3255: cflag = outdata & 1<<(bits-1) ? 1 : 0;
3256: outdata<<= 1;
3257: if (cflag)
3258: outdata |= 1;
3259: loop--;
3260: }
3261: DATAREG(dstreg) = outdata;
3262:
3263: CFLAG = cflag;
3264: NFLAG = ((sint32)outdata) < 0;
3265: ZFLAG = !outdata;
3266: VFLAG = 0;
3267: PC+= 2;
3268: }
3269:
3270: void cpu_op_1556a(t_ipc *ipc) /* ASR */ {
3271: /* mask fff8, bits e0d0, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
3272: unsigned int srcdata = 1;
3273: int dstreg = (ipc->opcode >> 0) & 7;
3274: uint32 dstaddr = ADDRREG(dstreg);
3275: uint16 dstdata = fetchword(dstaddr);
3276: uint8 bits = 16;
3277: uint8 count = srcdata & 63;
3278: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3279:
3280: storeword(dstaddr, outdata);
3281: PC+= 2;
3282: }
3283:
3284: void cpu_op_1556b(t_ipc *ipc) /* ASR */ {
3285: /* mask fff8, bits e0d0, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
3286: unsigned int srcdata = 1;
3287: int dstreg = (ipc->opcode >> 0) & 7;
3288: uint32 dstaddr = ADDRREG(dstreg);
3289: uint16 dstdata = fetchword(dstaddr);
3290: uint8 bits = 16;
3291: uint8 count = srcdata & 63;
3292: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3293:
3294: storeword(dstaddr, outdata);
3295:
3296: if (!srcdata)
3297: CFLAG = 0;
3298: else if (srcdata >= bits) {
3299: CFLAG = dstdata>>(bits-1);
3300: XFLAG = dstdata>>(bits-1);
3301: } else {
3302: CFLAG = dstdata>>(count-1) & 1;
3303: XFLAG = dstdata>>(count-1) & 1;
3304: }
3305: VFLAG = 0;
3306: NFLAG = ((sint16)outdata) < 0;
3307: ZFLAG = !outdata;
3308: PC+= 2;
3309: }
3310:
3311: void cpu_op_1557a(t_ipc *ipc) /* ASR */ {
3312: /* mask fff8, bits e0d8, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
3313: unsigned int srcdata = 1;
3314: int dstreg = (ipc->opcode >> 0) & 7;
3315: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
3316: uint16 dstdata = fetchword(dstaddr);
3317: uint8 bits = 16;
3318: uint8 count = srcdata & 63;
3319: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3320:
3321: storeword(dstaddr, outdata);
3322: PC+= 2;
3323: }
3324:
3325: void cpu_op_1557b(t_ipc *ipc) /* ASR */ {
3326: /* mask fff8, bits e0d8, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
3327: unsigned int srcdata = 1;
3328: int dstreg = (ipc->opcode >> 0) & 7;
3329: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
3330: uint16 dstdata = fetchword(dstaddr);
3331: uint8 bits = 16;
3332: uint8 count = srcdata & 63;
3333: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3334:
3335: storeword(dstaddr, outdata);
3336:
3337: if (!srcdata)
3338: CFLAG = 0;
3339: else if (srcdata >= bits) {
3340: CFLAG = dstdata>>(bits-1);
3341: XFLAG = dstdata>>(bits-1);
3342: } else {
3343: CFLAG = dstdata>>(count-1) & 1;
3344: XFLAG = dstdata>>(count-1) & 1;
3345: }
3346: VFLAG = 0;
3347: NFLAG = ((sint16)outdata) < 0;
3348: ZFLAG = !outdata;
3349: PC+= 2;
3350: }
3351:
3352: void cpu_op_1558a(t_ipc *ipc) /* ASR */ {
3353: /* mask fff8, bits e0e0, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
3354: unsigned int srcdata = 1;
3355: int dstreg = (ipc->opcode >> 0) & 7;
3356: uint32 dstaddr = ADDRREG(dstreg)-=2;
3357: uint16 dstdata = fetchword(dstaddr);
3358: uint8 bits = 16;
3359: uint8 count = srcdata & 63;
3360: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3361:
3362: storeword(dstaddr, outdata);
3363: PC+= 2;
3364: }
3365:
3366: void cpu_op_1558b(t_ipc *ipc) /* ASR */ {
3367: /* mask fff8, bits e0e0, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
3368: unsigned int srcdata = 1;
3369: int dstreg = (ipc->opcode >> 0) & 7;
3370: uint32 dstaddr = ADDRREG(dstreg)-=2;
3371: uint16 dstdata = fetchword(dstaddr);
3372: uint8 bits = 16;
3373: uint8 count = srcdata & 63;
3374: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3375:
3376: storeword(dstaddr, outdata);
3377:
3378: if (!srcdata)
3379: CFLAG = 0;
3380: else if (srcdata >= bits) {
3381: CFLAG = dstdata>>(bits-1);
3382: XFLAG = dstdata>>(bits-1);
3383: } else {
3384: CFLAG = dstdata>>(count-1) & 1;
3385: XFLAG = dstdata>>(count-1) & 1;
3386: }
3387: VFLAG = 0;
3388: NFLAG = ((sint16)outdata) < 0;
3389: ZFLAG = !outdata;
3390: PC+= 2;
3391: }
3392:
3393: void cpu_op_1559a(t_ipc *ipc) /* ASR */ {
3394: /* mask fff8, bits e0e8, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
3395: unsigned int srcdata = 1;
3396: int dstreg = (ipc->opcode >> 0) & 7;
3397: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
3398: uint16 dstdata = fetchword(dstaddr);
3399: uint8 bits = 16;
3400: uint8 count = srcdata & 63;
3401: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3402:
3403: storeword(dstaddr, outdata);
3404: PC+= 4;
3405: }
3406:
3407: void cpu_op_1559b(t_ipc *ipc) /* ASR */ {
3408: /* mask fff8, bits e0e8, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
3409: unsigned int srcdata = 1;
3410: int dstreg = (ipc->opcode >> 0) & 7;
3411: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
3412: uint16 dstdata = fetchword(dstaddr);
3413: uint8 bits = 16;
3414: uint8 count = srcdata & 63;
3415: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3416:
3417: storeword(dstaddr, outdata);
3418:
3419: if (!srcdata)
3420: CFLAG = 0;
3421: else if (srcdata >= bits) {
3422: CFLAG = dstdata>>(bits-1);
3423: XFLAG = dstdata>>(bits-1);
3424: } else {
3425: CFLAG = dstdata>>(count-1) & 1;
3426: XFLAG = dstdata>>(count-1) & 1;
3427: }
3428: VFLAG = 0;
3429: NFLAG = ((sint16)outdata) < 0;
3430: ZFLAG = !outdata;
3431: PC+= 4;
3432: }
3433:
3434: void cpu_op_1560a(t_ipc *ipc) /* ASR */ {
3435: /* mask fff8, bits e0f0, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
3436: unsigned int srcdata = 1;
3437: int dstreg = (ipc->opcode >> 0) & 7;
3438: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
3439: uint16 dstdata = fetchword(dstaddr);
3440: uint8 bits = 16;
3441: uint8 count = srcdata & 63;
3442: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3443:
3444: storeword(dstaddr, outdata);
3445: PC+= 4;
3446: }
3447:
3448: void cpu_op_1560b(t_ipc *ipc) /* ASR */ {
3449: /* mask fff8, bits e0f0, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
3450: unsigned int srcdata = 1;
3451: int dstreg = (ipc->opcode >> 0) & 7;
3452: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
3453: uint16 dstdata = fetchword(dstaddr);
3454: uint8 bits = 16;
3455: uint8 count = srcdata & 63;
3456: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3457:
3458: storeword(dstaddr, outdata);
3459:
3460: if (!srcdata)
3461: CFLAG = 0;
3462: else if (srcdata >= bits) {
3463: CFLAG = dstdata>>(bits-1);
3464: XFLAG = dstdata>>(bits-1);
3465: } else {
3466: CFLAG = dstdata>>(count-1) & 1;
3467: XFLAG = dstdata>>(count-1) & 1;
3468: }
3469: VFLAG = 0;
3470: NFLAG = ((sint16)outdata) < 0;
3471: ZFLAG = !outdata;
3472: PC+= 4;
3473: }
3474:
3475: void cpu_op_1561a(t_ipc *ipc) /* ASR */ {
3476: /* mask ffff, bits e0f8, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
3477: unsigned int srcdata = 1;
3478: uint32 dstaddr = ipc->dst;
3479: uint16 dstdata = fetchword(dstaddr);
3480: uint8 bits = 16;
3481: uint8 count = srcdata & 63;
3482: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3483:
3484: storeword(dstaddr, outdata);
3485: PC+= 4;
3486: }
3487:
3488: void cpu_op_1561b(t_ipc *ipc) /* ASR */ {
3489: /* mask ffff, bits e0f8, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
3490: unsigned int srcdata = 1;
3491: uint32 dstaddr = ipc->dst;
3492: uint16 dstdata = fetchword(dstaddr);
3493: uint8 bits = 16;
3494: uint8 count = srcdata & 63;
3495: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3496:
3497: storeword(dstaddr, outdata);
3498:
3499: if (!srcdata)
3500: CFLAG = 0;
3501: else if (srcdata >= bits) {
3502: CFLAG = dstdata>>(bits-1);
3503: XFLAG = dstdata>>(bits-1);
3504: } else {
3505: CFLAG = dstdata>>(count-1) & 1;
3506: XFLAG = dstdata>>(count-1) & 1;
3507: }
3508: VFLAG = 0;
3509: NFLAG = ((sint16)outdata) < 0;
3510: ZFLAG = !outdata;
3511: PC+= 4;
3512: }
3513:
3514: void cpu_op_1562a(t_ipc *ipc) /* ASR */ {
3515: /* mask ffff, bits e0f9, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
3516: unsigned int srcdata = 1;
3517: uint32 dstaddr = ipc->dst;
3518: uint16 dstdata = fetchword(dstaddr);
3519: uint8 bits = 16;
3520: uint8 count = srcdata & 63;
3521: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3522:
3523: storeword(dstaddr, outdata);
3524: PC+= 6;
3525: }
3526:
3527: void cpu_op_1562b(t_ipc *ipc) /* ASR */ {
3528: /* mask ffff, bits e0f9, mnemonic 66, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
3529: unsigned int srcdata = 1;
3530: uint32 dstaddr = ipc->dst;
3531: uint16 dstdata = fetchword(dstaddr);
3532: uint8 bits = 16;
3533: uint8 count = srcdata & 63;
3534: uint16 outdata = ((sint16)dstdata) >> (count > 15 ? 15 : count);
3535:
3536: storeword(dstaddr, outdata);
3537:
3538: if (!srcdata)
3539: CFLAG = 0;
3540: else if (srcdata >= bits) {
3541: CFLAG = dstdata>>(bits-1);
3542: XFLAG = dstdata>>(bits-1);
3543: } else {
3544: CFLAG = dstdata>>(count-1) & 1;
3545: XFLAG = dstdata>>(count-1) & 1;
3546: }
3547: VFLAG = 0;
3548: NFLAG = ((sint16)outdata) < 0;
3549: ZFLAG = !outdata;
3550: PC+= 6;
3551: }
3552:
3553: void cpu_op_1563a(t_ipc *ipc) /* LSR */ {
3554: /* mask fff8, bits e2d0, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
3555: unsigned int srcdata = 1;
3556: int dstreg = (ipc->opcode >> 0) & 7;
3557: uint32 dstaddr = ADDRREG(dstreg);
3558: uint16 dstdata = fetchword(dstaddr);
3559: uint8 bits = 16;
3560: uint8 count = srcdata & 63;
3561: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3562:
3563: storeword(dstaddr, outdata);
3564: PC+= 2;
3565: }
3566:
3567: void cpu_op_1563b(t_ipc *ipc) /* LSR */ {
3568: /* mask fff8, bits e2d0, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
3569: unsigned int srcdata = 1;
3570: int dstreg = (ipc->opcode >> 0) & 7;
3571: uint32 dstaddr = ADDRREG(dstreg);
3572: uint16 dstdata = fetchword(dstaddr);
3573: uint8 bits = 16;
3574: uint8 count = srcdata & 63;
3575: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3576:
3577: storeword(dstaddr, outdata);
3578:
3579: if (!count)
3580: CFLAG = 0;
3581: else if (count >= bits) {
3582: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3583: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3584: } else {
3585: CFLAG = dstdata>>(count-1) & 1;
3586: XFLAG = dstdata>>(count-1) & 1;
3587: }
3588: VFLAG = 0;
3589: NFLAG = ((sint16)outdata) < 0;
3590: ZFLAG = !outdata;
3591: PC+= 2;
3592: }
3593:
3594: void cpu_op_1564a(t_ipc *ipc) /* LSR */ {
3595: /* mask fff8, bits e2d8, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
3596: unsigned int srcdata = 1;
3597: int dstreg = (ipc->opcode >> 0) & 7;
3598: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
3599: uint16 dstdata = fetchword(dstaddr);
3600: uint8 bits = 16;
3601: uint8 count = srcdata & 63;
3602: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3603:
3604: storeword(dstaddr, outdata);
3605: PC+= 2;
3606: }
3607:
3608: void cpu_op_1564b(t_ipc *ipc) /* LSR */ {
3609: /* mask fff8, bits e2d8, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
3610: unsigned int srcdata = 1;
3611: int dstreg = (ipc->opcode >> 0) & 7;
3612: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
3613: uint16 dstdata = fetchword(dstaddr);
3614: uint8 bits = 16;
3615: uint8 count = srcdata & 63;
3616: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3617:
3618: storeword(dstaddr, outdata);
3619:
3620: if (!count)
3621: CFLAG = 0;
3622: else if (count >= bits) {
3623: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3624: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3625: } else {
3626: CFLAG = dstdata>>(count-1) & 1;
3627: XFLAG = dstdata>>(count-1) & 1;
3628: }
3629: VFLAG = 0;
3630: NFLAG = ((sint16)outdata) < 0;
3631: ZFLAG = !outdata;
3632: PC+= 2;
3633: }
3634:
3635: void cpu_op_1565a(t_ipc *ipc) /* LSR */ {
3636: /* mask fff8, bits e2e0, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
3637: unsigned int srcdata = 1;
3638: int dstreg = (ipc->opcode >> 0) & 7;
3639: uint32 dstaddr = ADDRREG(dstreg)-=2;
3640: uint16 dstdata = fetchword(dstaddr);
3641: uint8 bits = 16;
3642: uint8 count = srcdata & 63;
3643: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3644:
3645: storeword(dstaddr, outdata);
3646: PC+= 2;
3647: }
3648:
3649: void cpu_op_1565b(t_ipc *ipc) /* LSR */ {
3650: /* mask fff8, bits e2e0, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
3651: unsigned int srcdata = 1;
3652: int dstreg = (ipc->opcode >> 0) & 7;
3653: uint32 dstaddr = ADDRREG(dstreg)-=2;
3654: uint16 dstdata = fetchword(dstaddr);
3655: uint8 bits = 16;
3656: uint8 count = srcdata & 63;
3657: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3658:
3659: storeword(dstaddr, outdata);
3660:
3661: if (!count)
3662: CFLAG = 0;
3663: else if (count >= bits) {
3664: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3665: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3666: } else {
3667: CFLAG = dstdata>>(count-1) & 1;
3668: XFLAG = dstdata>>(count-1) & 1;
3669: }
3670: VFLAG = 0;
3671: NFLAG = ((sint16)outdata) < 0;
3672: ZFLAG = !outdata;
3673: PC+= 2;
3674: }
3675:
3676: void cpu_op_1566a(t_ipc *ipc) /* LSR */ {
3677: /* mask fff8, bits e2e8, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
3678: unsigned int srcdata = 1;
3679: int dstreg = (ipc->opcode >> 0) & 7;
3680: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
3681: uint16 dstdata = fetchword(dstaddr);
3682: uint8 bits = 16;
3683: uint8 count = srcdata & 63;
3684: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3685:
3686: storeword(dstaddr, outdata);
3687: PC+= 4;
3688: }
3689:
3690: void cpu_op_1566b(t_ipc *ipc) /* LSR */ {
3691: /* mask fff8, bits e2e8, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
3692: unsigned int srcdata = 1;
3693: int dstreg = (ipc->opcode >> 0) & 7;
3694: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
3695: uint16 dstdata = fetchword(dstaddr);
3696: uint8 bits = 16;
3697: uint8 count = srcdata & 63;
3698: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3699:
3700: storeword(dstaddr, outdata);
3701:
3702: if (!count)
3703: CFLAG = 0;
3704: else if (count >= bits) {
3705: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3706: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3707: } else {
3708: CFLAG = dstdata>>(count-1) & 1;
3709: XFLAG = dstdata>>(count-1) & 1;
3710: }
3711: VFLAG = 0;
3712: NFLAG = ((sint16)outdata) < 0;
3713: ZFLAG = !outdata;
3714: PC+= 4;
3715: }
3716:
3717: void cpu_op_1567a(t_ipc *ipc) /* LSR */ {
3718: /* mask fff8, bits e2f0, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
3719: unsigned int srcdata = 1;
3720: int dstreg = (ipc->opcode >> 0) & 7;
3721: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
3722: uint16 dstdata = fetchword(dstaddr);
3723: uint8 bits = 16;
3724: uint8 count = srcdata & 63;
3725: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3726:
3727: storeword(dstaddr, outdata);
3728: PC+= 4;
3729: }
3730:
3731: void cpu_op_1567b(t_ipc *ipc) /* LSR */ {
3732: /* mask fff8, bits e2f0, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
3733: unsigned int srcdata = 1;
3734: int dstreg = (ipc->opcode >> 0) & 7;
3735: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
3736: uint16 dstdata = fetchword(dstaddr);
3737: uint8 bits = 16;
3738: uint8 count = srcdata & 63;
3739: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3740:
3741: storeword(dstaddr, outdata);
3742:
3743: if (!count)
3744: CFLAG = 0;
3745: else if (count >= bits) {
3746: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3747: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3748: } else {
3749: CFLAG = dstdata>>(count-1) & 1;
3750: XFLAG = dstdata>>(count-1) & 1;
3751: }
3752: VFLAG = 0;
3753: NFLAG = ((sint16)outdata) < 0;
3754: ZFLAG = !outdata;
3755: PC+= 4;
3756: }
3757:
3758: void cpu_op_1568a(t_ipc *ipc) /* LSR */ {
3759: /* mask ffff, bits e2f8, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
3760: unsigned int srcdata = 1;
3761: uint32 dstaddr = ipc->dst;
3762: uint16 dstdata = fetchword(dstaddr);
3763: uint8 bits = 16;
3764: uint8 count = srcdata & 63;
3765: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3766:
3767: storeword(dstaddr, outdata);
3768: PC+= 4;
3769: }
3770:
3771: void cpu_op_1568b(t_ipc *ipc) /* LSR */ {
3772: /* mask ffff, bits e2f8, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
3773: unsigned int srcdata = 1;
3774: uint32 dstaddr = ipc->dst;
3775: uint16 dstdata = fetchword(dstaddr);
3776: uint8 bits = 16;
3777: uint8 count = srcdata & 63;
3778: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3779:
3780: storeword(dstaddr, outdata);
3781:
3782: if (!count)
3783: CFLAG = 0;
3784: else if (count >= bits) {
3785: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3786: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3787: } else {
3788: CFLAG = dstdata>>(count-1) & 1;
3789: XFLAG = dstdata>>(count-1) & 1;
3790: }
3791: VFLAG = 0;
3792: NFLAG = ((sint16)outdata) < 0;
3793: ZFLAG = !outdata;
3794: PC+= 4;
3795: }
3796:
3797: void cpu_op_1569a(t_ipc *ipc) /* LSR */ {
3798: /* mask ffff, bits e2f9, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
3799: unsigned int srcdata = 1;
3800: uint32 dstaddr = ipc->dst;
3801: uint16 dstdata = fetchword(dstaddr);
3802: uint8 bits = 16;
3803: uint8 count = srcdata & 63;
3804: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3805:
3806: storeword(dstaddr, outdata);
3807: PC+= 6;
3808: }
3809:
3810: void cpu_op_1569b(t_ipc *ipc) /* LSR */ {
3811: /* mask ffff, bits e2f9, mnemonic 67, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
3812: unsigned int srcdata = 1;
3813: uint32 dstaddr = ipc->dst;
3814: uint16 dstdata = fetchword(dstaddr);
3815: uint8 bits = 16;
3816: uint8 count = srcdata & 63;
3817: uint16 outdata = dstdata >> (count > (bits-1) ? (bits-1) : count);
3818:
3819: storeword(dstaddr, outdata);
3820:
3821: if (!count)
3822: CFLAG = 0;
3823: else if (count >= bits) {
3824: CFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3825: XFLAG = (count == bits) ? dstdata>>(bits-1) : 0;
3826: } else {
3827: CFLAG = dstdata>>(count-1) & 1;
3828: XFLAG = dstdata>>(count-1) & 1;
3829: }
3830: VFLAG = 0;
3831: NFLAG = ((sint16)outdata) < 0;
3832: ZFLAG = !outdata;
3833: PC+= 6;
3834: }
3835:
3836: void cpu_op_1570a(t_ipc *ipc) /* ROXR */ {
3837: /* mask fff8, bits e4d0, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
3838: unsigned int srcdata = 1;
3839: int dstreg = (ipc->opcode >> 0) & 7;
3840: uint32 dstaddr = ADDRREG(dstreg);
3841: uint16 dstdata = fetchword(dstaddr);
3842: uint8 bits = 16;
3843: uint8 loop = srcdata & 63;
3844: uint8 cflag = CFLAG;
3845: uint8 xflag = XFLAG;
3846: uint16 outdata = dstdata;
3847:
3848: while(loop) {
3849: cflag = outdata & 1;
3850: outdata>>= 1;
3851: if (xflag)
3852: outdata |= 1<<(bits-1);
3853: xflag = cflag;
3854: loop--;
3855: }
3856: storeword(dstaddr, outdata);
3857: PC+= 2;
3858: }
3859:
3860: void cpu_op_1570b(t_ipc *ipc) /* ROXR */ {
3861: /* mask fff8, bits e4d0, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
3862: unsigned int srcdata = 1;
3863: int dstreg = (ipc->opcode >> 0) & 7;
3864: uint32 dstaddr = ADDRREG(dstreg);
3865: uint16 dstdata = fetchword(dstaddr);
3866: uint8 bits = 16;
3867: uint8 loop = srcdata & 63;
3868: uint8 cflag = CFLAG;
3869: uint8 xflag = XFLAG;
3870: uint16 outdata = dstdata;
3871:
3872: while(loop) {
3873: cflag = outdata & 1;
3874: outdata>>= 1;
3875: if (xflag)
3876: outdata |= 1<<(bits-1);
3877: xflag = cflag;
3878: loop--;
3879: }
3880: storeword(dstaddr, outdata);
3881:
3882: XFLAG = xflag;
3883: CFLAG = xflag;
3884: NFLAG = ((sint16)outdata) < 0;
3885: ZFLAG = !outdata;
3886: VFLAG = 0;
3887: PC+= 2;
3888: }
3889:
3890: void cpu_op_1571a(t_ipc *ipc) /* ROXR */ {
3891: /* mask fff8, bits e4d8, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
3892: unsigned int srcdata = 1;
3893: int dstreg = (ipc->opcode >> 0) & 7;
3894: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
3895: uint16 dstdata = fetchword(dstaddr);
3896: uint8 bits = 16;
3897: uint8 loop = srcdata & 63;
3898: uint8 cflag = CFLAG;
3899: uint8 xflag = XFLAG;
3900: uint16 outdata = dstdata;
3901:
3902: while(loop) {
3903: cflag = outdata & 1;
3904: outdata>>= 1;
3905: if (xflag)
3906: outdata |= 1<<(bits-1);
3907: xflag = cflag;
3908: loop--;
3909: }
3910: storeword(dstaddr, outdata);
3911: PC+= 2;
3912: }
3913:
3914: void cpu_op_1571b(t_ipc *ipc) /* ROXR */ {
3915: /* mask fff8, bits e4d8, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
3916: unsigned int srcdata = 1;
3917: int dstreg = (ipc->opcode >> 0) & 7;
3918: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
3919: uint16 dstdata = fetchword(dstaddr);
3920: uint8 bits = 16;
3921: uint8 loop = srcdata & 63;
3922: uint8 cflag = CFLAG;
3923: uint8 xflag = XFLAG;
3924: uint16 outdata = dstdata;
3925:
3926: while(loop) {
3927: cflag = outdata & 1;
3928: outdata>>= 1;
3929: if (xflag)
3930: outdata |= 1<<(bits-1);
3931: xflag = cflag;
3932: loop--;
3933: }
3934: storeword(dstaddr, outdata);
3935:
3936: XFLAG = xflag;
3937: CFLAG = xflag;
3938: NFLAG = ((sint16)outdata) < 0;
3939: ZFLAG = !outdata;
3940: VFLAG = 0;
3941: PC+= 2;
3942: }
3943:
3944: void cpu_op_1572a(t_ipc *ipc) /* ROXR */ {
3945: /* mask fff8, bits e4e0, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
3946: unsigned int srcdata = 1;
3947: int dstreg = (ipc->opcode >> 0) & 7;
3948: uint32 dstaddr = ADDRREG(dstreg)-=2;
3949: uint16 dstdata = fetchword(dstaddr);
3950: uint8 bits = 16;
3951: uint8 loop = srcdata & 63;
3952: uint8 cflag = CFLAG;
3953: uint8 xflag = XFLAG;
3954: uint16 outdata = dstdata;
3955:
3956: while(loop) {
3957: cflag = outdata & 1;
3958: outdata>>= 1;
3959: if (xflag)
3960: outdata |= 1<<(bits-1);
3961: xflag = cflag;
3962: loop--;
3963: }
3964: storeword(dstaddr, outdata);
3965: PC+= 2;
3966: }
3967:
3968: void cpu_op_1572b(t_ipc *ipc) /* ROXR */ {
3969: /* mask fff8, bits e4e0, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
3970: unsigned int srcdata = 1;
3971: int dstreg = (ipc->opcode >> 0) & 7;
3972: uint32 dstaddr = ADDRREG(dstreg)-=2;
3973: uint16 dstdata = fetchword(dstaddr);
3974: uint8 bits = 16;
3975: uint8 loop = srcdata & 63;
3976: uint8 cflag = CFLAG;
3977: uint8 xflag = XFLAG;
3978: uint16 outdata = dstdata;
3979:
3980: while(loop) {
3981: cflag = outdata & 1;
3982: outdata>>= 1;
3983: if (xflag)
3984: outdata |= 1<<(bits-1);
3985: xflag = cflag;
3986: loop--;
3987: }
3988: storeword(dstaddr, outdata);
3989:
3990: XFLAG = xflag;
3991: CFLAG = xflag;
3992: NFLAG = ((sint16)outdata) < 0;
3993: ZFLAG = !outdata;
3994: VFLAG = 0;
3995: PC+= 2;
3996: }
3997:
3998: void cpu_op_1573a(t_ipc *ipc) /* ROXR */ {
3999: /* mask fff8, bits e4e8, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
4000: unsigned int srcdata = 1;
4001: int dstreg = (ipc->opcode >> 0) & 7;
4002: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
4003: uint16 dstdata = fetchword(dstaddr);
4004: uint8 bits = 16;
4005: uint8 loop = srcdata & 63;
4006: uint8 cflag = CFLAG;
4007: uint8 xflag = XFLAG;
4008: uint16 outdata = dstdata;
4009:
4010: while(loop) {
4011: cflag = outdata & 1;
4012: outdata>>= 1;
4013: if (xflag)
4014: outdata |= 1<<(bits-1);
4015: xflag = cflag;
4016: loop--;
4017: }
4018: storeword(dstaddr, outdata);
4019: PC+= 4;
4020: }
4021:
4022: void cpu_op_1573b(t_ipc *ipc) /* ROXR */ {
4023: /* mask fff8, bits e4e8, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
4024: unsigned int srcdata = 1;
4025: int dstreg = (ipc->opcode >> 0) & 7;
4026: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
4027: uint16 dstdata = fetchword(dstaddr);
4028: uint8 bits = 16;
4029: uint8 loop = srcdata & 63;
4030: uint8 cflag = CFLAG;
4031: uint8 xflag = XFLAG;
4032: uint16 outdata = dstdata;
4033:
4034: while(loop) {
4035: cflag = outdata & 1;
4036: outdata>>= 1;
4037: if (xflag)
4038: outdata |= 1<<(bits-1);
4039: xflag = cflag;
4040: loop--;
4041: }
4042: storeword(dstaddr, outdata);
4043:
4044: XFLAG = xflag;
4045: CFLAG = xflag;
4046: NFLAG = ((sint16)outdata) < 0;
4047: ZFLAG = !outdata;
4048: VFLAG = 0;
4049: PC+= 4;
4050: }
4051:
4052: void cpu_op_1574a(t_ipc *ipc) /* ROXR */ {
4053: /* mask fff8, bits e4f0, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
4054: unsigned int srcdata = 1;
4055: int dstreg = (ipc->opcode >> 0) & 7;
4056: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
4057: uint16 dstdata = fetchword(dstaddr);
4058: uint8 bits = 16;
4059: uint8 loop = srcdata & 63;
4060: uint8 cflag = CFLAG;
4061: uint8 xflag = XFLAG;
4062: uint16 outdata = dstdata;
4063:
4064: while(loop) {
4065: cflag = outdata & 1;
4066: outdata>>= 1;
4067: if (xflag)
4068: outdata |= 1<<(bits-1);
4069: xflag = cflag;
4070: loop--;
4071: }
4072: storeword(dstaddr, outdata);
4073: PC+= 4;
4074: }
4075:
4076: void cpu_op_1574b(t_ipc *ipc) /* ROXR */ {
4077: /* mask fff8, bits e4f0, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
4078: unsigned int srcdata = 1;
4079: int dstreg = (ipc->opcode >> 0) & 7;
4080: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
4081: uint16 dstdata = fetchword(dstaddr);
4082: uint8 bits = 16;
4083: uint8 loop = srcdata & 63;
4084: uint8 cflag = CFLAG;
4085: uint8 xflag = XFLAG;
4086: uint16 outdata = dstdata;
4087:
4088: while(loop) {
4089: cflag = outdata & 1;
4090: outdata>>= 1;
4091: if (xflag)
4092: outdata |= 1<<(bits-1);
4093: xflag = cflag;
4094: loop--;
4095: }
4096: storeword(dstaddr, outdata);
4097:
4098: XFLAG = xflag;
4099: CFLAG = xflag;
4100: NFLAG = ((sint16)outdata) < 0;
4101: ZFLAG = !outdata;
4102: VFLAG = 0;
4103: PC+= 4;
4104: }
4105:
4106: void cpu_op_1575a(t_ipc *ipc) /* ROXR */ {
4107: /* mask ffff, bits e4f8, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
4108: unsigned int srcdata = 1;
4109: uint32 dstaddr = ipc->dst;
4110: uint16 dstdata = fetchword(dstaddr);
4111: uint8 bits = 16;
4112: uint8 loop = srcdata & 63;
4113: uint8 cflag = CFLAG;
4114: uint8 xflag = XFLAG;
4115: uint16 outdata = dstdata;
4116:
4117: while(loop) {
4118: cflag = outdata & 1;
4119: outdata>>= 1;
4120: if (xflag)
4121: outdata |= 1<<(bits-1);
4122: xflag = cflag;
4123: loop--;
4124: }
4125: storeword(dstaddr, outdata);
4126: PC+= 4;
4127: }
4128:
4129: void cpu_op_1575b(t_ipc *ipc) /* ROXR */ {
4130: /* mask ffff, bits e4f8, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
4131: unsigned int srcdata = 1;
4132: uint32 dstaddr = ipc->dst;
4133: uint16 dstdata = fetchword(dstaddr);
4134: uint8 bits = 16;
4135: uint8 loop = srcdata & 63;
4136: uint8 cflag = CFLAG;
4137: uint8 xflag = XFLAG;
4138: uint16 outdata = dstdata;
4139:
4140: while(loop) {
4141: cflag = outdata & 1;
4142: outdata>>= 1;
4143: if (xflag)
4144: outdata |= 1<<(bits-1);
4145: xflag = cflag;
4146: loop--;
4147: }
4148: storeword(dstaddr, outdata);
4149:
4150: XFLAG = xflag;
4151: CFLAG = xflag;
4152: NFLAG = ((sint16)outdata) < 0;
4153: ZFLAG = !outdata;
4154: VFLAG = 0;
4155: PC+= 4;
4156: }
4157:
4158: void cpu_op_1576a(t_ipc *ipc) /* ROXR */ {
4159: /* mask ffff, bits e4f9, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
4160: unsigned int srcdata = 1;
4161: uint32 dstaddr = ipc->dst;
4162: uint16 dstdata = fetchword(dstaddr);
4163: uint8 bits = 16;
4164: uint8 loop = srcdata & 63;
4165: uint8 cflag = CFLAG;
4166: uint8 xflag = XFLAG;
4167: uint16 outdata = dstdata;
4168:
4169: while(loop) {
4170: cflag = outdata & 1;
4171: outdata>>= 1;
4172: if (xflag)
4173: outdata |= 1<<(bits-1);
4174: xflag = cflag;
4175: loop--;
4176: }
4177: storeword(dstaddr, outdata);
4178: PC+= 6;
4179: }
4180:
4181: void cpu_op_1576b(t_ipc *ipc) /* ROXR */ {
4182: /* mask ffff, bits e4f9, mnemonic 68, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
4183: unsigned int srcdata = 1;
4184: uint32 dstaddr = ipc->dst;
4185: uint16 dstdata = fetchword(dstaddr);
4186: uint8 bits = 16;
4187: uint8 loop = srcdata & 63;
4188: uint8 cflag = CFLAG;
4189: uint8 xflag = XFLAG;
4190: uint16 outdata = dstdata;
4191:
4192: while(loop) {
4193: cflag = outdata & 1;
4194: outdata>>= 1;
4195: if (xflag)
4196: outdata |= 1<<(bits-1);
4197: xflag = cflag;
4198: loop--;
4199: }
4200: storeword(dstaddr, outdata);
4201:
4202: XFLAG = xflag;
4203: CFLAG = xflag;
4204: NFLAG = ((sint16)outdata) < 0;
4205: ZFLAG = !outdata;
4206: VFLAG = 0;
4207: PC+= 6;
4208: }
4209:
4210: void cpu_op_1577a(t_ipc *ipc) /* ROR */ {
4211: /* mask fff8, bits e6d0, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
4212: unsigned int srcdata = 1;
4213: int dstreg = (ipc->opcode >> 0) & 7;
4214: uint32 dstaddr = ADDRREG(dstreg);
4215: uint16 dstdata = fetchword(dstaddr);
4216: uint8 bits = 16;
4217: uint8 loop = srcdata & 63;
4218: uint8 cflag = 0;
4219: uint16 outdata = dstdata;
4220:
4221: while(loop) {
4222: cflag = outdata & 1;
4223: outdata>>= 1;
4224: if (cflag)
4225: outdata |= 1<<(bits-1);
4226: loop--;
4227: }
4228: storeword(dstaddr, outdata);
4229: PC+= 2;
4230: }
4231:
4232: void cpu_op_1577b(t_ipc *ipc) /* ROR */ {
4233: /* mask fff8, bits e6d0, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
4234: unsigned int srcdata = 1;
4235: int dstreg = (ipc->opcode >> 0) & 7;
4236: uint32 dstaddr = ADDRREG(dstreg);
4237: uint16 dstdata = fetchword(dstaddr);
4238: uint8 bits = 16;
4239: uint8 loop = srcdata & 63;
4240: uint8 cflag = 0;
4241: uint16 outdata = dstdata;
4242:
4243: while(loop) {
4244: cflag = outdata & 1;
4245: outdata>>= 1;
4246: if (cflag)
4247: outdata |= 1<<(bits-1);
4248: loop--;
4249: }
4250: storeword(dstaddr, outdata);
4251:
4252: CFLAG = cflag;
4253: NFLAG = ((sint16)outdata) < 0;
4254: ZFLAG = !outdata;
4255: VFLAG = 0;
4256: PC+= 2;
4257: }
4258:
4259: void cpu_op_1578a(t_ipc *ipc) /* ROR */ {
4260: /* mask fff8, bits e6d8, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
4261: unsigned int srcdata = 1;
4262: int dstreg = (ipc->opcode >> 0) & 7;
4263: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
4264: uint16 dstdata = fetchword(dstaddr);
4265: uint8 bits = 16;
4266: uint8 loop = srcdata & 63;
4267: uint8 cflag = 0;
4268: uint16 outdata = dstdata;
4269:
4270: while(loop) {
4271: cflag = outdata & 1;
4272: outdata>>= 1;
4273: if (cflag)
4274: outdata |= 1<<(bits-1);
4275: loop--;
4276: }
4277: storeword(dstaddr, outdata);
4278: PC+= 2;
4279: }
4280:
4281: void cpu_op_1578b(t_ipc *ipc) /* ROR */ {
4282: /* mask fff8, bits e6d8, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
4283: unsigned int srcdata = 1;
4284: int dstreg = (ipc->opcode >> 0) & 7;
4285: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
4286: uint16 dstdata = fetchword(dstaddr);
4287: uint8 bits = 16;
4288: uint8 loop = srcdata & 63;
4289: uint8 cflag = 0;
4290: uint16 outdata = dstdata;
4291:
4292: while(loop) {
4293: cflag = outdata & 1;
4294: outdata>>= 1;
4295: if (cflag)
4296: outdata |= 1<<(bits-1);
4297: loop--;
4298: }
4299: storeword(dstaddr, outdata);
4300:
4301: CFLAG = cflag;
4302: NFLAG = ((sint16)outdata) < 0;
4303: ZFLAG = !outdata;
4304: VFLAG = 0;
4305: PC+= 2;
4306: }
4307:
4308: void cpu_op_1579a(t_ipc *ipc) /* ROR */ {
4309: /* mask fff8, bits e6e0, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
4310: unsigned int srcdata = 1;
4311: int dstreg = (ipc->opcode >> 0) & 7;
4312: uint32 dstaddr = ADDRREG(dstreg)-=2;
4313: uint16 dstdata = fetchword(dstaddr);
4314: uint8 bits = 16;
4315: uint8 loop = srcdata & 63;
4316: uint8 cflag = 0;
4317: uint16 outdata = dstdata;
4318:
4319: while(loop) {
4320: cflag = outdata & 1;
4321: outdata>>= 1;
4322: if (cflag)
4323: outdata |= 1<<(bits-1);
4324: loop--;
4325: }
4326: storeword(dstaddr, outdata);
4327: PC+= 2;
4328: }
4329:
4330: void cpu_op_1579b(t_ipc *ipc) /* ROR */ {
4331: /* mask fff8, bits e6e0, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
4332: unsigned int srcdata = 1;
4333: int dstreg = (ipc->opcode >> 0) & 7;
4334: uint32 dstaddr = ADDRREG(dstreg)-=2;
4335: uint16 dstdata = fetchword(dstaddr);
4336: uint8 bits = 16;
4337: uint8 loop = srcdata & 63;
4338: uint8 cflag = 0;
4339: uint16 outdata = dstdata;
4340:
4341: while(loop) {
4342: cflag = outdata & 1;
4343: outdata>>= 1;
4344: if (cflag)
4345: outdata |= 1<<(bits-1);
4346: loop--;
4347: }
4348: storeword(dstaddr, outdata);
4349:
4350: CFLAG = cflag;
4351: NFLAG = ((sint16)outdata) < 0;
4352: ZFLAG = !outdata;
4353: VFLAG = 0;
4354: PC+= 2;
4355: }
4356:
4357: void cpu_op_1580a(t_ipc *ipc) /* ROR */ {
4358: /* mask fff8, bits e6e8, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
4359: unsigned int srcdata = 1;
4360: int dstreg = (ipc->opcode >> 0) & 7;
4361: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
4362: uint16 dstdata = fetchword(dstaddr);
4363: uint8 bits = 16;
4364: uint8 loop = srcdata & 63;
4365: uint8 cflag = 0;
4366: uint16 outdata = dstdata;
4367:
4368: while(loop) {
4369: cflag = outdata & 1;
4370: outdata>>= 1;
4371: if (cflag)
4372: outdata |= 1<<(bits-1);
4373: loop--;
4374: }
4375: storeword(dstaddr, outdata);
4376: PC+= 4;
4377: }
4378:
4379: void cpu_op_1580b(t_ipc *ipc) /* ROR */ {
4380: /* mask fff8, bits e6e8, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
4381: unsigned int srcdata = 1;
4382: int dstreg = (ipc->opcode >> 0) & 7;
4383: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
4384: uint16 dstdata = fetchword(dstaddr);
4385: uint8 bits = 16;
4386: uint8 loop = srcdata & 63;
4387: uint8 cflag = 0;
4388: uint16 outdata = dstdata;
4389:
4390: while(loop) {
4391: cflag = outdata & 1;
4392: outdata>>= 1;
4393: if (cflag)
4394: outdata |= 1<<(bits-1);
4395: loop--;
4396: }
4397: storeword(dstaddr, outdata);
4398:
4399: CFLAG = cflag;
4400: NFLAG = ((sint16)outdata) < 0;
4401: ZFLAG = !outdata;
4402: VFLAG = 0;
4403: PC+= 4;
4404: }
4405:
4406: void cpu_op_1581a(t_ipc *ipc) /* ROR */ {
4407: /* mask fff8, bits e6f0, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
4408: unsigned int srcdata = 1;
4409: int dstreg = (ipc->opcode >> 0) & 7;
4410: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
4411: uint16 dstdata = fetchword(dstaddr);
4412: uint8 bits = 16;
4413: uint8 loop = srcdata & 63;
4414: uint8 cflag = 0;
4415: uint16 outdata = dstdata;
4416:
4417: while(loop) {
4418: cflag = outdata & 1;
4419: outdata>>= 1;
4420: if (cflag)
4421: outdata |= 1<<(bits-1);
4422: loop--;
4423: }
4424: storeword(dstaddr, outdata);
4425: PC+= 4;
4426: }
4427:
4428: void cpu_op_1581b(t_ipc *ipc) /* ROR */ {
4429: /* mask fff8, bits e6f0, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
4430: unsigned int srcdata = 1;
4431: int dstreg = (ipc->opcode >> 0) & 7;
4432: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
4433: uint16 dstdata = fetchword(dstaddr);
4434: uint8 bits = 16;
4435: uint8 loop = srcdata & 63;
4436: uint8 cflag = 0;
4437: uint16 outdata = dstdata;
4438:
4439: while(loop) {
4440: cflag = outdata & 1;
4441: outdata>>= 1;
4442: if (cflag)
4443: outdata |= 1<<(bits-1);
4444: loop--;
4445: }
4446: storeword(dstaddr, outdata);
4447:
4448: CFLAG = cflag;
4449: NFLAG = ((sint16)outdata) < 0;
4450: ZFLAG = !outdata;
4451: VFLAG = 0;
4452: PC+= 4;
4453: }
4454:
4455: void cpu_op_1582a(t_ipc *ipc) /* ROR */ {
4456: /* mask ffff, bits e6f8, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
4457: unsigned int srcdata = 1;
4458: uint32 dstaddr = ipc->dst;
4459: uint16 dstdata = fetchword(dstaddr);
4460: uint8 bits = 16;
4461: uint8 loop = srcdata & 63;
4462: uint8 cflag = 0;
4463: uint16 outdata = dstdata;
4464:
4465: while(loop) {
4466: cflag = outdata & 1;
4467: outdata>>= 1;
4468: if (cflag)
4469: outdata |= 1<<(bits-1);
4470: loop--;
4471: }
4472: storeword(dstaddr, outdata);
4473: PC+= 4;
4474: }
4475:
4476: void cpu_op_1582b(t_ipc *ipc) /* ROR */ {
4477: /* mask ffff, bits e6f8, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
4478: unsigned int srcdata = 1;
4479: uint32 dstaddr = ipc->dst;
4480: uint16 dstdata = fetchword(dstaddr);
4481: uint8 bits = 16;
4482: uint8 loop = srcdata & 63;
4483: uint8 cflag = 0;
4484: uint16 outdata = dstdata;
4485:
4486: while(loop) {
4487: cflag = outdata & 1;
4488: outdata>>= 1;
4489: if (cflag)
4490: outdata |= 1<<(bits-1);
4491: loop--;
4492: }
4493: storeword(dstaddr, outdata);
4494:
4495: CFLAG = cflag;
4496: NFLAG = ((sint16)outdata) < 0;
4497: ZFLAG = !outdata;
4498: VFLAG = 0;
4499: PC+= 4;
4500: }
4501:
4502: void cpu_op_1583a(t_ipc *ipc) /* ROR */ {
4503: /* mask ffff, bits e6f9, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
4504: unsigned int srcdata = 1;
4505: uint32 dstaddr = ipc->dst;
4506: uint16 dstdata = fetchword(dstaddr);
4507: uint8 bits = 16;
4508: uint8 loop = srcdata & 63;
4509: uint8 cflag = 0;
4510: uint16 outdata = dstdata;
4511:
4512: while(loop) {
4513: cflag = outdata & 1;
4514: outdata>>= 1;
4515: if (cflag)
4516: outdata |= 1<<(bits-1);
4517: loop--;
4518: }
4519: storeword(dstaddr, outdata);
4520: PC+= 6;
4521: }
4522:
4523: void cpu_op_1583b(t_ipc *ipc) /* ROR */ {
4524: /* mask ffff, bits e6f9, mnemonic 69, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
4525: unsigned int srcdata = 1;
4526: uint32 dstaddr = ipc->dst;
4527: uint16 dstdata = fetchword(dstaddr);
4528: uint8 bits = 16;
4529: uint8 loop = srcdata & 63;
4530: uint8 cflag = 0;
4531: uint16 outdata = dstdata;
4532:
4533: while(loop) {
4534: cflag = outdata & 1;
4535: outdata>>= 1;
4536: if (cflag)
4537: outdata |= 1<<(bits-1);
4538: loop--;
4539: }
4540: storeword(dstaddr, outdata);
4541:
4542: CFLAG = cflag;
4543: NFLAG = ((sint16)outdata) < 0;
4544: ZFLAG = !outdata;
4545: VFLAG = 0;
4546: PC+= 6;
4547: }
4548:
4549: void cpu_op_1584a(t_ipc *ipc) /* ASL */ {
4550: /* mask fff8, bits e1d0, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
4551: unsigned int srcdata = 1;
4552: int dstreg = (ipc->opcode >> 0) & 7;
4553: uint32 dstaddr = ADDRREG(dstreg);
4554: uint16 dstdata = fetchword(dstaddr);
4555: uint8 bits = 16;
4556: uint8 count = srcdata & 63;
4557: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4558:
4559: storeword(dstaddr, outdata);
4560: PC+= 2;
4561: }
4562:
4563: void cpu_op_1584b(t_ipc *ipc) /* ASL */ {
4564: /* mask fff8, bits e1d0, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
4565: unsigned int srcdata = 1;
4566: int dstreg = (ipc->opcode >> 0) & 7;
4567: uint32 dstaddr = ADDRREG(dstreg);
4568: uint16 dstdata = fetchword(dstaddr);
4569: uint8 bits = 16;
4570: uint8 count = srcdata & 63;
4571: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4572:
4573: storeword(dstaddr, outdata);
4574:
4575: if (!count)
4576: CFLAG = 0;
4577: else if (count >= bits) {
4578: CFLAG = (count == bits) ? dstdata & 1 : 0;
4579: XFLAG = (count == bits) ? dstdata & 1 : 0;
4580: VFLAG = !dstdata;
4581: } else {
4582: CFLAG = dstdata>>(bits-count) & 1;
4583: XFLAG = dstdata>>(bits-count) & 1;
4584: {
4585: uint16 mask = 0xffff << (15-count);
4586: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
4587: }
4588: }
4589: NFLAG = ((sint16)outdata) < 0;
4590: ZFLAG = !outdata;
4591: PC+= 2;
4592: }
4593:
4594: void cpu_op_1585a(t_ipc *ipc) /* ASL */ {
4595: /* mask fff8, bits e1d8, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
4596: unsigned int srcdata = 1;
4597: int dstreg = (ipc->opcode >> 0) & 7;
4598: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
4599: uint16 dstdata = fetchword(dstaddr);
4600: uint8 bits = 16;
4601: uint8 count = srcdata & 63;
4602: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4603:
4604: storeword(dstaddr, outdata);
4605: PC+= 2;
4606: }
4607:
4608: void cpu_op_1585b(t_ipc *ipc) /* ASL */ {
4609: /* mask fff8, bits e1d8, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
4610: unsigned int srcdata = 1;
4611: int dstreg = (ipc->opcode >> 0) & 7;
4612: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
4613: uint16 dstdata = fetchword(dstaddr);
4614: uint8 bits = 16;
4615: uint8 count = srcdata & 63;
4616: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4617:
4618: storeword(dstaddr, outdata);
4619:
4620: if (!count)
4621: CFLAG = 0;
4622: else if (count >= bits) {
4623: CFLAG = (count == bits) ? dstdata & 1 : 0;
4624: XFLAG = (count == bits) ? dstdata & 1 : 0;
4625: VFLAG = !dstdata;
4626: } else {
4627: CFLAG = dstdata>>(bits-count) & 1;
4628: XFLAG = dstdata>>(bits-count) & 1;
4629: {
4630: uint16 mask = 0xffff << (15-count);
4631: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
4632: }
4633: }
4634: NFLAG = ((sint16)outdata) < 0;
4635: ZFLAG = !outdata;
4636: PC+= 2;
4637: }
4638:
4639: void cpu_op_1586a(t_ipc *ipc) /* ASL */ {
4640: /* mask fff8, bits e1e0, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
4641: unsigned int srcdata = 1;
4642: int dstreg = (ipc->opcode >> 0) & 7;
4643: uint32 dstaddr = ADDRREG(dstreg)-=2;
4644: uint16 dstdata = fetchword(dstaddr);
4645: uint8 bits = 16;
4646: uint8 count = srcdata & 63;
4647: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4648:
4649: storeword(dstaddr, outdata);
4650: PC+= 2;
4651: }
4652:
4653: void cpu_op_1586b(t_ipc *ipc) /* ASL */ {
4654: /* mask fff8, bits e1e0, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
4655: unsigned int srcdata = 1;
4656: int dstreg = (ipc->opcode >> 0) & 7;
4657: uint32 dstaddr = ADDRREG(dstreg)-=2;
4658: uint16 dstdata = fetchword(dstaddr);
4659: uint8 bits = 16;
4660: uint8 count = srcdata & 63;
4661: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4662:
4663: storeword(dstaddr, outdata);
4664:
4665: if (!count)
4666: CFLAG = 0;
4667: else if (count >= bits) {
4668: CFLAG = (count == bits) ? dstdata & 1 : 0;
4669: XFLAG = (count == bits) ? dstdata & 1 : 0;
4670: VFLAG = !dstdata;
4671: } else {
4672: CFLAG = dstdata>>(bits-count) & 1;
4673: XFLAG = dstdata>>(bits-count) & 1;
4674: {
4675: uint16 mask = 0xffff << (15-count);
4676: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
4677: }
4678: }
4679: NFLAG = ((sint16)outdata) < 0;
4680: ZFLAG = !outdata;
4681: PC+= 2;
4682: }
4683:
4684: void cpu_op_1587a(t_ipc *ipc) /* ASL */ {
4685: /* mask fff8, bits e1e8, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
4686: unsigned int srcdata = 1;
4687: int dstreg = (ipc->opcode >> 0) & 7;
4688: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
4689: uint16 dstdata = fetchword(dstaddr);
4690: uint8 bits = 16;
4691: uint8 count = srcdata & 63;
4692: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4693:
4694: storeword(dstaddr, outdata);
4695: PC+= 4;
4696: }
4697:
4698: void cpu_op_1587b(t_ipc *ipc) /* ASL */ {
4699: /* mask fff8, bits e1e8, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
4700: unsigned int srcdata = 1;
4701: int dstreg = (ipc->opcode >> 0) & 7;
4702: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
4703: uint16 dstdata = fetchword(dstaddr);
4704: uint8 bits = 16;
4705: uint8 count = srcdata & 63;
4706: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4707:
4708: storeword(dstaddr, outdata);
4709:
4710: if (!count)
4711: CFLAG = 0;
4712: else if (count >= bits) {
4713: CFLAG = (count == bits) ? dstdata & 1 : 0;
4714: XFLAG = (count == bits) ? dstdata & 1 : 0;
4715: VFLAG = !dstdata;
4716: } else {
4717: CFLAG = dstdata>>(bits-count) & 1;
4718: XFLAG = dstdata>>(bits-count) & 1;
4719: {
4720: uint16 mask = 0xffff << (15-count);
4721: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
4722: }
4723: }
4724: NFLAG = ((sint16)outdata) < 0;
4725: ZFLAG = !outdata;
4726: PC+= 4;
4727: }
4728:
4729: void cpu_op_1588a(t_ipc *ipc) /* ASL */ {
4730: /* mask fff8, bits e1f0, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
4731: unsigned int srcdata = 1;
4732: int dstreg = (ipc->opcode >> 0) & 7;
4733: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
4734: uint16 dstdata = fetchword(dstaddr);
4735: uint8 bits = 16;
4736: uint8 count = srcdata & 63;
4737: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4738:
4739: storeword(dstaddr, outdata);
4740: PC+= 4;
4741: }
4742:
4743: void cpu_op_1588b(t_ipc *ipc) /* ASL */ {
4744: /* mask fff8, bits e1f0, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
4745: unsigned int srcdata = 1;
4746: int dstreg = (ipc->opcode >> 0) & 7;
4747: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
4748: uint16 dstdata = fetchword(dstaddr);
4749: uint8 bits = 16;
4750: uint8 count = srcdata & 63;
4751: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4752:
4753: storeword(dstaddr, outdata);
4754:
4755: if (!count)
4756: CFLAG = 0;
4757: else if (count >= bits) {
4758: CFLAG = (count == bits) ? dstdata & 1 : 0;
4759: XFLAG = (count == bits) ? dstdata & 1 : 0;
4760: VFLAG = !dstdata;
4761: } else {
4762: CFLAG = dstdata>>(bits-count) & 1;
4763: XFLAG = dstdata>>(bits-count) & 1;
4764: {
4765: uint16 mask = 0xffff << (15-count);
4766: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
4767: }
4768: }
4769: NFLAG = ((sint16)outdata) < 0;
4770: ZFLAG = !outdata;
4771: PC+= 4;
4772: }
4773:
4774: void cpu_op_1589a(t_ipc *ipc) /* ASL */ {
4775: /* mask ffff, bits e1f8, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
4776: unsigned int srcdata = 1;
4777: uint32 dstaddr = ipc->dst;
4778: uint16 dstdata = fetchword(dstaddr);
4779: uint8 bits = 16;
4780: uint8 count = srcdata & 63;
4781: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4782:
4783: storeword(dstaddr, outdata);
4784: PC+= 4;
4785: }
4786:
4787: void cpu_op_1589b(t_ipc *ipc) /* ASL */ {
4788: /* mask ffff, bits e1f8, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
4789: unsigned int srcdata = 1;
4790: uint32 dstaddr = ipc->dst;
4791: uint16 dstdata = fetchword(dstaddr);
4792: uint8 bits = 16;
4793: uint8 count = srcdata & 63;
4794: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4795:
4796: storeword(dstaddr, outdata);
4797:
4798: if (!count)
4799: CFLAG = 0;
4800: else if (count >= bits) {
4801: CFLAG = (count == bits) ? dstdata & 1 : 0;
4802: XFLAG = (count == bits) ? dstdata & 1 : 0;
4803: VFLAG = !dstdata;
4804: } else {
4805: CFLAG = dstdata>>(bits-count) & 1;
4806: XFLAG = dstdata>>(bits-count) & 1;
4807: {
4808: uint16 mask = 0xffff << (15-count);
4809: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
4810: }
4811: }
4812: NFLAG = ((sint16)outdata) < 0;
4813: ZFLAG = !outdata;
4814: PC+= 4;
4815: }
4816:
4817: void cpu_op_1590a(t_ipc *ipc) /* ASL */ {
4818: /* mask ffff, bits e1f9, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
4819: unsigned int srcdata = 1;
4820: uint32 dstaddr = ipc->dst;
4821: uint16 dstdata = fetchword(dstaddr);
4822: uint8 bits = 16;
4823: uint8 count = srcdata & 63;
4824: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4825:
4826: storeword(dstaddr, outdata);
4827: PC+= 6;
4828: }
4829:
4830: void cpu_op_1590b(t_ipc *ipc) /* ASL */ {
4831: /* mask ffff, bits e1f9, mnemonic 70, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
4832: unsigned int srcdata = 1;
4833: uint32 dstaddr = ipc->dst;
4834: uint16 dstdata = fetchword(dstaddr);
4835: uint8 bits = 16;
4836: uint8 count = srcdata & 63;
4837: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4838:
4839: storeword(dstaddr, outdata);
4840:
4841: if (!count)
4842: CFLAG = 0;
4843: else if (count >= bits) {
4844: CFLAG = (count == bits) ? dstdata & 1 : 0;
4845: XFLAG = (count == bits) ? dstdata & 1 : 0;
4846: VFLAG = !dstdata;
4847: } else {
4848: CFLAG = dstdata>>(bits-count) & 1;
4849: XFLAG = dstdata>>(bits-count) & 1;
4850: {
4851: uint16 mask = 0xffff << (15-count);
4852: VFLAG = ((dstdata & mask) != mask) && ((dstdata & mask) != 0);
4853: }
4854: }
4855: NFLAG = ((sint16)outdata) < 0;
4856: ZFLAG = !outdata;
4857: PC+= 6;
4858: }
4859:
4860: void cpu_op_1591a(t_ipc *ipc) /* LSL */ {
4861: /* mask fff8, bits e3d0, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
4862: unsigned int srcdata = 1;
4863: int dstreg = (ipc->opcode >> 0) & 7;
4864: uint32 dstaddr = ADDRREG(dstreg);
4865: uint16 dstdata = fetchword(dstaddr);
4866: uint8 bits = 16;
4867: uint8 count = srcdata & 63;
4868: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4869:
4870: storeword(dstaddr, outdata);
4871: PC+= 2;
4872: }
4873:
4874: void cpu_op_1591b(t_ipc *ipc) /* LSL */ {
4875: /* mask fff8, bits e3d0, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
4876: unsigned int srcdata = 1;
4877: int dstreg = (ipc->opcode >> 0) & 7;
4878: uint32 dstaddr = ADDRREG(dstreg);
4879: uint16 dstdata = fetchword(dstaddr);
4880: uint8 bits = 16;
4881: uint8 count = srcdata & 63;
4882: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4883:
4884: storeword(dstaddr, outdata);
4885:
4886: if (!count)
4887: CFLAG = 0;
4888: else if (count >= bits) {
4889: CFLAG = (count == bits) ? dstdata & 1 : 0;
4890: XFLAG = (count == bits) ? dstdata & 1 : 0;
4891: } else {
4892: CFLAG = dstdata>>(bits-count) & 1;
4893: XFLAG = dstdata>>(bits-count) & 1;
4894: }
4895: VFLAG = 0;
4896: NFLAG = ((sint16)outdata) < 0;
4897: ZFLAG = !outdata;
4898: PC+= 2;
4899: }
4900:
4901: void cpu_op_1592a(t_ipc *ipc) /* LSL */ {
4902: /* mask fff8, bits e3d8, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
4903: unsigned int srcdata = 1;
4904: int dstreg = (ipc->opcode >> 0) & 7;
4905: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
4906: uint16 dstdata = fetchword(dstaddr);
4907: uint8 bits = 16;
4908: uint8 count = srcdata & 63;
4909: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4910:
4911: storeword(dstaddr, outdata);
4912: PC+= 2;
4913: }
4914:
4915: void cpu_op_1592b(t_ipc *ipc) /* LSL */ {
4916: /* mask fff8, bits e3d8, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
4917: unsigned int srcdata = 1;
4918: int dstreg = (ipc->opcode >> 0) & 7;
4919: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
4920: uint16 dstdata = fetchword(dstaddr);
4921: uint8 bits = 16;
4922: uint8 count = srcdata & 63;
4923: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4924:
4925: storeword(dstaddr, outdata);
4926:
4927: if (!count)
4928: CFLAG = 0;
4929: else if (count >= bits) {
4930: CFLAG = (count == bits) ? dstdata & 1 : 0;
4931: XFLAG = (count == bits) ? dstdata & 1 : 0;
4932: } else {
4933: CFLAG = dstdata>>(bits-count) & 1;
4934: XFLAG = dstdata>>(bits-count) & 1;
4935: }
4936: VFLAG = 0;
4937: NFLAG = ((sint16)outdata) < 0;
4938: ZFLAG = !outdata;
4939: PC+= 2;
4940: }
4941:
4942: void cpu_op_1593a(t_ipc *ipc) /* LSL */ {
4943: /* mask fff8, bits e3e0, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
4944: unsigned int srcdata = 1;
4945: int dstreg = (ipc->opcode >> 0) & 7;
4946: uint32 dstaddr = ADDRREG(dstreg)-=2;
4947: uint16 dstdata = fetchword(dstaddr);
4948: uint8 bits = 16;
4949: uint8 count = srcdata & 63;
4950: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4951:
4952: storeword(dstaddr, outdata);
4953: PC+= 2;
4954: }
4955:
4956: void cpu_op_1593b(t_ipc *ipc) /* LSL */ {
4957: /* mask fff8, bits e3e0, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
4958: unsigned int srcdata = 1;
4959: int dstreg = (ipc->opcode >> 0) & 7;
4960: uint32 dstaddr = ADDRREG(dstreg)-=2;
4961: uint16 dstdata = fetchword(dstaddr);
4962: uint8 bits = 16;
4963: uint8 count = srcdata & 63;
4964: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4965:
4966: storeword(dstaddr, outdata);
4967:
4968: if (!count)
4969: CFLAG = 0;
4970: else if (count >= bits) {
4971: CFLAG = (count == bits) ? dstdata & 1 : 0;
4972: XFLAG = (count == bits) ? dstdata & 1 : 0;
4973: } else {
4974: CFLAG = dstdata>>(bits-count) & 1;
4975: XFLAG = dstdata>>(bits-count) & 1;
4976: }
4977: VFLAG = 0;
4978: NFLAG = ((sint16)outdata) < 0;
4979: ZFLAG = !outdata;
4980: PC+= 2;
4981: }
4982:
4983: void cpu_op_1594a(t_ipc *ipc) /* LSL */ {
4984: /* mask fff8, bits e3e8, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
4985: unsigned int srcdata = 1;
4986: int dstreg = (ipc->opcode >> 0) & 7;
4987: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
4988: uint16 dstdata = fetchword(dstaddr);
4989: uint8 bits = 16;
4990: uint8 count = srcdata & 63;
4991: uint16 outdata = count >= bits ? 0 : (dstdata << count);
4992:
4993: storeword(dstaddr, outdata);
4994: PC+= 4;
4995: }
4996:
4997: void cpu_op_1594b(t_ipc *ipc) /* LSL */ {
4998: /* mask fff8, bits e3e8, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
4999: unsigned int srcdata = 1;
5000: int dstreg = (ipc->opcode >> 0) & 7;
5001: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
5002: uint16 dstdata = fetchword(dstaddr);
5003: uint8 bits = 16;
5004: uint8 count = srcdata & 63;
5005: uint16 outdata = count >= bits ? 0 : (dstdata << count);
5006:
5007: storeword(dstaddr, outdata);
5008:
5009: if (!count)
5010: CFLAG = 0;
5011: else if (count >= bits) {
5012: CFLAG = (count == bits) ? dstdata & 1 : 0;
5013: XFLAG = (count == bits) ? dstdata & 1 : 0;
5014: } else {
5015: CFLAG = dstdata>>(bits-count) & 1;
5016: XFLAG = dstdata>>(bits-count) & 1;
5017: }
5018: VFLAG = 0;
5019: NFLAG = ((sint16)outdata) < 0;
5020: ZFLAG = !outdata;
5021: PC+= 4;
5022: }
5023:
5024: void cpu_op_1595a(t_ipc *ipc) /* LSL */ {
5025: /* mask fff8, bits e3f0, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
5026: unsigned int srcdata = 1;
5027: int dstreg = (ipc->opcode >> 0) & 7;
5028: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
5029: uint16 dstdata = fetchword(dstaddr);
5030: uint8 bits = 16;
5031: uint8 count = srcdata & 63;
5032: uint16 outdata = count >= bits ? 0 : (dstdata << count);
5033:
5034: storeword(dstaddr, outdata);
5035: PC+= 4;
5036: }
5037:
5038: void cpu_op_1595b(t_ipc *ipc) /* LSL */ {
5039: /* mask fff8, bits e3f0, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
5040: unsigned int srcdata = 1;
5041: int dstreg = (ipc->opcode >> 0) & 7;
5042: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
5043: uint16 dstdata = fetchword(dstaddr);
5044: uint8 bits = 16;
5045: uint8 count = srcdata & 63;
5046: uint16 outdata = count >= bits ? 0 : (dstdata << count);
5047:
5048: storeword(dstaddr, outdata);
5049:
5050: if (!count)
5051: CFLAG = 0;
5052: else if (count >= bits) {
5053: CFLAG = (count == bits) ? dstdata & 1 : 0;
5054: XFLAG = (count == bits) ? dstdata & 1 : 0;
5055: } else {
5056: CFLAG = dstdata>>(bits-count) & 1;
5057: XFLAG = dstdata>>(bits-count) & 1;
5058: }
5059: VFLAG = 0;
5060: NFLAG = ((sint16)outdata) < 0;
5061: ZFLAG = !outdata;
5062: PC+= 4;
5063: }
5064:
5065: void cpu_op_1596a(t_ipc *ipc) /* LSL */ {
5066: /* mask ffff, bits e3f8, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
5067: unsigned int srcdata = 1;
5068: uint32 dstaddr = ipc->dst;
5069: uint16 dstdata = fetchword(dstaddr);
5070: uint8 bits = 16;
5071: uint8 count = srcdata & 63;
5072: uint16 outdata = count >= bits ? 0 : (dstdata << count);
5073:
5074: storeword(dstaddr, outdata);
5075: PC+= 4;
5076: }
5077:
5078: void cpu_op_1596b(t_ipc *ipc) /* LSL */ {
5079: /* mask ffff, bits e3f8, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
5080: unsigned int srcdata = 1;
5081: uint32 dstaddr = ipc->dst;
5082: uint16 dstdata = fetchword(dstaddr);
5083: uint8 bits = 16;
5084: uint8 count = srcdata & 63;
5085: uint16 outdata = count >= bits ? 0 : (dstdata << count);
5086:
5087: storeword(dstaddr, outdata);
5088:
5089: if (!count)
5090: CFLAG = 0;
5091: else if (count >= bits) {
5092: CFLAG = (count == bits) ? dstdata & 1 : 0;
5093: XFLAG = (count == bits) ? dstdata & 1 : 0;
5094: } else {
5095: CFLAG = dstdata>>(bits-count) & 1;
5096: XFLAG = dstdata>>(bits-count) & 1;
5097: }
5098: VFLAG = 0;
5099: NFLAG = ((sint16)outdata) < 0;
5100: ZFLAG = !outdata;
5101: PC+= 4;
5102: }
5103:
5104: void cpu_op_1597a(t_ipc *ipc) /* LSL */ {
5105: /* mask ffff, bits e3f9, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
5106: unsigned int srcdata = 1;
5107: uint32 dstaddr = ipc->dst;
5108: uint16 dstdata = fetchword(dstaddr);
5109: uint8 bits = 16;
5110: uint8 count = srcdata & 63;
5111: uint16 outdata = count >= bits ? 0 : (dstdata << count);
5112:
5113: storeword(dstaddr, outdata);
5114: PC+= 6;
5115: }
5116:
5117: void cpu_op_1597b(t_ipc *ipc) /* LSL */ {
5118: /* mask ffff, bits e3f9, mnemonic 71, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
5119: unsigned int srcdata = 1;
5120: uint32 dstaddr = ipc->dst;
5121: uint16 dstdata = fetchword(dstaddr);
5122: uint8 bits = 16;
5123: uint8 count = srcdata & 63;
5124: uint16 outdata = count >= bits ? 0 : (dstdata << count);
5125:
5126: storeword(dstaddr, outdata);
5127:
5128: if (!count)
5129: CFLAG = 0;
5130: else if (count >= bits) {
5131: CFLAG = (count == bits) ? dstdata & 1 : 0;
5132: XFLAG = (count == bits) ? dstdata & 1 : 0;
5133: } else {
5134: CFLAG = dstdata>>(bits-count) & 1;
5135: XFLAG = dstdata>>(bits-count) & 1;
5136: }
5137: VFLAG = 0;
5138: NFLAG = ((sint16)outdata) < 0;
5139: ZFLAG = !outdata;
5140: PC+= 6;
5141: }
5142:
5143: void cpu_op_1598a(t_ipc *ipc) /* ROXL */ {
5144: /* mask fff8, bits e5d0, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
5145: unsigned int srcdata = 1;
5146: int dstreg = (ipc->opcode >> 0) & 7;
5147: uint32 dstaddr = ADDRREG(dstreg);
5148: uint16 dstdata = fetchword(dstaddr);
5149: uint8 bits = 16;
5150: uint8 loop = srcdata & 63;
5151: uint8 cflag = CFLAG;
5152: uint8 xflag = XFLAG;
5153: uint16 outdata = dstdata;
5154:
5155: while(loop) {
5156: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5157: outdata<<= 1;
5158: outdata |= xflag;
5159: xflag = cflag;
5160: loop--;
5161: }
5162: storeword(dstaddr, outdata);
5163: PC+= 2;
5164: }
5165:
5166: void cpu_op_1598b(t_ipc *ipc) /* ROXL */ {
5167: /* mask fff8, bits e5d0, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
5168: unsigned int srcdata = 1;
5169: int dstreg = (ipc->opcode >> 0) & 7;
5170: uint32 dstaddr = ADDRREG(dstreg);
5171: uint16 dstdata = fetchword(dstaddr);
5172: uint8 bits = 16;
5173: uint8 loop = srcdata & 63;
5174: uint8 cflag = CFLAG;
5175: uint8 xflag = XFLAG;
5176: uint16 outdata = dstdata;
5177:
5178: while(loop) {
5179: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5180: outdata<<= 1;
5181: outdata |= xflag;
5182: xflag = cflag;
5183: loop--;
5184: }
5185: storeword(dstaddr, outdata);
5186:
5187: XFLAG = xflag;
5188: CFLAG = xflag;
5189: NFLAG = ((sint16)outdata) < 0;
5190: ZFLAG = !outdata;
5191: VFLAG = 0;
5192: PC+= 2;
5193: }
5194:
5195: void cpu_op_1599a(t_ipc *ipc) /* ROXL */ {
5196: /* mask fff8, bits e5d8, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
5197: unsigned int srcdata = 1;
5198: int dstreg = (ipc->opcode >> 0) & 7;
5199: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
5200: uint16 dstdata = fetchword(dstaddr);
5201: uint8 bits = 16;
5202: uint8 loop = srcdata & 63;
5203: uint8 cflag = CFLAG;
5204: uint8 xflag = XFLAG;
5205: uint16 outdata = dstdata;
5206:
5207: while(loop) {
5208: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5209: outdata<<= 1;
5210: outdata |= xflag;
5211: xflag = cflag;
5212: loop--;
5213: }
5214: storeword(dstaddr, outdata);
5215: PC+= 2;
5216: }
5217:
5218: void cpu_op_1599b(t_ipc *ipc) /* ROXL */ {
5219: /* mask fff8, bits e5d8, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
5220: unsigned int srcdata = 1;
5221: int dstreg = (ipc->opcode >> 0) & 7;
5222: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
5223: uint16 dstdata = fetchword(dstaddr);
5224: uint8 bits = 16;
5225: uint8 loop = srcdata & 63;
5226: uint8 cflag = CFLAG;
5227: uint8 xflag = XFLAG;
5228: uint16 outdata = dstdata;
5229:
5230: while(loop) {
5231: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5232: outdata<<= 1;
5233: outdata |= xflag;
5234: xflag = cflag;
5235: loop--;
5236: }
5237: storeword(dstaddr, outdata);
5238:
5239: XFLAG = xflag;
5240: CFLAG = xflag;
5241: NFLAG = ((sint16)outdata) < 0;
5242: ZFLAG = !outdata;
5243: VFLAG = 0;
5244: PC+= 2;
5245: }
5246:
5247: void cpu_op_1600a(t_ipc *ipc) /* ROXL */ {
5248: /* mask fff8, bits e5e0, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
5249: unsigned int srcdata = 1;
5250: int dstreg = (ipc->opcode >> 0) & 7;
5251: uint32 dstaddr = ADDRREG(dstreg)-=2;
5252: uint16 dstdata = fetchword(dstaddr);
5253: uint8 bits = 16;
5254: uint8 loop = srcdata & 63;
5255: uint8 cflag = CFLAG;
5256: uint8 xflag = XFLAG;
5257: uint16 outdata = dstdata;
5258:
5259: while(loop) {
5260: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5261: outdata<<= 1;
5262: outdata |= xflag;
5263: xflag = cflag;
5264: loop--;
5265: }
5266: storeword(dstaddr, outdata);
5267: PC+= 2;
5268: }
5269:
5270: void cpu_op_1600b(t_ipc *ipc) /* ROXL */ {
5271: /* mask fff8, bits e5e0, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
5272: unsigned int srcdata = 1;
5273: int dstreg = (ipc->opcode >> 0) & 7;
5274: uint32 dstaddr = ADDRREG(dstreg)-=2;
5275: uint16 dstdata = fetchword(dstaddr);
5276: uint8 bits = 16;
5277: uint8 loop = srcdata & 63;
5278: uint8 cflag = CFLAG;
5279: uint8 xflag = XFLAG;
5280: uint16 outdata = dstdata;
5281:
5282: while(loop) {
5283: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5284: outdata<<= 1;
5285: outdata |= xflag;
5286: xflag = cflag;
5287: loop--;
5288: }
5289: storeword(dstaddr, outdata);
5290:
5291: XFLAG = xflag;
5292: CFLAG = xflag;
5293: NFLAG = ((sint16)outdata) < 0;
5294: ZFLAG = !outdata;
5295: VFLAG = 0;
5296: PC+= 2;
5297: }
5298:
5299: void cpu_op_1601a(t_ipc *ipc) /* ROXL */ {
5300: /* mask fff8, bits e5e8, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
5301: unsigned int srcdata = 1;
5302: int dstreg = (ipc->opcode >> 0) & 7;
5303: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
5304: uint16 dstdata = fetchword(dstaddr);
5305: uint8 bits = 16;
5306: uint8 loop = srcdata & 63;
5307: uint8 cflag = CFLAG;
5308: uint8 xflag = XFLAG;
5309: uint16 outdata = dstdata;
5310:
5311: while(loop) {
5312: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5313: outdata<<= 1;
5314: outdata |= xflag;
5315: xflag = cflag;
5316: loop--;
5317: }
5318: storeword(dstaddr, outdata);
5319: PC+= 4;
5320: }
5321:
5322: void cpu_op_1601b(t_ipc *ipc) /* ROXL */ {
5323: /* mask fff8, bits e5e8, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
5324: unsigned int srcdata = 1;
5325: int dstreg = (ipc->opcode >> 0) & 7;
5326: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
5327: uint16 dstdata = fetchword(dstaddr);
5328: uint8 bits = 16;
5329: uint8 loop = srcdata & 63;
5330: uint8 cflag = CFLAG;
5331: uint8 xflag = XFLAG;
5332: uint16 outdata = dstdata;
5333:
5334: while(loop) {
5335: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5336: outdata<<= 1;
5337: outdata |= xflag;
5338: xflag = cflag;
5339: loop--;
5340: }
5341: storeword(dstaddr, outdata);
5342:
5343: XFLAG = xflag;
5344: CFLAG = xflag;
5345: NFLAG = ((sint16)outdata) < 0;
5346: ZFLAG = !outdata;
5347: VFLAG = 0;
5348: PC+= 4;
5349: }
5350:
5351: void cpu_op_1602a(t_ipc *ipc) /* ROXL */ {
5352: /* mask fff8, bits e5f0, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
5353: unsigned int srcdata = 1;
5354: int dstreg = (ipc->opcode >> 0) & 7;
5355: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
5356: uint16 dstdata = fetchword(dstaddr);
5357: uint8 bits = 16;
5358: uint8 loop = srcdata & 63;
5359: uint8 cflag = CFLAG;
5360: uint8 xflag = XFLAG;
5361: uint16 outdata = dstdata;
5362:
5363: while(loop) {
5364: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5365: outdata<<= 1;
5366: outdata |= xflag;
5367: xflag = cflag;
5368: loop--;
5369: }
5370: storeword(dstaddr, outdata);
5371: PC+= 4;
5372: }
5373:
5374: void cpu_op_1602b(t_ipc *ipc) /* ROXL */ {
5375: /* mask fff8, bits e5f0, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
5376: unsigned int srcdata = 1;
5377: int dstreg = (ipc->opcode >> 0) & 7;
5378: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
5379: uint16 dstdata = fetchword(dstaddr);
5380: uint8 bits = 16;
5381: uint8 loop = srcdata & 63;
5382: uint8 cflag = CFLAG;
5383: uint8 xflag = XFLAG;
5384: uint16 outdata = dstdata;
5385:
5386: while(loop) {
5387: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5388: outdata<<= 1;
5389: outdata |= xflag;
5390: xflag = cflag;
5391: loop--;
5392: }
5393: storeword(dstaddr, outdata);
5394:
5395: XFLAG = xflag;
5396: CFLAG = xflag;
5397: NFLAG = ((sint16)outdata) < 0;
5398: ZFLAG = !outdata;
5399: VFLAG = 0;
5400: PC+= 4;
5401: }
5402:
5403: void cpu_op_1603a(t_ipc *ipc) /* ROXL */ {
5404: /* mask ffff, bits e5f8, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
5405: unsigned int srcdata = 1;
5406: uint32 dstaddr = ipc->dst;
5407: uint16 dstdata = fetchword(dstaddr);
5408: uint8 bits = 16;
5409: uint8 loop = srcdata & 63;
5410: uint8 cflag = CFLAG;
5411: uint8 xflag = XFLAG;
5412: uint16 outdata = dstdata;
5413:
5414: while(loop) {
5415: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5416: outdata<<= 1;
5417: outdata |= xflag;
5418: xflag = cflag;
5419: loop--;
5420: }
5421: storeword(dstaddr, outdata);
5422: PC+= 4;
5423: }
5424:
5425: void cpu_op_1603b(t_ipc *ipc) /* ROXL */ {
5426: /* mask ffff, bits e5f8, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
5427: unsigned int srcdata = 1;
5428: uint32 dstaddr = ipc->dst;
5429: uint16 dstdata = fetchword(dstaddr);
5430: uint8 bits = 16;
5431: uint8 loop = srcdata & 63;
5432: uint8 cflag = CFLAG;
5433: uint8 xflag = XFLAG;
5434: uint16 outdata = dstdata;
5435:
5436: while(loop) {
5437: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5438: outdata<<= 1;
5439: outdata |= xflag;
5440: xflag = cflag;
5441: loop--;
5442: }
5443: storeword(dstaddr, outdata);
5444:
5445: XFLAG = xflag;
5446: CFLAG = xflag;
5447: NFLAG = ((sint16)outdata) < 0;
5448: ZFLAG = !outdata;
5449: VFLAG = 0;
5450: PC+= 4;
5451: }
5452:
5453: void cpu_op_1604a(t_ipc *ipc) /* ROXL */ {
5454: /* mask ffff, bits e5f9, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
5455: unsigned int srcdata = 1;
5456: uint32 dstaddr = ipc->dst;
5457: uint16 dstdata = fetchword(dstaddr);
5458: uint8 bits = 16;
5459: uint8 loop = srcdata & 63;
5460: uint8 cflag = CFLAG;
5461: uint8 xflag = XFLAG;
5462: uint16 outdata = dstdata;
5463:
5464: while(loop) {
5465: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5466: outdata<<= 1;
5467: outdata |= xflag;
5468: xflag = cflag;
5469: loop--;
5470: }
5471: storeword(dstaddr, outdata);
5472: PC+= 6;
5473: }
5474:
5475: void cpu_op_1604b(t_ipc *ipc) /* ROXL */ {
5476: /* mask ffff, bits e5f9, mnemonic 72, priv 0, endblk 0, imm_notzero 0, used 1 set -1, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
5477: unsigned int srcdata = 1;
5478: uint32 dstaddr = ipc->dst;
5479: uint16 dstdata = fetchword(dstaddr);
5480: uint8 bits = 16;
5481: uint8 loop = srcdata & 63;
5482: uint8 cflag = CFLAG;
5483: uint8 xflag = XFLAG;
5484: uint16 outdata = dstdata;
5485:
5486: while(loop) {
5487: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5488: outdata<<= 1;
5489: outdata |= xflag;
5490: xflag = cflag;
5491: loop--;
5492: }
5493: storeword(dstaddr, outdata);
5494:
5495: XFLAG = xflag;
5496: CFLAG = xflag;
5497: NFLAG = ((sint16)outdata) < 0;
5498: ZFLAG = !outdata;
5499: VFLAG = 0;
5500: PC+= 6;
5501: }
5502:
5503: void cpu_op_1605a(t_ipc *ipc) /* ROL */ {
5504: /* mask fff8, bits e7d0, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
5505: unsigned int srcdata = 1;
5506: int dstreg = (ipc->opcode >> 0) & 7;
5507: uint32 dstaddr = ADDRREG(dstreg);
5508: uint16 dstdata = fetchword(dstaddr);
5509: uint8 bits = 16;
5510: uint8 loop = srcdata & 63;
5511: uint8 cflag = 0;
5512: uint16 outdata = dstdata;
5513:
5514: while(loop) {
5515: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5516: outdata<<= 1;
5517: if (cflag)
5518: outdata |= 1;
5519: loop--;
5520: }
5521: storeword(dstaddr, outdata);
5522: PC+= 2;
5523: }
5524:
5525: void cpu_op_1605b(t_ipc *ipc) /* ROL */ {
5526: /* mask fff8, bits e7d0, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 2, sbitpos 0, dbitpos 0, immvalue 1 */
5527: unsigned int srcdata = 1;
5528: int dstreg = (ipc->opcode >> 0) & 7;
5529: uint32 dstaddr = ADDRREG(dstreg);
5530: uint16 dstdata = fetchword(dstaddr);
5531: uint8 bits = 16;
5532: uint8 loop = srcdata & 63;
5533: uint8 cflag = 0;
5534: uint16 outdata = dstdata;
5535:
5536: while(loop) {
5537: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5538: outdata<<= 1;
5539: if (cflag)
5540: outdata |= 1;
5541: loop--;
5542: }
5543: storeword(dstaddr, outdata);
5544:
5545: CFLAG = cflag;
5546: NFLAG = ((sint16)outdata) < 0;
5547: ZFLAG = !outdata;
5548: VFLAG = 0;
5549: PC+= 2;
5550: }
5551:
5552: void cpu_op_1606a(t_ipc *ipc) /* ROL */ {
5553: /* mask fff8, bits e7d8, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
5554: unsigned int srcdata = 1;
5555: int dstreg = (ipc->opcode >> 0) & 7;
5556: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
5557: uint16 dstdata = fetchword(dstaddr);
5558: uint8 bits = 16;
5559: uint8 loop = srcdata & 63;
5560: uint8 cflag = 0;
5561: uint16 outdata = dstdata;
5562:
5563: while(loop) {
5564: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5565: outdata<<= 1;
5566: if (cflag)
5567: outdata |= 1;
5568: loop--;
5569: }
5570: storeword(dstaddr, outdata);
5571: PC+= 2;
5572: }
5573:
5574: void cpu_op_1606b(t_ipc *ipc) /* ROL */ {
5575: /* mask fff8, bits e7d8, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 3, sbitpos 0, dbitpos 0, immvalue 1 */
5576: unsigned int srcdata = 1;
5577: int dstreg = (ipc->opcode >> 0) & 7;
5578: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
5579: uint16 dstdata = fetchword(dstaddr);
5580: uint8 bits = 16;
5581: uint8 loop = srcdata & 63;
5582: uint8 cflag = 0;
5583: uint16 outdata = dstdata;
5584:
5585: while(loop) {
5586: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5587: outdata<<= 1;
5588: if (cflag)
5589: outdata |= 1;
5590: loop--;
5591: }
5592: storeword(dstaddr, outdata);
5593:
5594: CFLAG = cflag;
5595: NFLAG = ((sint16)outdata) < 0;
5596: ZFLAG = !outdata;
5597: VFLAG = 0;
5598: PC+= 2;
5599: }
5600:
5601: void cpu_op_1607a(t_ipc *ipc) /* ROL */ {
5602: /* mask fff8, bits e7e0, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
5603: unsigned int srcdata = 1;
5604: int dstreg = (ipc->opcode >> 0) & 7;
5605: uint32 dstaddr = ADDRREG(dstreg)-=2;
5606: uint16 dstdata = fetchword(dstaddr);
5607: uint8 bits = 16;
5608: uint8 loop = srcdata & 63;
5609: uint8 cflag = 0;
5610: uint16 outdata = dstdata;
5611:
5612: while(loop) {
5613: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5614: outdata<<= 1;
5615: if (cflag)
5616: outdata |= 1;
5617: loop--;
5618: }
5619: storeword(dstaddr, outdata);
5620: PC+= 2;
5621: }
5622:
5623: void cpu_op_1607b(t_ipc *ipc) /* ROL */ {
5624: /* mask fff8, bits e7e0, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 4, sbitpos 0, dbitpos 0, immvalue 1 */
5625: unsigned int srcdata = 1;
5626: int dstreg = (ipc->opcode >> 0) & 7;
5627: uint32 dstaddr = ADDRREG(dstreg)-=2;
5628: uint16 dstdata = fetchword(dstaddr);
5629: uint8 bits = 16;
5630: uint8 loop = srcdata & 63;
5631: uint8 cflag = 0;
5632: uint16 outdata = dstdata;
5633:
5634: while(loop) {
5635: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5636: outdata<<= 1;
5637: if (cflag)
5638: outdata |= 1;
5639: loop--;
5640: }
5641: storeword(dstaddr, outdata);
5642:
5643: CFLAG = cflag;
5644: NFLAG = ((sint16)outdata) < 0;
5645: ZFLAG = !outdata;
5646: VFLAG = 0;
5647: PC+= 2;
5648: }
5649:
5650: void cpu_op_1608a(t_ipc *ipc) /* ROL */ {
5651: /* mask fff8, bits e7e8, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
5652: unsigned int srcdata = 1;
5653: int dstreg = (ipc->opcode >> 0) & 7;
5654: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
5655: uint16 dstdata = fetchword(dstaddr);
5656: uint8 bits = 16;
5657: uint8 loop = srcdata & 63;
5658: uint8 cflag = 0;
5659: uint16 outdata = dstdata;
5660:
5661: while(loop) {
5662: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5663: outdata<<= 1;
5664: if (cflag)
5665: outdata |= 1;
5666: loop--;
5667: }
5668: storeword(dstaddr, outdata);
5669: PC+= 4;
5670: }
5671:
5672: void cpu_op_1608b(t_ipc *ipc) /* ROL */ {
5673: /* mask fff8, bits e7e8, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 5, sbitpos 0, dbitpos 0, immvalue 1 */
5674: unsigned int srcdata = 1;
5675: int dstreg = (ipc->opcode >> 0) & 7;
5676: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
5677: uint16 dstdata = fetchword(dstaddr);
5678: uint8 bits = 16;
5679: uint8 loop = srcdata & 63;
5680: uint8 cflag = 0;
5681: uint16 outdata = dstdata;
5682:
5683: while(loop) {
5684: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5685: outdata<<= 1;
5686: if (cflag)
5687: outdata |= 1;
5688: loop--;
5689: }
5690: storeword(dstaddr, outdata);
5691:
5692: CFLAG = cflag;
5693: NFLAG = ((sint16)outdata) < 0;
5694: ZFLAG = !outdata;
5695: VFLAG = 0;
5696: PC+= 4;
5697: }
5698:
5699: void cpu_op_1609a(t_ipc *ipc) /* ROL */ {
5700: /* mask fff8, bits e7f0, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
5701: unsigned int srcdata = 1;
5702: int dstreg = (ipc->opcode >> 0) & 7;
5703: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
5704: uint16 dstdata = fetchword(dstaddr);
5705: uint8 bits = 16;
5706: uint8 loop = srcdata & 63;
5707: uint8 cflag = 0;
5708: uint16 outdata = dstdata;
5709:
5710: while(loop) {
5711: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5712: outdata<<= 1;
5713: if (cflag)
5714: outdata |= 1;
5715: loop--;
5716: }
5717: storeword(dstaddr, outdata);
5718: PC+= 4;
5719: }
5720:
5721: void cpu_op_1609b(t_ipc *ipc) /* ROL */ {
5722: /* mask fff8, bits e7f0, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 6, sbitpos 0, dbitpos 0, immvalue 1 */
5723: unsigned int srcdata = 1;
5724: int dstreg = (ipc->opcode >> 0) & 7;
5725: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
5726: uint16 dstdata = fetchword(dstaddr);
5727: uint8 bits = 16;
5728: uint8 loop = srcdata & 63;
5729: uint8 cflag = 0;
5730: uint16 outdata = dstdata;
5731:
5732: while(loop) {
5733: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5734: outdata<<= 1;
5735: if (cflag)
5736: outdata |= 1;
5737: loop--;
5738: }
5739: storeword(dstaddr, outdata);
5740:
5741: CFLAG = cflag;
5742: NFLAG = ((sint16)outdata) < 0;
5743: ZFLAG = !outdata;
5744: VFLAG = 0;
5745: PC+= 4;
5746: }
5747:
5748: void cpu_op_1610a(t_ipc *ipc) /* ROL */ {
5749: /* mask ffff, bits e7f8, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
5750: unsigned int srcdata = 1;
5751: uint32 dstaddr = ipc->dst;
5752: uint16 dstdata = fetchword(dstaddr);
5753: uint8 bits = 16;
5754: uint8 loop = srcdata & 63;
5755: uint8 cflag = 0;
5756: uint16 outdata = dstdata;
5757:
5758: while(loop) {
5759: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5760: outdata<<= 1;
5761: if (cflag)
5762: outdata |= 1;
5763: loop--;
5764: }
5765: storeword(dstaddr, outdata);
5766: PC+= 4;
5767: }
5768:
5769: void cpu_op_1610b(t_ipc *ipc) /* ROL */ {
5770: /* mask ffff, bits e7f8, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 7, sbitpos 0, dbitpos 0, immvalue 1 */
5771: unsigned int srcdata = 1;
5772: uint32 dstaddr = ipc->dst;
5773: uint16 dstdata = fetchword(dstaddr);
5774: uint8 bits = 16;
5775: uint8 loop = srcdata & 63;
5776: uint8 cflag = 0;
5777: uint16 outdata = dstdata;
5778:
5779: while(loop) {
5780: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5781: outdata<<= 1;
5782: if (cflag)
5783: outdata |= 1;
5784: loop--;
5785: }
5786: storeword(dstaddr, outdata);
5787:
5788: CFLAG = cflag;
5789: NFLAG = ((sint16)outdata) < 0;
5790: ZFLAG = !outdata;
5791: VFLAG = 0;
5792: PC+= 4;
5793: }
5794:
5795: void cpu_op_1611a(t_ipc *ipc) /* ROL */ {
5796: /* mask ffff, bits e7f9, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
5797: unsigned int srcdata = 1;
5798: uint32 dstaddr = ipc->dst;
5799: uint16 dstdata = fetchword(dstaddr);
5800: uint8 bits = 16;
5801: uint8 loop = srcdata & 63;
5802: uint8 cflag = 0;
5803: uint16 outdata = dstdata;
5804:
5805: while(loop) {
5806: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5807: outdata<<= 1;
5808: if (cflag)
5809: outdata |= 1;
5810: loop--;
5811: }
5812: storeword(dstaddr, outdata);
5813: PC+= 6;
5814: }
5815:
5816: void cpu_op_1611b(t_ipc *ipc) /* ROL */ {
5817: /* mask ffff, bits e7f9, mnemonic 73, priv 0, endblk 0, imm_notzero 0, used 0 set -2, size 2, stype 14, dtype 8, sbitpos 0, dbitpos 0, immvalue 1 */
5818: unsigned int srcdata = 1;
5819: uint32 dstaddr = ipc->dst;
5820: uint16 dstdata = fetchword(dstaddr);
5821: uint8 bits = 16;
5822: uint8 loop = srcdata & 63;
5823: uint8 cflag = 0;
5824: uint16 outdata = dstdata;
5825:
5826: while(loop) {
5827: cflag = outdata & 1<<(bits-1) ? 1 : 0;
5828: outdata<<= 1;
5829: if (cflag)
5830: outdata |= 1;
5831: loop--;
5832: }
5833: storeword(dstaddr, outdata);
5834:
5835: CFLAG = cflag;
5836: NFLAG = ((sint16)outdata) < 0;
5837: ZFLAG = !outdata;
5838: VFLAG = 0;
5839: PC+= 6;
5840: }
5841:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.