|
|
1.1 root 1: /*****************************************************************************/
2: /* Generator - Sega Genesis emulation - (c) James Ponder 1997-1998 */
3: /*****************************************************************************/
4: /* */
5: /* cpu68k-d.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_1397a(t_ipc *ipc) /* ADD */ {
19: /* mask f1f8, bits d000, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
20: int srcreg = (ipc->opcode >> 0) & 7;
21: uint8 srcdata = DATAREG(srcreg);
22: int dstreg = (ipc->opcode >> 9) & 7;
23: uint8 dstdata = DATAREG(dstreg);
24: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
25:
26: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
27: PC+= 2;
28: }
29:
30: void cpu_op_1397b(t_ipc *ipc) /* ADD */ {
31: /* mask f1f8, bits d000, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
32: int srcreg = (ipc->opcode >> 0) & 7;
33: uint8 srcdata = DATAREG(srcreg);
34: int dstreg = (ipc->opcode >> 9) & 7;
35: uint8 dstdata = DATAREG(dstreg);
36: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
37:
38: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
39:
40: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
41: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
42: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
43: NFLAG = ((sint8)outdata) < 0;
44: ZFLAG = !outdata;
45: PC+= 2;
46: }
47:
48: void cpu_op_1398a(t_ipc *ipc) /* ADD */ {
49: /* mask f1f8, bits d008, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 1, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
50: int srcreg = (ipc->opcode >> 0) & 7;
51: uint8 srcdata = ADDRREG(srcreg);
52: int dstreg = (ipc->opcode >> 9) & 7;
53: uint8 dstdata = DATAREG(dstreg);
54: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
55:
56: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
57: PC+= 2;
58: }
59:
60: void cpu_op_1398b(t_ipc *ipc) /* ADD */ {
61: /* mask f1f8, bits d008, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 1, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
62: int srcreg = (ipc->opcode >> 0) & 7;
63: uint8 srcdata = ADDRREG(srcreg);
64: int dstreg = (ipc->opcode >> 9) & 7;
65: uint8 dstdata = DATAREG(dstreg);
66: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
67:
68: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
69:
70: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
71: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
72: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
73: NFLAG = ((sint8)outdata) < 0;
74: ZFLAG = !outdata;
75: PC+= 2;
76: }
77:
78: void cpu_op_1399a(t_ipc *ipc) /* ADD */ {
79: /* mask f1f8, bits d010, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 2, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
80: int srcreg = (ipc->opcode >> 0) & 7;
81: uint32 srcaddr = ADDRREG(srcreg);
82: uint8 srcdata = fetchbyte(srcaddr);
83: int dstreg = (ipc->opcode >> 9) & 7;
84: uint8 dstdata = DATAREG(dstreg);
85: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
86:
87: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
88: PC+= 2;
89: }
90:
91: void cpu_op_1399b(t_ipc *ipc) /* ADD */ {
92: /* mask f1f8, bits d010, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 2, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
93: int srcreg = (ipc->opcode >> 0) & 7;
94: uint32 srcaddr = ADDRREG(srcreg);
95: uint8 srcdata = fetchbyte(srcaddr);
96: int dstreg = (ipc->opcode >> 9) & 7;
97: uint8 dstdata = DATAREG(dstreg);
98: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
99:
100: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
101:
102: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
103: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
104: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
105: NFLAG = ((sint8)outdata) < 0;
106: ZFLAG = !outdata;
107: PC+= 2;
108: }
109:
110: void cpu_op_1400a(t_ipc *ipc) /* ADD */ {
111: /* mask f1f8, bits d018, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 3, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
112: int srcreg = (ipc->opcode >> 0) & 7;
113: uint32 srcaddr = ADDRREG(srcreg);
114: uint32 srcaddr_tmp = (ADDRREG(srcreg)+= (srcreg == 7 ? 2 : 1), 0);
115: uint8 srcdata = fetchbyte(srcaddr);
116: int dstreg = (ipc->opcode >> 9) & 7;
117: uint8 dstdata = DATAREG(dstreg);
118: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
119:
120: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
121: PC+= 2;
122: }
123:
124: void cpu_op_1400b(t_ipc *ipc) /* ADD */ {
125: /* mask f1f8, bits d018, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 3, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
126: int srcreg = (ipc->opcode >> 0) & 7;
127: uint32 srcaddr = ADDRREG(srcreg);
128: uint32 srcaddr_tmp = (ADDRREG(srcreg)+= (srcreg == 7 ? 2 : 1), 0);
129: uint8 srcdata = fetchbyte(srcaddr);
130: int dstreg = (ipc->opcode >> 9) & 7;
131: uint8 dstdata = DATAREG(dstreg);
132: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
133:
134: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
135:
136: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
137: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
138: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
139: NFLAG = ((sint8)outdata) < 0;
140: ZFLAG = !outdata;
141: PC+= 2;
142: }
143:
144: void cpu_op_1401a(t_ipc *ipc) /* ADD */ {
145: /* mask f1f8, bits d020, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 4, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
146: int srcreg = (ipc->opcode >> 0) & 7;
147: uint32 srcaddr = (ADDRREG(srcreg)-= (srcreg == 7 ? 2 : 1));
148: uint8 srcdata = fetchbyte(srcaddr);
149: int dstreg = (ipc->opcode >> 9) & 7;
150: uint8 dstdata = DATAREG(dstreg);
151: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
152:
153: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
154: PC+= 2;
155: }
156:
157: void cpu_op_1401b(t_ipc *ipc) /* ADD */ {
158: /* mask f1f8, bits d020, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 4, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
159: int srcreg = (ipc->opcode >> 0) & 7;
160: uint32 srcaddr = (ADDRREG(srcreg)-= (srcreg == 7 ? 2 : 1));
161: uint8 srcdata = fetchbyte(srcaddr);
162: int dstreg = (ipc->opcode >> 9) & 7;
163: uint8 dstdata = DATAREG(dstreg);
164: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
165:
166: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
167:
168: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
169: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
170: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
171: NFLAG = ((sint8)outdata) < 0;
172: ZFLAG = !outdata;
173: PC+= 2;
174: }
175:
176: void cpu_op_1402a(t_ipc *ipc) /* ADD */ {
177: /* mask f1f8, bits d028, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 5, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
178: int srcreg = (ipc->opcode >> 0) & 7;
179: uint32 srcaddr = (sint32)ADDRREG(srcreg) + (sint32)(sint16)ipc->src;
180: uint8 srcdata = fetchbyte(srcaddr);
181: int dstreg = (ipc->opcode >> 9) & 7;
182: uint8 dstdata = DATAREG(dstreg);
183: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
184:
185: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
186: PC+= 4;
187: }
188:
189: void cpu_op_1402b(t_ipc *ipc) /* ADD */ {
190: /* mask f1f8, bits d028, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 5, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
191: int srcreg = (ipc->opcode >> 0) & 7;
192: uint32 srcaddr = (sint32)ADDRREG(srcreg) + (sint32)(sint16)ipc->src;
193: uint8 srcdata = fetchbyte(srcaddr);
194: int dstreg = (ipc->opcode >> 9) & 7;
195: uint8 dstdata = DATAREG(dstreg);
196: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
197:
198: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
199:
200: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
201: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
202: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
203: NFLAG = ((sint8)outdata) < 0;
204: ZFLAG = !outdata;
205: PC+= 4;
206: }
207:
208: void cpu_op_1403a(t_ipc *ipc) /* ADD */ {
209: /* mask f1f8, bits d030, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 6, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
210: int srcreg = (ipc->opcode >> 0) & 7;
211: uint32 srcaddr = (sint32)ADDRREG(srcreg) + idxval_src(ipc);
212: uint8 srcdata = fetchbyte(srcaddr);
213: int dstreg = (ipc->opcode >> 9) & 7;
214: uint8 dstdata = DATAREG(dstreg);
215: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
216:
217: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
218: PC+= 4;
219: }
220:
221: void cpu_op_1403b(t_ipc *ipc) /* ADD */ {
222: /* mask f1f8, bits d030, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 6, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
223: int srcreg = (ipc->opcode >> 0) & 7;
224: uint32 srcaddr = (sint32)ADDRREG(srcreg) + idxval_src(ipc);
225: uint8 srcdata = fetchbyte(srcaddr);
226: int dstreg = (ipc->opcode >> 9) & 7;
227: uint8 dstdata = DATAREG(dstreg);
228: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
229:
230: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
231:
232: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
233: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
234: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
235: NFLAG = ((sint8)outdata) < 0;
236: ZFLAG = !outdata;
237: PC+= 4;
238: }
239:
240: void cpu_op_1404a(t_ipc *ipc) /* ADD */ {
241: /* mask f1ff, bits d038, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 7, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
242: uint32 srcaddr = ipc->src;
243: uint8 srcdata = fetchbyte(srcaddr);
244: int dstreg = (ipc->opcode >> 9) & 7;
245: uint8 dstdata = DATAREG(dstreg);
246: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
247:
248: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
249: PC+= 4;
250: }
251:
252: void cpu_op_1404b(t_ipc *ipc) /* ADD */ {
253: /* mask f1ff, bits d038, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 7, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
254: uint32 srcaddr = ipc->src;
255: uint8 srcdata = fetchbyte(srcaddr);
256: int dstreg = (ipc->opcode >> 9) & 7;
257: uint8 dstdata = DATAREG(dstreg);
258: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
259:
260: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
261:
262: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
263: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
264: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
265: NFLAG = ((sint8)outdata) < 0;
266: ZFLAG = !outdata;
267: PC+= 4;
268: }
269:
270: void cpu_op_1405a(t_ipc *ipc) /* ADD */ {
271: /* mask f1ff, bits d039, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 8, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
272: uint32 srcaddr = ipc->src;
273: uint8 srcdata = fetchbyte(srcaddr);
274: int dstreg = (ipc->opcode >> 9) & 7;
275: uint8 dstdata = DATAREG(dstreg);
276: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
277:
278: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
279: PC+= 6;
280: }
281:
282: void cpu_op_1405b(t_ipc *ipc) /* ADD */ {
283: /* mask f1ff, bits d039, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 8, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
284: uint32 srcaddr = ipc->src;
285: uint8 srcdata = fetchbyte(srcaddr);
286: int dstreg = (ipc->opcode >> 9) & 7;
287: uint8 dstdata = DATAREG(dstreg);
288: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
289:
290: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
291:
292: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
293: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
294: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
295: NFLAG = ((sint8)outdata) < 0;
296: ZFLAG = !outdata;
297: PC+= 6;
298: }
299:
300: void cpu_op_1406a(t_ipc *ipc) /* ADD */ {
301: /* mask f1ff, bits d03a, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 9, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
302: uint32 srcaddr = ipc->src;
303: uint8 srcdata = fetchbyte(srcaddr);
304: int dstreg = (ipc->opcode >> 9) & 7;
305: uint8 dstdata = DATAREG(dstreg);
306: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
307:
308: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
309: PC+= 4;
310: }
311:
312: void cpu_op_1406b(t_ipc *ipc) /* ADD */ {
313: /* mask f1ff, bits d03a, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 9, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
314: uint32 srcaddr = ipc->src;
315: uint8 srcdata = fetchbyte(srcaddr);
316: int dstreg = (ipc->opcode >> 9) & 7;
317: uint8 dstdata = DATAREG(dstreg);
318: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
319:
320: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
321:
322: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
323: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
324: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
325: NFLAG = ((sint8)outdata) < 0;
326: ZFLAG = !outdata;
327: PC+= 4;
328: }
329:
330: void cpu_op_1407a(t_ipc *ipc) /* ADD */ {
331: /* mask f1ff, bits d03b, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 10, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
332: uint32 srcaddr = idxval_src(ipc);
333: uint8 srcdata = fetchbyte(srcaddr);
334: int dstreg = (ipc->opcode >> 9) & 7;
335: uint8 dstdata = DATAREG(dstreg);
336: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
337:
338: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
339: PC+= 4;
340: }
341:
342: void cpu_op_1407b(t_ipc *ipc) /* ADD */ {
343: /* mask f1ff, bits d03b, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 10, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
344: uint32 srcaddr = idxval_src(ipc);
345: uint8 srcdata = fetchbyte(srcaddr);
346: int dstreg = (ipc->opcode >> 9) & 7;
347: uint8 dstdata = DATAREG(dstreg);
348: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
349:
350: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
351:
352: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
353: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
354: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
355: NFLAG = ((sint8)outdata) < 0;
356: ZFLAG = !outdata;
357: PC+= 4;
358: }
359:
360: void cpu_op_1408a(t_ipc *ipc) /* ADD */ {
361: /* mask f1ff, bits d03c, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 11, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
362: uint8 srcdata = ipc->src;
363: int dstreg = (ipc->opcode >> 9) & 7;
364: uint8 dstdata = DATAREG(dstreg);
365: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
366:
367: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
368: PC+= 4;
369: }
370:
371: void cpu_op_1408b(t_ipc *ipc) /* ADD */ {
372: /* mask f1ff, bits d03c, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 11, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
373: uint8 srcdata = ipc->src;
374: int dstreg = (ipc->opcode >> 9) & 7;
375: uint8 dstdata = DATAREG(dstreg);
376: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
377:
378: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
379:
380: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
381: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
382: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
383: NFLAG = ((sint8)outdata) < 0;
384: ZFLAG = !outdata;
385: PC+= 4;
386: }
387:
388: void cpu_op_1409a(t_ipc *ipc) /* ADD */ {
389: /* mask f1f8, bits d040, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
390: int srcreg = (ipc->opcode >> 0) & 7;
391: uint16 srcdata = DATAREG(srcreg);
392: int dstreg = (ipc->opcode >> 9) & 7;
393: uint16 dstdata = DATAREG(dstreg);
394: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
395:
396: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
397: PC+= 2;
398: }
399:
400: void cpu_op_1409b(t_ipc *ipc) /* ADD */ {
401: /* mask f1f8, bits d040, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
402: int srcreg = (ipc->opcode >> 0) & 7;
403: uint16 srcdata = DATAREG(srcreg);
404: int dstreg = (ipc->opcode >> 9) & 7;
405: uint16 dstdata = DATAREG(dstreg);
406: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
407:
408: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
409:
410: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
411: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
412: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
413: NFLAG = ((sint16)outdata) < 0;
414: ZFLAG = !outdata;
415: PC+= 2;
416: }
417:
418: void cpu_op_1410a(t_ipc *ipc) /* ADD */ {
419: /* mask f1f8, bits d048, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 1, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
420: int srcreg = (ipc->opcode >> 0) & 7;
421: uint16 srcdata = ADDRREG(srcreg);
422: int dstreg = (ipc->opcode >> 9) & 7;
423: uint16 dstdata = DATAREG(dstreg);
424: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
425:
426: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
427: PC+= 2;
428: }
429:
430: void cpu_op_1410b(t_ipc *ipc) /* ADD */ {
431: /* mask f1f8, bits d048, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 1, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
432: int srcreg = (ipc->opcode >> 0) & 7;
433: uint16 srcdata = ADDRREG(srcreg);
434: int dstreg = (ipc->opcode >> 9) & 7;
435: uint16 dstdata = DATAREG(dstreg);
436: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
437:
438: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
439:
440: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
441: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
442: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
443: NFLAG = ((sint16)outdata) < 0;
444: ZFLAG = !outdata;
445: PC+= 2;
446: }
447:
448: void cpu_op_1411a(t_ipc *ipc) /* ADD */ {
449: /* mask f1f8, bits d050, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 2, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
450: int srcreg = (ipc->opcode >> 0) & 7;
451: uint32 srcaddr = ADDRREG(srcreg);
452: uint16 srcdata = fetchword(srcaddr);
453: int dstreg = (ipc->opcode >> 9) & 7;
454: uint16 dstdata = DATAREG(dstreg);
455: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
456:
457: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
458: PC+= 2;
459: }
460:
461: void cpu_op_1411b(t_ipc *ipc) /* ADD */ {
462: /* mask f1f8, bits d050, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 2, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
463: int srcreg = (ipc->opcode >> 0) & 7;
464: uint32 srcaddr = ADDRREG(srcreg);
465: uint16 srcdata = fetchword(srcaddr);
466: int dstreg = (ipc->opcode >> 9) & 7;
467: uint16 dstdata = DATAREG(dstreg);
468: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
469:
470: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
471:
472: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
473: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
474: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
475: NFLAG = ((sint16)outdata) < 0;
476: ZFLAG = !outdata;
477: PC+= 2;
478: }
479:
480: void cpu_op_1412a(t_ipc *ipc) /* ADD */ {
481: /* mask f1f8, bits d058, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 3, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
482: int srcreg = (ipc->opcode >> 0) & 7;
483: uint32 srcaddr = (ADDRREG(srcreg)+=2, ADDRREG(srcreg)-2);
484: uint16 srcdata = fetchword(srcaddr);
485: int dstreg = (ipc->opcode >> 9) & 7;
486: uint16 dstdata = DATAREG(dstreg);
487: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
488:
489: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
490: PC+= 2;
491: }
492:
493: void cpu_op_1412b(t_ipc *ipc) /* ADD */ {
494: /* mask f1f8, bits d058, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 3, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
495: int srcreg = (ipc->opcode >> 0) & 7;
496: uint32 srcaddr = (ADDRREG(srcreg)+=2, ADDRREG(srcreg)-2);
497: uint16 srcdata = fetchword(srcaddr);
498: int dstreg = (ipc->opcode >> 9) & 7;
499: uint16 dstdata = DATAREG(dstreg);
500: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
501:
502: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
503:
504: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
505: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
506: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
507: NFLAG = ((sint16)outdata) < 0;
508: ZFLAG = !outdata;
509: PC+= 2;
510: }
511:
512: void cpu_op_1413a(t_ipc *ipc) /* ADD */ {
513: /* mask f1f8, bits d060, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 4, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
514: int srcreg = (ipc->opcode >> 0) & 7;
515: uint32 srcaddr = ADDRREG(srcreg)-=2;
516: uint16 srcdata = fetchword(srcaddr);
517: int dstreg = (ipc->opcode >> 9) & 7;
518: uint16 dstdata = DATAREG(dstreg);
519: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
520:
521: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
522: PC+= 2;
523: }
524:
525: void cpu_op_1413b(t_ipc *ipc) /* ADD */ {
526: /* mask f1f8, bits d060, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 4, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
527: int srcreg = (ipc->opcode >> 0) & 7;
528: uint32 srcaddr = ADDRREG(srcreg)-=2;
529: uint16 srcdata = fetchword(srcaddr);
530: int dstreg = (ipc->opcode >> 9) & 7;
531: uint16 dstdata = DATAREG(dstreg);
532: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
533:
534: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
535:
536: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
537: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
538: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
539: NFLAG = ((sint16)outdata) < 0;
540: ZFLAG = !outdata;
541: PC+= 2;
542: }
543:
544: void cpu_op_1414a(t_ipc *ipc) /* ADD */ {
545: /* mask f1f8, bits d068, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 5, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
546: int srcreg = (ipc->opcode >> 0) & 7;
547: uint32 srcaddr = (sint32)ADDRREG(srcreg) + (sint32)(sint16)ipc->src;
548: uint16 srcdata = fetchword(srcaddr);
549: int dstreg = (ipc->opcode >> 9) & 7;
550: uint16 dstdata = DATAREG(dstreg);
551: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
552:
553: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
554: PC+= 4;
555: }
556:
557: void cpu_op_1414b(t_ipc *ipc) /* ADD */ {
558: /* mask f1f8, bits d068, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 5, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
559: int srcreg = (ipc->opcode >> 0) & 7;
560: uint32 srcaddr = (sint32)ADDRREG(srcreg) + (sint32)(sint16)ipc->src;
561: uint16 srcdata = fetchword(srcaddr);
562: int dstreg = (ipc->opcode >> 9) & 7;
563: uint16 dstdata = DATAREG(dstreg);
564: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
565:
566: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
567:
568: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
569: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
570: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
571: NFLAG = ((sint16)outdata) < 0;
572: ZFLAG = !outdata;
573: PC+= 4;
574: }
575:
576: void cpu_op_1415a(t_ipc *ipc) /* ADD */ {
577: /* mask f1f8, bits d070, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 6, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
578: int srcreg = (ipc->opcode >> 0) & 7;
579: uint32 srcaddr = (sint32)ADDRREG(srcreg) + idxval_src(ipc);
580: uint16 srcdata = fetchword(srcaddr);
581: int dstreg = (ipc->opcode >> 9) & 7;
582: uint16 dstdata = DATAREG(dstreg);
583: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
584:
585: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
586: PC+= 4;
587: }
588:
589: void cpu_op_1415b(t_ipc *ipc) /* ADD */ {
590: /* mask f1f8, bits d070, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 6, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
591: int srcreg = (ipc->opcode >> 0) & 7;
592: uint32 srcaddr = (sint32)ADDRREG(srcreg) + idxval_src(ipc);
593: uint16 srcdata = fetchword(srcaddr);
594: int dstreg = (ipc->opcode >> 9) & 7;
595: uint16 dstdata = DATAREG(dstreg);
596: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
597:
598: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
599:
600: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
601: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
602: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
603: NFLAG = ((sint16)outdata) < 0;
604: ZFLAG = !outdata;
605: PC+= 4;
606: }
607:
608: void cpu_op_1416a(t_ipc *ipc) /* ADD */ {
609: /* mask f1ff, bits d078, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 7, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
610: uint32 srcaddr = ipc->src;
611: uint16 srcdata = fetchword(srcaddr);
612: int dstreg = (ipc->opcode >> 9) & 7;
613: uint16 dstdata = DATAREG(dstreg);
614: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
615:
616: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
617: PC+= 4;
618: }
619:
620: void cpu_op_1416b(t_ipc *ipc) /* ADD */ {
621: /* mask f1ff, bits d078, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 7, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
622: uint32 srcaddr = ipc->src;
623: uint16 srcdata = fetchword(srcaddr);
624: int dstreg = (ipc->opcode >> 9) & 7;
625: uint16 dstdata = DATAREG(dstreg);
626: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
627:
628: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
629:
630: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
631: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
632: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
633: NFLAG = ((sint16)outdata) < 0;
634: ZFLAG = !outdata;
635: PC+= 4;
636: }
637:
638: void cpu_op_1417a(t_ipc *ipc) /* ADD */ {
639: /* mask f1ff, bits d079, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 8, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
640: uint32 srcaddr = ipc->src;
641: uint16 srcdata = fetchword(srcaddr);
642: int dstreg = (ipc->opcode >> 9) & 7;
643: uint16 dstdata = DATAREG(dstreg);
644: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
645:
646: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
647: PC+= 6;
648: }
649:
650: void cpu_op_1417b(t_ipc *ipc) /* ADD */ {
651: /* mask f1ff, bits d079, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 8, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
652: uint32 srcaddr = ipc->src;
653: uint16 srcdata = fetchword(srcaddr);
654: int dstreg = (ipc->opcode >> 9) & 7;
655: uint16 dstdata = DATAREG(dstreg);
656: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
657:
658: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
659:
660: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
661: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
662: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
663: NFLAG = ((sint16)outdata) < 0;
664: ZFLAG = !outdata;
665: PC+= 6;
666: }
667:
668: void cpu_op_1418a(t_ipc *ipc) /* ADD */ {
669: /* mask f1ff, bits d07a, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 9, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
670: uint32 srcaddr = ipc->src;
671: uint16 srcdata = fetchword(srcaddr);
672: int dstreg = (ipc->opcode >> 9) & 7;
673: uint16 dstdata = DATAREG(dstreg);
674: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
675:
676: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
677: PC+= 4;
678: }
679:
680: void cpu_op_1418b(t_ipc *ipc) /* ADD */ {
681: /* mask f1ff, bits d07a, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 9, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
682: uint32 srcaddr = ipc->src;
683: uint16 srcdata = fetchword(srcaddr);
684: int dstreg = (ipc->opcode >> 9) & 7;
685: uint16 dstdata = DATAREG(dstreg);
686: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
687:
688: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
689:
690: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
691: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
692: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
693: NFLAG = ((sint16)outdata) < 0;
694: ZFLAG = !outdata;
695: PC+= 4;
696: }
697:
698: void cpu_op_1419a(t_ipc *ipc) /* ADD */ {
699: /* mask f1ff, bits d07b, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 10, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
700: uint32 srcaddr = idxval_src(ipc);
701: uint16 srcdata = fetchword(srcaddr);
702: int dstreg = (ipc->opcode >> 9) & 7;
703: uint16 dstdata = DATAREG(dstreg);
704: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
705:
706: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
707: PC+= 4;
708: }
709:
710: void cpu_op_1419b(t_ipc *ipc) /* ADD */ {
711: /* mask f1ff, bits d07b, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 10, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
712: uint32 srcaddr = idxval_src(ipc);
713: uint16 srcdata = fetchword(srcaddr);
714: int dstreg = (ipc->opcode >> 9) & 7;
715: uint16 dstdata = DATAREG(dstreg);
716: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
717:
718: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
719:
720: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
721: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
722: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
723: NFLAG = ((sint16)outdata) < 0;
724: ZFLAG = !outdata;
725: PC+= 4;
726: }
727:
728: void cpu_op_1420a(t_ipc *ipc) /* ADD */ {
729: /* mask f1ff, bits d07c, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 12, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
730: uint16 srcdata = ipc->src;
731: int dstreg = (ipc->opcode >> 9) & 7;
732: uint16 dstdata = DATAREG(dstreg);
733: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
734:
735: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
736: PC+= 4;
737: }
738:
739: void cpu_op_1420b(t_ipc *ipc) /* ADD */ {
740: /* mask f1ff, bits d07c, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 12, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
741: uint16 srcdata = ipc->src;
742: int dstreg = (ipc->opcode >> 9) & 7;
743: uint16 dstdata = DATAREG(dstreg);
744: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
745:
746: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
747:
748: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
749: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
750: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
751: NFLAG = ((sint16)outdata) < 0;
752: ZFLAG = !outdata;
753: PC+= 4;
754: }
755:
756: void cpu_op_1421a(t_ipc *ipc) /* ADD */ {
757: /* mask f1f8, bits d080, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
758: int srcreg = (ipc->opcode >> 0) & 7;
759: uint32 srcdata = DATAREG(srcreg);
760: int dstreg = (ipc->opcode >> 9) & 7;
761: uint32 dstdata = DATAREG(dstreg);
762: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
763:
764: DATAREG(dstreg) = outdata;
765: PC+= 2;
766: }
767:
768: void cpu_op_1421b(t_ipc *ipc) /* ADD */ {
769: /* mask f1f8, bits d080, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
770: int srcreg = (ipc->opcode >> 0) & 7;
771: uint32 srcdata = DATAREG(srcreg);
772: int dstreg = (ipc->opcode >> 9) & 7;
773: uint32 dstdata = DATAREG(dstreg);
774: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
775:
776: DATAREG(dstreg) = outdata;
777:
778: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
779: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
780: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
781: NFLAG = ((sint32)outdata) < 0;
782: ZFLAG = !outdata;
783: PC+= 2;
784: }
785:
786: void cpu_op_1422a(t_ipc *ipc) /* ADD */ {
787: /* mask f1f8, bits d088, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 1, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
788: int srcreg = (ipc->opcode >> 0) & 7;
789: uint32 srcdata = ADDRREG(srcreg);
790: int dstreg = (ipc->opcode >> 9) & 7;
791: uint32 dstdata = DATAREG(dstreg);
792: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
793:
794: DATAREG(dstreg) = outdata;
795: PC+= 2;
796: }
797:
798: void cpu_op_1422b(t_ipc *ipc) /* ADD */ {
799: /* mask f1f8, bits d088, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 1, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
800: int srcreg = (ipc->opcode >> 0) & 7;
801: uint32 srcdata = ADDRREG(srcreg);
802: int dstreg = (ipc->opcode >> 9) & 7;
803: uint32 dstdata = DATAREG(dstreg);
804: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
805:
806: DATAREG(dstreg) = outdata;
807:
808: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
809: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
810: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
811: NFLAG = ((sint32)outdata) < 0;
812: ZFLAG = !outdata;
813: PC+= 2;
814: }
815:
816: void cpu_op_1423a(t_ipc *ipc) /* ADD */ {
817: /* mask f1f8, bits d090, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 2, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
818: int srcreg = (ipc->opcode >> 0) & 7;
819: uint32 srcaddr = ADDRREG(srcreg);
820: uint32 srcdata = fetchlong(srcaddr);
821: int dstreg = (ipc->opcode >> 9) & 7;
822: uint32 dstdata = DATAREG(dstreg);
823: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
824:
825: DATAREG(dstreg) = outdata;
826: PC+= 2;
827: }
828:
829: void cpu_op_1423b(t_ipc *ipc) /* ADD */ {
830: /* mask f1f8, bits d090, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 2, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
831: int srcreg = (ipc->opcode >> 0) & 7;
832: uint32 srcaddr = ADDRREG(srcreg);
833: uint32 srcdata = fetchlong(srcaddr);
834: int dstreg = (ipc->opcode >> 9) & 7;
835: uint32 dstdata = DATAREG(dstreg);
836: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
837:
838: DATAREG(dstreg) = outdata;
839:
840: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
841: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
842: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
843: NFLAG = ((sint32)outdata) < 0;
844: ZFLAG = !outdata;
845: PC+= 2;
846: }
847:
848: void cpu_op_1424a(t_ipc *ipc) /* ADD */ {
849: /* mask f1f8, bits d098, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 3, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
850: int srcreg = (ipc->opcode >> 0) & 7;
851: uint32 srcaddr = (ADDRREG(srcreg)+=4, ADDRREG(srcreg)-4);
852: uint32 srcdata = fetchlong(srcaddr);
853: int dstreg = (ipc->opcode >> 9) & 7;
854: uint32 dstdata = DATAREG(dstreg);
855: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
856:
857: DATAREG(dstreg) = outdata;
858: PC+= 2;
859: }
860:
861: void cpu_op_1424b(t_ipc *ipc) /* ADD */ {
862: /* mask f1f8, bits d098, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 3, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
863: int srcreg = (ipc->opcode >> 0) & 7;
864: uint32 srcaddr = (ADDRREG(srcreg)+=4, ADDRREG(srcreg)-4);
865: uint32 srcdata = fetchlong(srcaddr);
866: int dstreg = (ipc->opcode >> 9) & 7;
867: uint32 dstdata = DATAREG(dstreg);
868: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
869:
870: DATAREG(dstreg) = outdata;
871:
872: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
873: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
874: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
875: NFLAG = ((sint32)outdata) < 0;
876: ZFLAG = !outdata;
877: PC+= 2;
878: }
879:
880: void cpu_op_1425a(t_ipc *ipc) /* ADD */ {
881: /* mask f1f8, bits d0a0, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 4, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
882: int srcreg = (ipc->opcode >> 0) & 7;
883: uint32 srcaddr = ADDRREG(srcreg)-=4;
884: uint32 srcdata = fetchlong(srcaddr);
885: int dstreg = (ipc->opcode >> 9) & 7;
886: uint32 dstdata = DATAREG(dstreg);
887: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
888:
889: DATAREG(dstreg) = outdata;
890: PC+= 2;
891: }
892:
893: void cpu_op_1425b(t_ipc *ipc) /* ADD */ {
894: /* mask f1f8, bits d0a0, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 4, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
895: int srcreg = (ipc->opcode >> 0) & 7;
896: uint32 srcaddr = ADDRREG(srcreg)-=4;
897: uint32 srcdata = fetchlong(srcaddr);
898: int dstreg = (ipc->opcode >> 9) & 7;
899: uint32 dstdata = DATAREG(dstreg);
900: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
901:
902: DATAREG(dstreg) = outdata;
903:
904: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
905: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
906: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
907: NFLAG = ((sint32)outdata) < 0;
908: ZFLAG = !outdata;
909: PC+= 2;
910: }
911:
912: void cpu_op_1426a(t_ipc *ipc) /* ADD */ {
913: /* mask f1f8, bits d0a8, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 5, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
914: int srcreg = (ipc->opcode >> 0) & 7;
915: uint32 srcaddr = (sint32)ADDRREG(srcreg) + (sint32)(sint16)ipc->src;
916: uint32 srcdata = fetchlong(srcaddr);
917: int dstreg = (ipc->opcode >> 9) & 7;
918: uint32 dstdata = DATAREG(dstreg);
919: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
920:
921: DATAREG(dstreg) = outdata;
922: PC+= 4;
923: }
924:
925: void cpu_op_1426b(t_ipc *ipc) /* ADD */ {
926: /* mask f1f8, bits d0a8, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 5, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
927: int srcreg = (ipc->opcode >> 0) & 7;
928: uint32 srcaddr = (sint32)ADDRREG(srcreg) + (sint32)(sint16)ipc->src;
929: uint32 srcdata = fetchlong(srcaddr);
930: int dstreg = (ipc->opcode >> 9) & 7;
931: uint32 dstdata = DATAREG(dstreg);
932: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
933:
934: DATAREG(dstreg) = outdata;
935:
936: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
937: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
938: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
939: NFLAG = ((sint32)outdata) < 0;
940: ZFLAG = !outdata;
941: PC+= 4;
942: }
943:
944: void cpu_op_1427a(t_ipc *ipc) /* ADD */ {
945: /* mask f1f8, bits d0b0, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 6, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
946: int srcreg = (ipc->opcode >> 0) & 7;
947: uint32 srcaddr = (sint32)ADDRREG(srcreg) + idxval_src(ipc);
948: uint32 srcdata = fetchlong(srcaddr);
949: int dstreg = (ipc->opcode >> 9) & 7;
950: uint32 dstdata = DATAREG(dstreg);
951: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
952:
953: DATAREG(dstreg) = outdata;
954: PC+= 4;
955: }
956:
957: void cpu_op_1427b(t_ipc *ipc) /* ADD */ {
958: /* mask f1f8, bits d0b0, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 6, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
959: int srcreg = (ipc->opcode >> 0) & 7;
960: uint32 srcaddr = (sint32)ADDRREG(srcreg) + idxval_src(ipc);
961: uint32 srcdata = fetchlong(srcaddr);
962: int dstreg = (ipc->opcode >> 9) & 7;
963: uint32 dstdata = DATAREG(dstreg);
964: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
965:
966: DATAREG(dstreg) = outdata;
967:
968: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
969: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
970: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
971: NFLAG = ((sint32)outdata) < 0;
972: ZFLAG = !outdata;
973: PC+= 4;
974: }
975:
976: void cpu_op_1428a(t_ipc *ipc) /* ADD */ {
977: /* mask f1ff, bits d0b8, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 7, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
978: uint32 srcaddr = ipc->src;
979: uint32 srcdata = fetchlong(srcaddr);
980: int dstreg = (ipc->opcode >> 9) & 7;
981: uint32 dstdata = DATAREG(dstreg);
982: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
983:
984: DATAREG(dstreg) = outdata;
985: PC+= 4;
986: }
987:
988: void cpu_op_1428b(t_ipc *ipc) /* ADD */ {
989: /* mask f1ff, bits d0b8, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 7, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
990: uint32 srcaddr = ipc->src;
991: uint32 srcdata = fetchlong(srcaddr);
992: int dstreg = (ipc->opcode >> 9) & 7;
993: uint32 dstdata = DATAREG(dstreg);
994: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
995:
996: DATAREG(dstreg) = outdata;
997:
998: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
999: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1000: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1001: NFLAG = ((sint32)outdata) < 0;
1002: ZFLAG = !outdata;
1003: PC+= 4;
1004: }
1005:
1006: void cpu_op_1429a(t_ipc *ipc) /* ADD */ {
1007: /* mask f1ff, bits d0b9, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 8, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
1008: uint32 srcaddr = ipc->src;
1009: uint32 srcdata = fetchlong(srcaddr);
1010: int dstreg = (ipc->opcode >> 9) & 7;
1011: uint32 dstdata = DATAREG(dstreg);
1012: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1013:
1014: DATAREG(dstreg) = outdata;
1015: PC+= 6;
1016: }
1017:
1018: void cpu_op_1429b(t_ipc *ipc) /* ADD */ {
1019: /* mask f1ff, bits d0b9, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 8, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
1020: uint32 srcaddr = ipc->src;
1021: uint32 srcdata = fetchlong(srcaddr);
1022: int dstreg = (ipc->opcode >> 9) & 7;
1023: uint32 dstdata = DATAREG(dstreg);
1024: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1025:
1026: DATAREG(dstreg) = outdata;
1027:
1028: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1029: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1030: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1031: NFLAG = ((sint32)outdata) < 0;
1032: ZFLAG = !outdata;
1033: PC+= 6;
1034: }
1035:
1036: void cpu_op_1430a(t_ipc *ipc) /* ADD */ {
1037: /* mask f1ff, bits d0ba, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 9, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
1038: uint32 srcaddr = ipc->src;
1039: uint32 srcdata = fetchlong(srcaddr);
1040: int dstreg = (ipc->opcode >> 9) & 7;
1041: uint32 dstdata = DATAREG(dstreg);
1042: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1043:
1044: DATAREG(dstreg) = outdata;
1045: PC+= 4;
1046: }
1047:
1048: void cpu_op_1430b(t_ipc *ipc) /* ADD */ {
1049: /* mask f1ff, bits d0ba, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 9, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
1050: uint32 srcaddr = ipc->src;
1051: uint32 srcdata = fetchlong(srcaddr);
1052: int dstreg = (ipc->opcode >> 9) & 7;
1053: uint32 dstdata = DATAREG(dstreg);
1054: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1055:
1056: DATAREG(dstreg) = outdata;
1057:
1058: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1059: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1060: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1061: NFLAG = ((sint32)outdata) < 0;
1062: ZFLAG = !outdata;
1063: PC+= 4;
1064: }
1065:
1066: void cpu_op_1431a(t_ipc *ipc) /* ADD */ {
1067: /* mask f1ff, bits d0bb, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 10, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
1068: uint32 srcaddr = idxval_src(ipc);
1069: uint32 srcdata = fetchlong(srcaddr);
1070: int dstreg = (ipc->opcode >> 9) & 7;
1071: uint32 dstdata = DATAREG(dstreg);
1072: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1073:
1074: DATAREG(dstreg) = outdata;
1075: PC+= 4;
1076: }
1077:
1078: void cpu_op_1431b(t_ipc *ipc) /* ADD */ {
1079: /* mask f1ff, bits d0bb, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 10, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
1080: uint32 srcaddr = idxval_src(ipc);
1081: uint32 srcdata = fetchlong(srcaddr);
1082: int dstreg = (ipc->opcode >> 9) & 7;
1083: uint32 dstdata = DATAREG(dstreg);
1084: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1085:
1086: DATAREG(dstreg) = outdata;
1087:
1088: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1089: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1090: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1091: NFLAG = ((sint32)outdata) < 0;
1092: ZFLAG = !outdata;
1093: PC+= 4;
1094: }
1095:
1096: void cpu_op_1432a(t_ipc *ipc) /* ADD */ {
1097: /* mask f1ff, bits d0bc, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 13, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
1098: uint32 srcdata = ipc->src;
1099: int dstreg = (ipc->opcode >> 9) & 7;
1100: uint32 dstdata = DATAREG(dstreg);
1101: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1102:
1103: DATAREG(dstreg) = outdata;
1104: PC+= 6;
1105: }
1106:
1107: void cpu_op_1432b(t_ipc *ipc) /* ADD */ {
1108: /* mask f1ff, bits d0bc, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 13, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
1109: uint32 srcdata = ipc->src;
1110: int dstreg = (ipc->opcode >> 9) & 7;
1111: uint32 dstdata = DATAREG(dstreg);
1112: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1113:
1114: DATAREG(dstreg) = outdata;
1115:
1116: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1117: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1118: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1119: NFLAG = ((sint32)outdata) < 0;
1120: ZFLAG = !outdata;
1121: PC+= 6;
1122: }
1123:
1124: void cpu_op_1433a(t_ipc *ipc) /* ADD */ {
1125: /* mask f1f8, bits d110, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 2, sbitpos 9, dbitpos 0, immvalue 0 */
1126: int srcreg = (ipc->opcode >> 9) & 7;
1127: uint8 srcdata = DATAREG(srcreg);
1128: int dstreg = (ipc->opcode >> 0) & 7;
1129: uint32 dstaddr = ADDRREG(dstreg);
1130: uint8 dstdata = fetchbyte(dstaddr);
1131: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1132:
1133: storebyte(dstaddr, outdata);
1134: PC+= 2;
1135: }
1136:
1137: void cpu_op_1433b(t_ipc *ipc) /* ADD */ {
1138: /* mask f1f8, bits d110, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 2, sbitpos 9, dbitpos 0, immvalue 0 */
1139: int srcreg = (ipc->opcode >> 9) & 7;
1140: uint8 srcdata = DATAREG(srcreg);
1141: int dstreg = (ipc->opcode >> 0) & 7;
1142: uint32 dstaddr = ADDRREG(dstreg);
1143: uint8 dstdata = fetchbyte(dstaddr);
1144: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1145:
1146: storebyte(dstaddr, outdata);
1147:
1148: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
1149: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
1150: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
1151: NFLAG = ((sint8)outdata) < 0;
1152: ZFLAG = !outdata;
1153: PC+= 2;
1154: }
1155:
1156: void cpu_op_1434a(t_ipc *ipc) /* ADD */ {
1157: /* mask f1f8, bits d118, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 3, sbitpos 9, dbitpos 0, immvalue 0 */
1158: int srcreg = (ipc->opcode >> 9) & 7;
1159: uint8 srcdata = DATAREG(srcreg);
1160: int dstreg = (ipc->opcode >> 0) & 7;
1161: uint32 dstaddr = ADDRREG(dstreg);
1162: uint32 dstaddr_tmp = (ADDRREG(dstreg)+= (dstreg == 7 ? 2 : 1), 0);
1163: uint8 dstdata = fetchbyte(dstaddr);
1164: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1165:
1166: storebyte(dstaddr, outdata);
1167: PC+= 2;
1168: }
1169:
1170: void cpu_op_1434b(t_ipc *ipc) /* ADD */ {
1171: /* mask f1f8, bits d118, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 3, sbitpos 9, dbitpos 0, immvalue 0 */
1172: int srcreg = (ipc->opcode >> 9) & 7;
1173: uint8 srcdata = DATAREG(srcreg);
1174: int dstreg = (ipc->opcode >> 0) & 7;
1175: uint32 dstaddr = ADDRREG(dstreg);
1176: uint32 dstaddr_tmp = (ADDRREG(dstreg)+= (dstreg == 7 ? 2 : 1), 0);
1177: uint8 dstdata = fetchbyte(dstaddr);
1178: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1179:
1180: storebyte(dstaddr, outdata);
1181:
1182: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
1183: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
1184: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
1185: NFLAG = ((sint8)outdata) < 0;
1186: ZFLAG = !outdata;
1187: PC+= 2;
1188: }
1189:
1190: void cpu_op_1435a(t_ipc *ipc) /* ADD */ {
1191: /* mask f1f8, bits d120, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 4, sbitpos 9, dbitpos 0, immvalue 0 */
1192: int srcreg = (ipc->opcode >> 9) & 7;
1193: uint8 srcdata = DATAREG(srcreg);
1194: int dstreg = (ipc->opcode >> 0) & 7;
1195: uint32 dstaddr = (ADDRREG(dstreg)-= (dstreg == 7 ? 2 : 1));
1196: uint8 dstdata = fetchbyte(dstaddr);
1197: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1198:
1199: storebyte(dstaddr, outdata);
1200: PC+= 2;
1201: }
1202:
1203: void cpu_op_1435b(t_ipc *ipc) /* ADD */ {
1204: /* mask f1f8, bits d120, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 4, 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: uint32 dstaddr = (ADDRREG(dstreg)-= (dstreg == 7 ? 2 : 1));
1209: uint8 dstdata = fetchbyte(dstaddr);
1210: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1211:
1212: storebyte(dstaddr, outdata);
1213:
1214: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
1215: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
1216: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
1217: NFLAG = ((sint8)outdata) < 0;
1218: ZFLAG = !outdata;
1219: PC+= 2;
1220: }
1221:
1222: void cpu_op_1436a(t_ipc *ipc) /* ADD */ {
1223: /* mask f1f8, bits d128, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 5, sbitpos 9, dbitpos 0, immvalue 0 */
1224: int srcreg = (ipc->opcode >> 9) & 7;
1225: uint8 srcdata = DATAREG(srcreg);
1226: int dstreg = (ipc->opcode >> 0) & 7;
1227: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
1228: uint8 dstdata = fetchbyte(dstaddr);
1229: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1230:
1231: storebyte(dstaddr, outdata);
1232: PC+= 4;
1233: }
1234:
1235: void cpu_op_1436b(t_ipc *ipc) /* ADD */ {
1236: /* mask f1f8, bits d128, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 5, sbitpos 9, dbitpos 0, immvalue 0 */
1237: int srcreg = (ipc->opcode >> 9) & 7;
1238: uint8 srcdata = DATAREG(srcreg);
1239: int dstreg = (ipc->opcode >> 0) & 7;
1240: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
1241: uint8 dstdata = fetchbyte(dstaddr);
1242: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1243:
1244: storebyte(dstaddr, outdata);
1245:
1246: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
1247: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
1248: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
1249: NFLAG = ((sint8)outdata) < 0;
1250: ZFLAG = !outdata;
1251: PC+= 4;
1252: }
1253:
1254: void cpu_op_1437a(t_ipc *ipc) /* ADD */ {
1255: /* mask f1f8, bits d130, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 6, sbitpos 9, dbitpos 0, immvalue 0 */
1256: int srcreg = (ipc->opcode >> 9) & 7;
1257: uint8 srcdata = DATAREG(srcreg);
1258: int dstreg = (ipc->opcode >> 0) & 7;
1259: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
1260: uint8 dstdata = fetchbyte(dstaddr);
1261: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1262:
1263: storebyte(dstaddr, outdata);
1264: PC+= 4;
1265: }
1266:
1267: void cpu_op_1437b(t_ipc *ipc) /* ADD */ {
1268: /* mask f1f8, bits d130, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 6, sbitpos 9, dbitpos 0, immvalue 0 */
1269: int srcreg = (ipc->opcode >> 9) & 7;
1270: uint8 srcdata = DATAREG(srcreg);
1271: int dstreg = (ipc->opcode >> 0) & 7;
1272: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
1273: uint8 dstdata = fetchbyte(dstaddr);
1274: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1275:
1276: storebyte(dstaddr, outdata);
1277:
1278: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
1279: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
1280: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
1281: NFLAG = ((sint8)outdata) < 0;
1282: ZFLAG = !outdata;
1283: PC+= 4;
1284: }
1285:
1286: void cpu_op_1438a(t_ipc *ipc) /* ADD */ {
1287: /* mask f1ff, bits d138, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 7, sbitpos 9, dbitpos 0, immvalue 0 */
1288: int srcreg = (ipc->opcode >> 9) & 7;
1289: uint8 srcdata = DATAREG(srcreg);
1290: uint32 dstaddr = ipc->dst;
1291: uint8 dstdata = fetchbyte(dstaddr);
1292: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1293:
1294: storebyte(dstaddr, outdata);
1295: PC+= 4;
1296: }
1297:
1298: void cpu_op_1438b(t_ipc *ipc) /* ADD */ {
1299: /* mask f1ff, bits d138, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 7, sbitpos 9, dbitpos 0, immvalue 0 */
1300: int srcreg = (ipc->opcode >> 9) & 7;
1301: uint8 srcdata = DATAREG(srcreg);
1302: uint32 dstaddr = ipc->dst;
1303: uint8 dstdata = fetchbyte(dstaddr);
1304: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1305:
1306: storebyte(dstaddr, outdata);
1307:
1308: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
1309: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
1310: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
1311: NFLAG = ((sint8)outdata) < 0;
1312: ZFLAG = !outdata;
1313: PC+= 4;
1314: }
1315:
1316: void cpu_op_1439a(t_ipc *ipc) /* ADD */ {
1317: /* mask f1ff, bits d139, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 8, sbitpos 9, dbitpos 0, immvalue 0 */
1318: int srcreg = (ipc->opcode >> 9) & 7;
1319: uint8 srcdata = DATAREG(srcreg);
1320: uint32 dstaddr = ipc->dst;
1321: uint8 dstdata = fetchbyte(dstaddr);
1322: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1323:
1324: storebyte(dstaddr, outdata);
1325: PC+= 6;
1326: }
1327:
1328: void cpu_op_1439b(t_ipc *ipc) /* ADD */ {
1329: /* mask f1ff, bits d139, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 1, stype 0, dtype 8, sbitpos 9, dbitpos 0, immvalue 0 */
1330: int srcreg = (ipc->opcode >> 9) & 7;
1331: uint8 srcdata = DATAREG(srcreg);
1332: uint32 dstaddr = ipc->dst;
1333: uint8 dstdata = fetchbyte(dstaddr);
1334: uint8 outdata = (sint8)dstdata + (sint8)srcdata;
1335:
1336: storebyte(dstaddr, outdata);
1337:
1338: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
1339: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
1340: XFLAG = CFLAG = srcdata > (0xFFu - (uint8)dstdata);
1341: NFLAG = ((sint8)outdata) < 0;
1342: ZFLAG = !outdata;
1343: PC+= 6;
1344: }
1345:
1346: void cpu_op_1440a(t_ipc *ipc) /* ADD */ {
1347: /* mask f1f8, bits d150, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 2, sbitpos 9, dbitpos 0, immvalue 0 */
1348: int srcreg = (ipc->opcode >> 9) & 7;
1349: uint16 srcdata = DATAREG(srcreg);
1350: int dstreg = (ipc->opcode >> 0) & 7;
1351: uint32 dstaddr = ADDRREG(dstreg);
1352: uint16 dstdata = fetchword(dstaddr);
1353: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1354:
1355: storeword(dstaddr, outdata);
1356: PC+= 2;
1357: }
1358:
1359: void cpu_op_1440b(t_ipc *ipc) /* ADD */ {
1360: /* mask f1f8, bits d150, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 2, sbitpos 9, dbitpos 0, immvalue 0 */
1361: int srcreg = (ipc->opcode >> 9) & 7;
1362: uint16 srcdata = DATAREG(srcreg);
1363: int dstreg = (ipc->opcode >> 0) & 7;
1364: uint32 dstaddr = ADDRREG(dstreg);
1365: uint16 dstdata = fetchword(dstaddr);
1366: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1367:
1368: storeword(dstaddr, outdata);
1369:
1370: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
1371: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
1372: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
1373: NFLAG = ((sint16)outdata) < 0;
1374: ZFLAG = !outdata;
1375: PC+= 2;
1376: }
1377:
1378: void cpu_op_1441a(t_ipc *ipc) /* ADD */ {
1379: /* mask f1f8, bits d158, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 3, sbitpos 9, dbitpos 0, immvalue 0 */
1380: int srcreg = (ipc->opcode >> 9) & 7;
1381: uint16 srcdata = DATAREG(srcreg);
1382: int dstreg = (ipc->opcode >> 0) & 7;
1383: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
1384: uint16 dstdata = fetchword(dstaddr);
1385: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1386:
1387: storeword(dstaddr, outdata);
1388: PC+= 2;
1389: }
1390:
1391: void cpu_op_1441b(t_ipc *ipc) /* ADD */ {
1392: /* mask f1f8, bits d158, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 3, sbitpos 9, dbitpos 0, immvalue 0 */
1393: int srcreg = (ipc->opcode >> 9) & 7;
1394: uint16 srcdata = DATAREG(srcreg);
1395: int dstreg = (ipc->opcode >> 0) & 7;
1396: uint32 dstaddr = (ADDRREG(dstreg)+=2, ADDRREG(dstreg)-2);
1397: uint16 dstdata = fetchword(dstaddr);
1398: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1399:
1400: storeword(dstaddr, outdata);
1401:
1402: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
1403: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
1404: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
1405: NFLAG = ((sint16)outdata) < 0;
1406: ZFLAG = !outdata;
1407: PC+= 2;
1408: }
1409:
1410: void cpu_op_1442a(t_ipc *ipc) /* ADD */ {
1411: /* mask f1f8, bits d160, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 4, sbitpos 9, dbitpos 0, immvalue 0 */
1412: int srcreg = (ipc->opcode >> 9) & 7;
1413: uint16 srcdata = DATAREG(srcreg);
1414: int dstreg = (ipc->opcode >> 0) & 7;
1415: uint32 dstaddr = ADDRREG(dstreg)-=2;
1416: uint16 dstdata = fetchword(dstaddr);
1417: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1418:
1419: storeword(dstaddr, outdata);
1420: PC+= 2;
1421: }
1422:
1423: void cpu_op_1442b(t_ipc *ipc) /* ADD */ {
1424: /* mask f1f8, bits d160, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 4, sbitpos 9, dbitpos 0, immvalue 0 */
1425: int srcreg = (ipc->opcode >> 9) & 7;
1426: uint16 srcdata = DATAREG(srcreg);
1427: int dstreg = (ipc->opcode >> 0) & 7;
1428: uint32 dstaddr = ADDRREG(dstreg)-=2;
1429: uint16 dstdata = fetchword(dstaddr);
1430: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1431:
1432: storeword(dstaddr, outdata);
1433:
1434: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
1435: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
1436: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
1437: NFLAG = ((sint16)outdata) < 0;
1438: ZFLAG = !outdata;
1439: PC+= 2;
1440: }
1441:
1442: void cpu_op_1443a(t_ipc *ipc) /* ADD */ {
1443: /* mask f1f8, bits d168, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 5, sbitpos 9, dbitpos 0, immvalue 0 */
1444: int srcreg = (ipc->opcode >> 9) & 7;
1445: uint16 srcdata = DATAREG(srcreg);
1446: int dstreg = (ipc->opcode >> 0) & 7;
1447: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
1448: uint16 dstdata = fetchword(dstaddr);
1449: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1450:
1451: storeword(dstaddr, outdata);
1452: PC+= 4;
1453: }
1454:
1455: void cpu_op_1443b(t_ipc *ipc) /* ADD */ {
1456: /* mask f1f8, bits d168, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 5, sbitpos 9, dbitpos 0, immvalue 0 */
1457: int srcreg = (ipc->opcode >> 9) & 7;
1458: uint16 srcdata = DATAREG(srcreg);
1459: int dstreg = (ipc->opcode >> 0) & 7;
1460: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
1461: uint16 dstdata = fetchword(dstaddr);
1462: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1463:
1464: storeword(dstaddr, outdata);
1465:
1466: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
1467: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
1468: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
1469: NFLAG = ((sint16)outdata) < 0;
1470: ZFLAG = !outdata;
1471: PC+= 4;
1472: }
1473:
1474: void cpu_op_1444a(t_ipc *ipc) /* ADD */ {
1475: /* mask f1f8, bits d170, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 6, sbitpos 9, dbitpos 0, immvalue 0 */
1476: int srcreg = (ipc->opcode >> 9) & 7;
1477: uint16 srcdata = DATAREG(srcreg);
1478: int dstreg = (ipc->opcode >> 0) & 7;
1479: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
1480: uint16 dstdata = fetchword(dstaddr);
1481: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1482:
1483: storeword(dstaddr, outdata);
1484: PC+= 4;
1485: }
1486:
1487: void cpu_op_1444b(t_ipc *ipc) /* ADD */ {
1488: /* mask f1f8, bits d170, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 6, sbitpos 9, dbitpos 0, immvalue 0 */
1489: int srcreg = (ipc->opcode >> 9) & 7;
1490: uint16 srcdata = DATAREG(srcreg);
1491: int dstreg = (ipc->opcode >> 0) & 7;
1492: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
1493: uint16 dstdata = fetchword(dstaddr);
1494: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1495:
1496: storeword(dstaddr, outdata);
1497:
1498: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
1499: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
1500: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
1501: NFLAG = ((sint16)outdata) < 0;
1502: ZFLAG = !outdata;
1503: PC+= 4;
1504: }
1505:
1506: void cpu_op_1445a(t_ipc *ipc) /* ADD */ {
1507: /* mask f1ff, bits d178, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 7, sbitpos 9, dbitpos 0, immvalue 0 */
1508: int srcreg = (ipc->opcode >> 9) & 7;
1509: uint16 srcdata = DATAREG(srcreg);
1510: uint32 dstaddr = ipc->dst;
1511: uint16 dstdata = fetchword(dstaddr);
1512: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1513:
1514: storeword(dstaddr, outdata);
1515: PC+= 4;
1516: }
1517:
1518: void cpu_op_1445b(t_ipc *ipc) /* ADD */ {
1519: /* mask f1ff, bits d178, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 7, sbitpos 9, dbitpos 0, immvalue 0 */
1520: int srcreg = (ipc->opcode >> 9) & 7;
1521: uint16 srcdata = DATAREG(srcreg);
1522: uint32 dstaddr = ipc->dst;
1523: uint16 dstdata = fetchword(dstaddr);
1524: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1525:
1526: storeword(dstaddr, outdata);
1527:
1528: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
1529: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
1530: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
1531: NFLAG = ((sint16)outdata) < 0;
1532: ZFLAG = !outdata;
1533: PC+= 4;
1534: }
1535:
1536: void cpu_op_1446a(t_ipc *ipc) /* ADD */ {
1537: /* mask f1ff, bits d179, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 8, sbitpos 9, dbitpos 0, immvalue 0 */
1538: int srcreg = (ipc->opcode >> 9) & 7;
1539: uint16 srcdata = DATAREG(srcreg);
1540: uint32 dstaddr = ipc->dst;
1541: uint16 dstdata = fetchword(dstaddr);
1542: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1543:
1544: storeword(dstaddr, outdata);
1545: PC+= 6;
1546: }
1547:
1548: void cpu_op_1446b(t_ipc *ipc) /* ADD */ {
1549: /* mask f1ff, bits d179, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 2, stype 0, dtype 8, sbitpos 9, dbitpos 0, immvalue 0 */
1550: int srcreg = (ipc->opcode >> 9) & 7;
1551: uint16 srcdata = DATAREG(srcreg);
1552: uint32 dstaddr = ipc->dst;
1553: uint16 dstdata = fetchword(dstaddr);
1554: uint16 outdata = (sint16)dstdata + (sint16)srcdata;
1555:
1556: storeword(dstaddr, outdata);
1557:
1558: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
1559: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
1560: XFLAG = CFLAG = srcdata > (0xFFFFu - (uint16)dstdata);
1561: NFLAG = ((sint16)outdata) < 0;
1562: ZFLAG = !outdata;
1563: PC+= 6;
1564: }
1565:
1566: void cpu_op_1447a(t_ipc *ipc) /* ADD */ {
1567: /* mask f1f8, bits d190, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 2, sbitpos 9, dbitpos 0, immvalue 0 */
1568: int srcreg = (ipc->opcode >> 9) & 7;
1569: uint32 srcdata = DATAREG(srcreg);
1570: int dstreg = (ipc->opcode >> 0) & 7;
1571: uint32 dstaddr = ADDRREG(dstreg);
1572: uint32 dstdata = fetchlong(dstaddr);
1573: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1574:
1575: storelong(dstaddr, outdata);
1576: PC+= 2;
1577: }
1578:
1579: void cpu_op_1447b(t_ipc *ipc) /* ADD */ {
1580: /* mask f1f8, bits d190, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 2, sbitpos 9, dbitpos 0, immvalue 0 */
1581: int srcreg = (ipc->opcode >> 9) & 7;
1582: uint32 srcdata = DATAREG(srcreg);
1583: int dstreg = (ipc->opcode >> 0) & 7;
1584: uint32 dstaddr = ADDRREG(dstreg);
1585: uint32 dstdata = fetchlong(dstaddr);
1586: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1587:
1588: storelong(dstaddr, outdata);
1589:
1590: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1591: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1592: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1593: NFLAG = ((sint32)outdata) < 0;
1594: ZFLAG = !outdata;
1595: PC+= 2;
1596: }
1597:
1598: void cpu_op_1448a(t_ipc *ipc) /* ADD */ {
1599: /* mask f1f8, bits d198, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 3, sbitpos 9, dbitpos 0, immvalue 0 */
1600: int srcreg = (ipc->opcode >> 9) & 7;
1601: uint32 srcdata = DATAREG(srcreg);
1602: int dstreg = (ipc->opcode >> 0) & 7;
1603: uint32 dstaddr = (ADDRREG(dstreg)+=4, ADDRREG(dstreg)-4);
1604: uint32 dstdata = fetchlong(dstaddr);
1605: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1606:
1607: storelong(dstaddr, outdata);
1608: PC+= 2;
1609: }
1610:
1611: void cpu_op_1448b(t_ipc *ipc) /* ADD */ {
1612: /* mask f1f8, bits d198, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 3, sbitpos 9, dbitpos 0, immvalue 0 */
1613: int srcreg = (ipc->opcode >> 9) & 7;
1614: uint32 srcdata = DATAREG(srcreg);
1615: int dstreg = (ipc->opcode >> 0) & 7;
1616: uint32 dstaddr = (ADDRREG(dstreg)+=4, ADDRREG(dstreg)-4);
1617: uint32 dstdata = fetchlong(dstaddr);
1618: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1619:
1620: storelong(dstaddr, outdata);
1621:
1622: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1623: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1624: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1625: NFLAG = ((sint32)outdata) < 0;
1626: ZFLAG = !outdata;
1627: PC+= 2;
1628: }
1629:
1630: void cpu_op_1449a(t_ipc *ipc) /* ADD */ {
1631: /* mask f1f8, bits d1a0, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 4, sbitpos 9, dbitpos 0, immvalue 0 */
1632: int srcreg = (ipc->opcode >> 9) & 7;
1633: uint32 srcdata = DATAREG(srcreg);
1634: int dstreg = (ipc->opcode >> 0) & 7;
1635: uint32 dstaddr = ADDRREG(dstreg)-=4;
1636: uint32 dstdata = fetchlong(dstaddr);
1637: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1638:
1639: storelong(dstaddr, outdata);
1640: PC+= 2;
1641: }
1642:
1643: void cpu_op_1449b(t_ipc *ipc) /* ADD */ {
1644: /* mask f1f8, bits d1a0, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 4, sbitpos 9, dbitpos 0, immvalue 0 */
1645: int srcreg = (ipc->opcode >> 9) & 7;
1646: uint32 srcdata = DATAREG(srcreg);
1647: int dstreg = (ipc->opcode >> 0) & 7;
1648: uint32 dstaddr = ADDRREG(dstreg)-=4;
1649: uint32 dstdata = fetchlong(dstaddr);
1650: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1651:
1652: storelong(dstaddr, outdata);
1653:
1654: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1655: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1656: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1657: NFLAG = ((sint32)outdata) < 0;
1658: ZFLAG = !outdata;
1659: PC+= 2;
1660: }
1661:
1662: void cpu_op_1450a(t_ipc *ipc) /* ADD */ {
1663: /* mask f1f8, bits d1a8, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 5, sbitpos 9, dbitpos 0, immvalue 0 */
1664: int srcreg = (ipc->opcode >> 9) & 7;
1665: uint32 srcdata = DATAREG(srcreg);
1666: int dstreg = (ipc->opcode >> 0) & 7;
1667: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
1668: uint32 dstdata = fetchlong(dstaddr);
1669: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1670:
1671: storelong(dstaddr, outdata);
1672: PC+= 4;
1673: }
1674:
1675: void cpu_op_1450b(t_ipc *ipc) /* ADD */ {
1676: /* mask f1f8, bits d1a8, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 5, sbitpos 9, dbitpos 0, immvalue 0 */
1677: int srcreg = (ipc->opcode >> 9) & 7;
1678: uint32 srcdata = DATAREG(srcreg);
1679: int dstreg = (ipc->opcode >> 0) & 7;
1680: uint32 dstaddr = (sint32)ADDRREG(dstreg) + (sint32)(sint16)ipc->dst;
1681: uint32 dstdata = fetchlong(dstaddr);
1682: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1683:
1684: storelong(dstaddr, outdata);
1685:
1686: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1687: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1688: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1689: NFLAG = ((sint32)outdata) < 0;
1690: ZFLAG = !outdata;
1691: PC+= 4;
1692: }
1693:
1694: void cpu_op_1451a(t_ipc *ipc) /* ADD */ {
1695: /* mask f1f8, bits d1b0, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 6, sbitpos 9, dbitpos 0, immvalue 0 */
1696: int srcreg = (ipc->opcode >> 9) & 7;
1697: uint32 srcdata = DATAREG(srcreg);
1698: int dstreg = (ipc->opcode >> 0) & 7;
1699: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
1700: uint32 dstdata = fetchlong(dstaddr);
1701: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1702:
1703: storelong(dstaddr, outdata);
1704: PC+= 4;
1705: }
1706:
1707: void cpu_op_1451b(t_ipc *ipc) /* ADD */ {
1708: /* mask f1f8, bits d1b0, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 6, sbitpos 9, dbitpos 0, immvalue 0 */
1709: int srcreg = (ipc->opcode >> 9) & 7;
1710: uint32 srcdata = DATAREG(srcreg);
1711: int dstreg = (ipc->opcode >> 0) & 7;
1712: uint32 dstaddr = (sint32)ADDRREG(dstreg) + idxval_dst(ipc);
1713: uint32 dstdata = fetchlong(dstaddr);
1714: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1715:
1716: storelong(dstaddr, outdata);
1717:
1718: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1719: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1720: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1721: NFLAG = ((sint32)outdata) < 0;
1722: ZFLAG = !outdata;
1723: PC+= 4;
1724: }
1725:
1726: void cpu_op_1452a(t_ipc *ipc) /* ADD */ {
1727: /* mask f1ff, bits d1b8, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 7, sbitpos 9, dbitpos 0, immvalue 0 */
1728: int srcreg = (ipc->opcode >> 9) & 7;
1729: uint32 srcdata = DATAREG(srcreg);
1730: uint32 dstaddr = ipc->dst;
1731: uint32 dstdata = fetchlong(dstaddr);
1732: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1733:
1734: storelong(dstaddr, outdata);
1735: PC+= 4;
1736: }
1737:
1738: void cpu_op_1452b(t_ipc *ipc) /* ADD */ {
1739: /* mask f1ff, bits d1b8, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 7, sbitpos 9, dbitpos 0, immvalue 0 */
1740: int srcreg = (ipc->opcode >> 9) & 7;
1741: uint32 srcdata = DATAREG(srcreg);
1742: uint32 dstaddr = ipc->dst;
1743: uint32 dstdata = fetchlong(dstaddr);
1744: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1745:
1746: storelong(dstaddr, outdata);
1747:
1748: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1749: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1750: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1751: NFLAG = ((sint32)outdata) < 0;
1752: ZFLAG = !outdata;
1753: PC+= 4;
1754: }
1755:
1756: void cpu_op_1453a(t_ipc *ipc) /* ADD */ {
1757: /* mask f1ff, bits d1b9, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 8, sbitpos 9, dbitpos 0, immvalue 0 */
1758: int srcreg = (ipc->opcode >> 9) & 7;
1759: uint32 srcdata = DATAREG(srcreg);
1760: uint32 dstaddr = ipc->dst;
1761: uint32 dstdata = fetchlong(dstaddr);
1762: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1763:
1764: storelong(dstaddr, outdata);
1765: PC+= 6;
1766: }
1767:
1768: void cpu_op_1453b(t_ipc *ipc) /* ADD */ {
1769: /* mask f1ff, bits d1b9, mnemonic 10, priv 0, endblk 0, imm_notzero 0, used 0 set -1, size 3, stype 0, dtype 8, sbitpos 9, dbitpos 0, immvalue 0 */
1770: int srcreg = (ipc->opcode >> 9) & 7;
1771: uint32 srcdata = DATAREG(srcreg);
1772: uint32 dstaddr = ipc->dst;
1773: uint32 dstdata = fetchlong(dstaddr);
1774: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1775:
1776: storelong(dstaddr, outdata);
1777:
1778: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
1779: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
1780: XFLAG = CFLAG = srcdata > (uint32)~(uint32)dstdata;
1781: NFLAG = ((sint32)outdata) < 0;
1782: ZFLAG = !outdata;
1783: PC+= 6;
1784: }
1785:
1786: void cpu_op_1454a(t_ipc *ipc) /* ADDA */ {
1787: /* mask f1f8, bits d0c0, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 0, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1788: int srcreg = (ipc->opcode >> 0) & 7;
1789: uint16 srcdata = DATAREG(srcreg);
1790: int dstreg = (ipc->opcode >> 9) & 7;
1791: uint32 dstdata = ADDRREG(dstreg);
1792: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1793:
1794: ADDRREG(dstreg) = outdata;
1795: PC+= 2;
1796: }
1797:
1798: void cpu_op_1455a(t_ipc *ipc) /* ADDA */ {
1799: /* mask f1f8, bits d0c8, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 1, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1800: int srcreg = (ipc->opcode >> 0) & 7;
1801: uint16 srcdata = ADDRREG(srcreg);
1802: int dstreg = (ipc->opcode >> 9) & 7;
1803: uint32 dstdata = ADDRREG(dstreg);
1804: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1805:
1806: ADDRREG(dstreg) = outdata;
1807: PC+= 2;
1808: }
1809:
1810: void cpu_op_1456a(t_ipc *ipc) /* ADDA */ {
1811: /* mask f1f8, bits d0d0, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 2, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1812: int srcreg = (ipc->opcode >> 0) & 7;
1813: uint32 srcaddr = ADDRREG(srcreg);
1814: uint16 srcdata = fetchword(srcaddr);
1815: int dstreg = (ipc->opcode >> 9) & 7;
1816: uint32 dstdata = ADDRREG(dstreg);
1817: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1818:
1819: ADDRREG(dstreg) = outdata;
1820: PC+= 2;
1821: }
1822:
1823: void cpu_op_1457a(t_ipc *ipc) /* ADDA */ {
1824: /* mask f1f8, bits d0d8, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 3, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1825: int srcreg = (ipc->opcode >> 0) & 7;
1826: uint32 srcaddr = (ADDRREG(srcreg)+=2, ADDRREG(srcreg)-2);
1827: uint16 srcdata = fetchword(srcaddr);
1828: int dstreg = (ipc->opcode >> 9) & 7;
1829: uint32 dstdata = ADDRREG(dstreg);
1830: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1831:
1832: ADDRREG(dstreg) = outdata;
1833: PC+= 2;
1834: }
1835:
1836: void cpu_op_1458a(t_ipc *ipc) /* ADDA */ {
1837: /* mask f1f8, bits d0e0, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 4, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1838: int srcreg = (ipc->opcode >> 0) & 7;
1839: uint32 srcaddr = ADDRREG(srcreg)-=2;
1840: uint16 srcdata = fetchword(srcaddr);
1841: int dstreg = (ipc->opcode >> 9) & 7;
1842: uint32 dstdata = ADDRREG(dstreg);
1843: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1844:
1845: ADDRREG(dstreg) = outdata;
1846: PC+= 2;
1847: }
1848:
1849: void cpu_op_1459a(t_ipc *ipc) /* ADDA */ {
1850: /* mask f1f8, bits d0e8, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 5, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1851: int srcreg = (ipc->opcode >> 0) & 7;
1852: uint32 srcaddr = (sint32)ADDRREG(srcreg) + (sint32)(sint16)ipc->src;
1853: uint16 srcdata = fetchword(srcaddr);
1854: int dstreg = (ipc->opcode >> 9) & 7;
1855: uint32 dstdata = ADDRREG(dstreg);
1856: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1857:
1858: ADDRREG(dstreg) = outdata;
1859: PC+= 4;
1860: }
1861:
1862: void cpu_op_1460a(t_ipc *ipc) /* ADDA */ {
1863: /* mask f1f8, bits d0f0, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 6, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1864: int srcreg = (ipc->opcode >> 0) & 7;
1865: uint32 srcaddr = (sint32)ADDRREG(srcreg) + idxval_src(ipc);
1866: uint16 srcdata = fetchword(srcaddr);
1867: int dstreg = (ipc->opcode >> 9) & 7;
1868: uint32 dstdata = ADDRREG(dstreg);
1869: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1870:
1871: ADDRREG(dstreg) = outdata;
1872: PC+= 4;
1873: }
1874:
1875: void cpu_op_1461a(t_ipc *ipc) /* ADDA */ {
1876: /* mask f1ff, bits d0f8, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 7, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1877: uint32 srcaddr = ipc->src;
1878: uint16 srcdata = fetchword(srcaddr);
1879: int dstreg = (ipc->opcode >> 9) & 7;
1880: uint32 dstdata = ADDRREG(dstreg);
1881: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1882:
1883: ADDRREG(dstreg) = outdata;
1884: PC+= 4;
1885: }
1886:
1887: void cpu_op_1462a(t_ipc *ipc) /* ADDA */ {
1888: /* mask f1ff, bits d0f9, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 8, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1889: uint32 srcaddr = ipc->src;
1890: uint16 srcdata = fetchword(srcaddr);
1891: int dstreg = (ipc->opcode >> 9) & 7;
1892: uint32 dstdata = ADDRREG(dstreg);
1893: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1894:
1895: ADDRREG(dstreg) = outdata;
1896: PC+= 6;
1897: }
1898:
1899: void cpu_op_1463a(t_ipc *ipc) /* ADDA */ {
1900: /* mask f1ff, bits d0fa, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 9, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1901: uint32 srcaddr = ipc->src;
1902: uint16 srcdata = fetchword(srcaddr);
1903: int dstreg = (ipc->opcode >> 9) & 7;
1904: uint32 dstdata = ADDRREG(dstreg);
1905: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1906:
1907: ADDRREG(dstreg) = outdata;
1908: PC+= 4;
1909: }
1910:
1911: void cpu_op_1464a(t_ipc *ipc) /* ADDA */ {
1912: /* mask f1ff, bits d0fb, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 10, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1913: uint32 srcaddr = idxval_src(ipc);
1914: uint16 srcdata = fetchword(srcaddr);
1915: int dstreg = (ipc->opcode >> 9) & 7;
1916: uint32 dstdata = ADDRREG(dstreg);
1917: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1918:
1919: ADDRREG(dstreg) = outdata;
1920: PC+= 4;
1921: }
1922:
1923: void cpu_op_1465a(t_ipc *ipc) /* ADDA */ {
1924: /* mask f1ff, bits d0fc, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 2, stype 12, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1925: uint16 srcdata = ipc->src;
1926: int dstreg = (ipc->opcode >> 9) & 7;
1927: uint32 dstdata = ADDRREG(dstreg);
1928: uint32 outdata = (sint32)dstdata + (sint16)srcdata;
1929:
1930: ADDRREG(dstreg) = outdata;
1931: PC+= 4;
1932: }
1933:
1934: void cpu_op_1466a(t_ipc *ipc) /* ADDA */ {
1935: /* mask f1f8, bits d1c0, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 0, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1936: int srcreg = (ipc->opcode >> 0) & 7;
1937: uint32 srcdata = DATAREG(srcreg);
1938: int dstreg = (ipc->opcode >> 9) & 7;
1939: uint32 dstdata = ADDRREG(dstreg);
1940: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1941:
1942: ADDRREG(dstreg) = outdata;
1943: PC+= 2;
1944: }
1945:
1946: void cpu_op_1467a(t_ipc *ipc) /* ADDA */ {
1947: /* mask f1f8, bits d1c8, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 1, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1948: int srcreg = (ipc->opcode >> 0) & 7;
1949: uint32 srcdata = ADDRREG(srcreg);
1950: int dstreg = (ipc->opcode >> 9) & 7;
1951: uint32 dstdata = ADDRREG(dstreg);
1952: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1953:
1954: ADDRREG(dstreg) = outdata;
1955: PC+= 2;
1956: }
1957:
1958: void cpu_op_1468a(t_ipc *ipc) /* ADDA */ {
1959: /* mask f1f8, bits d1d0, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 2, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1960: int srcreg = (ipc->opcode >> 0) & 7;
1961: uint32 srcaddr = ADDRREG(srcreg);
1962: uint32 srcdata = fetchlong(srcaddr);
1963: int dstreg = (ipc->opcode >> 9) & 7;
1964: uint32 dstdata = ADDRREG(dstreg);
1965: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1966:
1967: ADDRREG(dstreg) = outdata;
1968: PC+= 2;
1969: }
1970:
1971: void cpu_op_1469a(t_ipc *ipc) /* ADDA */ {
1972: /* mask f1f8, bits d1d8, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 3, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1973: int srcreg = (ipc->opcode >> 0) & 7;
1974: uint32 srcaddr = (ADDRREG(srcreg)+=4, ADDRREG(srcreg)-4);
1975: uint32 srcdata = fetchlong(srcaddr);
1976: int dstreg = (ipc->opcode >> 9) & 7;
1977: uint32 dstdata = ADDRREG(dstreg);
1978: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1979:
1980: ADDRREG(dstreg) = outdata;
1981: PC+= 2;
1982: }
1983:
1984: void cpu_op_1470a(t_ipc *ipc) /* ADDA */ {
1985: /* mask f1f8, bits d1e0, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 4, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1986: int srcreg = (ipc->opcode >> 0) & 7;
1987: uint32 srcaddr = ADDRREG(srcreg)-=4;
1988: uint32 srcdata = fetchlong(srcaddr);
1989: int dstreg = (ipc->opcode >> 9) & 7;
1990: uint32 dstdata = ADDRREG(dstreg);
1991: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
1992:
1993: ADDRREG(dstreg) = outdata;
1994: PC+= 2;
1995: }
1996:
1997: void cpu_op_1471a(t_ipc *ipc) /* ADDA */ {
1998: /* mask f1f8, bits d1e8, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 5, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
1999: int srcreg = (ipc->opcode >> 0) & 7;
2000: uint32 srcaddr = (sint32)ADDRREG(srcreg) + (sint32)(sint16)ipc->src;
2001: uint32 srcdata = fetchlong(srcaddr);
2002: int dstreg = (ipc->opcode >> 9) & 7;
2003: uint32 dstdata = ADDRREG(dstreg);
2004: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
2005:
2006: ADDRREG(dstreg) = outdata;
2007: PC+= 4;
2008: }
2009:
2010: void cpu_op_1472a(t_ipc *ipc) /* ADDA */ {
2011: /* mask f1f8, bits d1f0, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 6, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
2012: int srcreg = (ipc->opcode >> 0) & 7;
2013: uint32 srcaddr = (sint32)ADDRREG(srcreg) + idxval_src(ipc);
2014: uint32 srcdata = fetchlong(srcaddr);
2015: int dstreg = (ipc->opcode >> 9) & 7;
2016: uint32 dstdata = ADDRREG(dstreg);
2017: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
2018:
2019: ADDRREG(dstreg) = outdata;
2020: PC+= 4;
2021: }
2022:
2023: void cpu_op_1473a(t_ipc *ipc) /* ADDA */ {
2024: /* mask f1ff, bits d1f8, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 7, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
2025: uint32 srcaddr = ipc->src;
2026: uint32 srcdata = fetchlong(srcaddr);
2027: int dstreg = (ipc->opcode >> 9) & 7;
2028: uint32 dstdata = ADDRREG(dstreg);
2029: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
2030:
2031: ADDRREG(dstreg) = outdata;
2032: PC+= 4;
2033: }
2034:
2035: void cpu_op_1474a(t_ipc *ipc) /* ADDA */ {
2036: /* mask f1ff, bits d1f9, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 8, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
2037: uint32 srcaddr = ipc->src;
2038: uint32 srcdata = fetchlong(srcaddr);
2039: int dstreg = (ipc->opcode >> 9) & 7;
2040: uint32 dstdata = ADDRREG(dstreg);
2041: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
2042:
2043: ADDRREG(dstreg) = outdata;
2044: PC+= 6;
2045: }
2046:
2047: void cpu_op_1475a(t_ipc *ipc) /* ADDA */ {
2048: /* mask f1ff, bits d1fa, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 9, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
2049: uint32 srcaddr = ipc->src;
2050: uint32 srcdata = fetchlong(srcaddr);
2051: int dstreg = (ipc->opcode >> 9) & 7;
2052: uint32 dstdata = ADDRREG(dstreg);
2053: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
2054:
2055: ADDRREG(dstreg) = outdata;
2056: PC+= 4;
2057: }
2058:
2059: void cpu_op_1476a(t_ipc *ipc) /* ADDA */ {
2060: /* mask f1ff, bits d1fb, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 10, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
2061: uint32 srcaddr = idxval_src(ipc);
2062: uint32 srcdata = fetchlong(srcaddr);
2063: int dstreg = (ipc->opcode >> 9) & 7;
2064: uint32 dstdata = ADDRREG(dstreg);
2065: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
2066:
2067: ADDRREG(dstreg) = outdata;
2068: PC+= 4;
2069: }
2070:
2071: void cpu_op_1477a(t_ipc *ipc) /* ADDA */ {
2072: /* mask f1ff, bits d1fc, mnemonic 11, priv 0, endblk 0, imm_notzero 0, used 0 set 0, size 3, stype 13, dtype 1, sbitpos 0, dbitpos 9, immvalue 0 */
2073: uint32 srcdata = ipc->src;
2074: int dstreg = (ipc->opcode >> 9) & 7;
2075: uint32 dstdata = ADDRREG(dstreg);
2076: uint32 outdata = (sint32)dstdata + (sint32)srcdata;
2077:
2078: ADDRREG(dstreg) = outdata;
2079: PC+= 6;
2080: }
2081:
2082: void cpu_op_1478a(t_ipc *ipc) /* ADDX */ {
2083: /* mask f1f8, bits d100, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 1, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
2084: int srcreg = (ipc->opcode >> 0) & 7;
2085: uint8 srcdata = DATAREG(srcreg);
2086: int dstreg = (ipc->opcode >> 9) & 7;
2087: uint8 dstdata = DATAREG(dstreg);
2088: uint8 outdata = (sint8)dstdata + (sint8)srcdata + XFLAG;
2089:
2090: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2091: PC+= 2;
2092: }
2093:
2094: void cpu_op_1478b(t_ipc *ipc) /* ADDX */ {
2095: /* mask f1f8, bits d100, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 1, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
2096: int srcreg = (ipc->opcode >> 0) & 7;
2097: uint8 srcdata = DATAREG(srcreg);
2098: int dstreg = (ipc->opcode >> 9) & 7;
2099: uint8 dstdata = DATAREG(dstreg);
2100: uint8 outdata = (sint8)dstdata + (sint8)srcdata + XFLAG;
2101:
2102: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xff) | outdata;
2103:
2104: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
2105: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
2106: {
2107: int Sm = (sint8)srcdata < 0;
2108: int Dm = (sint8)dstdata < 0;
2109: int Rm = (sint8)outdata < 0;
2110: XFLAG = CFLAG = (Sm && Dm) || (!Rm && (Dm || Sm));
2111: }
2112: NFLAG = ((sint8)outdata) < 0;
2113: if (outdata) ZFLAG = 0;
2114: PC+= 2;
2115: }
2116:
2117: void cpu_op_1479a(t_ipc *ipc) /* ADDX */ {
2118: /* mask f1f8, bits d140, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 2, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
2119: int srcreg = (ipc->opcode >> 0) & 7;
2120: uint16 srcdata = DATAREG(srcreg);
2121: int dstreg = (ipc->opcode >> 9) & 7;
2122: uint16 dstdata = DATAREG(dstreg);
2123: uint16 outdata = (sint16)dstdata + (sint16)srcdata+ XFLAG;
2124:
2125: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2126: PC+= 2;
2127: }
2128:
2129: void cpu_op_1479b(t_ipc *ipc) /* ADDX */ {
2130: /* mask f1f8, bits d140, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 2, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
2131: int srcreg = (ipc->opcode >> 0) & 7;
2132: uint16 srcdata = DATAREG(srcreg);
2133: int dstreg = (ipc->opcode >> 9) & 7;
2134: uint16 dstdata = DATAREG(dstreg);
2135: uint16 outdata = (sint16)dstdata + (sint16)srcdata+ XFLAG;
2136:
2137: DATAREG(dstreg) = (DATAREG(dstreg) & ~0xffff) | outdata;
2138:
2139: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
2140: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
2141: {
2142: int Sm = (sint16)srcdata < 0;
2143: int Dm = (sint16)dstdata < 0;
2144: int Rm = (sint16)outdata < 0;
2145: XFLAG = CFLAG = (Sm && Dm) || (!Rm && (Dm || Sm));
2146: }
2147: NFLAG = ((sint16)outdata) < 0;
2148: if (outdata) ZFLAG = 0;
2149: PC+= 2;
2150: }
2151:
2152: void cpu_op_1480a(t_ipc *ipc) /* ADDX */ {
2153: /* mask f1f8, bits d180, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 3, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
2154: int srcreg = (ipc->opcode >> 0) & 7;
2155: uint32 srcdata = DATAREG(srcreg);
2156: int dstreg = (ipc->opcode >> 9) & 7;
2157: uint32 dstdata = DATAREG(dstreg);
2158: uint32 outdata = (sint32)dstdata + (sint32)srcdata+ XFLAG;
2159:
2160: DATAREG(dstreg) = outdata;
2161: PC+= 2;
2162: }
2163:
2164: void cpu_op_1480b(t_ipc *ipc) /* ADDX */ {
2165: /* mask f1f8, bits d180, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 3, stype 0, dtype 0, sbitpos 0, dbitpos 9, immvalue 0 */
2166: int srcreg = (ipc->opcode >> 0) & 7;
2167: uint32 srcdata = DATAREG(srcreg);
2168: int dstreg = (ipc->opcode >> 9) & 7;
2169: uint32 dstdata = DATAREG(dstreg);
2170: uint32 outdata = (sint32)dstdata + (sint32)srcdata+ XFLAG;
2171:
2172: DATAREG(dstreg) = outdata;
2173:
2174: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
2175: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
2176: {
2177: int Sm = (sint32)srcdata < 0;
2178: int Dm = (sint32)dstdata < 0;
2179: int Rm = (sint32)outdata < 0;
2180: XFLAG = CFLAG = (Sm && Dm) || (!Rm && (Dm || Sm));
2181: }
2182: NFLAG = ((sint32)outdata) < 0;
2183: if (outdata) ZFLAG = 0;
2184: PC+= 2;
2185: }
2186:
2187: void cpu_op_1481a(t_ipc *ipc) /* ADDX */ {
2188: /* mask f1f8, bits d108, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 1, stype 4, dtype 4, sbitpos 0, dbitpos 9, immvalue 0 */
2189: int srcreg = (ipc->opcode >> 0) & 7;
2190: uint32 srcaddr = (ADDRREG(srcreg)-= (srcreg == 7 ? 2 : 1));
2191: uint8 srcdata = fetchbyte(srcaddr);
2192: int dstreg = (ipc->opcode >> 9) & 7;
2193: uint32 dstaddr = (ADDRREG(dstreg)-= (dstreg == 7 ? 2 : 1));
2194: uint8 dstdata = fetchbyte(dstaddr);
2195: uint8 outdata = (sint8)dstdata + (sint8)srcdata + XFLAG;
2196:
2197: storebyte(dstaddr, outdata);
2198: PC+= 2;
2199: }
2200:
2201: void cpu_op_1481b(t_ipc *ipc) /* ADDX */ {
2202: /* mask f1f8, bits d108, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 1, stype 4, dtype 4, sbitpos 0, dbitpos 9, immvalue 0 */
2203: int srcreg = (ipc->opcode >> 0) & 7;
2204: uint32 srcaddr = (ADDRREG(srcreg)-= (srcreg == 7 ? 2 : 1));
2205: uint8 srcdata = fetchbyte(srcaddr);
2206: int dstreg = (ipc->opcode >> 9) & 7;
2207: uint32 dstaddr = (ADDRREG(dstreg)-= (dstreg == 7 ? 2 : 1));
2208: uint8 dstdata = fetchbyte(dstaddr);
2209: uint8 outdata = (sint8)dstdata + (sint8)srcdata + XFLAG;
2210:
2211: storebyte(dstaddr, outdata);
2212:
2213: VFLAG = (((sint8)srcdata < 0) == ((sint8)dstdata < 0)) &&
2214: (((sint8)dstdata < 0) != ((sint8)outdata < 0));
2215: {
2216: int Sm = (sint8)srcdata < 0;
2217: int Dm = (sint8)dstdata < 0;
2218: int Rm = (sint8)outdata < 0;
2219: XFLAG = CFLAG = (Sm && Dm) || (!Rm && (Dm || Sm));
2220: }
2221: NFLAG = ((sint8)outdata) < 0;
2222: if (outdata) ZFLAG = 0;
2223: PC+= 2;
2224: }
2225:
2226: void cpu_op_1482a(t_ipc *ipc) /* ADDX */ {
2227: /* mask f1f8, bits d148, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 2, stype 4, dtype 4, sbitpos 0, dbitpos 9, immvalue 0 */
2228: int srcreg = (ipc->opcode >> 0) & 7;
2229: uint32 srcaddr = ADDRREG(srcreg)-=2;
2230: uint16 srcdata = fetchword(srcaddr);
2231: int dstreg = (ipc->opcode >> 9) & 7;
2232: uint32 dstaddr = ADDRREG(dstreg)-=2;
2233: uint16 dstdata = fetchword(dstaddr);
2234: uint16 outdata = (sint16)dstdata + (sint16)srcdata+ XFLAG;
2235:
2236: storeword(dstaddr, outdata);
2237: PC+= 2;
2238: }
2239:
2240: void cpu_op_1482b(t_ipc *ipc) /* ADDX */ {
2241: /* mask f1f8, bits d148, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 2, stype 4, dtype 4, sbitpos 0, dbitpos 9, immvalue 0 */
2242: int srcreg = (ipc->opcode >> 0) & 7;
2243: uint32 srcaddr = ADDRREG(srcreg)-=2;
2244: uint16 srcdata = fetchword(srcaddr);
2245: int dstreg = (ipc->opcode >> 9) & 7;
2246: uint32 dstaddr = ADDRREG(dstreg)-=2;
2247: uint16 dstdata = fetchword(dstaddr);
2248: uint16 outdata = (sint16)dstdata + (sint16)srcdata+ XFLAG;
2249:
2250: storeword(dstaddr, outdata);
2251:
2252: VFLAG = (((sint16)srcdata < 0) == ((sint16)dstdata < 0)) &&
2253: (((sint16)dstdata < 0) != ((sint16)outdata < 0));
2254: {
2255: int Sm = (sint16)srcdata < 0;
2256: int Dm = (sint16)dstdata < 0;
2257: int Rm = (sint16)outdata < 0;
2258: XFLAG = CFLAG = (Sm && Dm) || (!Rm && (Dm || Sm));
2259: }
2260: NFLAG = ((sint16)outdata) < 0;
2261: if (outdata) ZFLAG = 0;
2262: PC+= 2;
2263: }
2264:
2265: void cpu_op_1483a(t_ipc *ipc) /* ADDX */ {
2266: /* mask f1f8, bits d188, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 3, stype 4, dtype 4, sbitpos 0, dbitpos 9, immvalue 0 */
2267: int srcreg = (ipc->opcode >> 0) & 7;
2268: uint32 srcaddr = ADDRREG(srcreg)-=4;
2269: uint32 srcdata = fetchlong(srcaddr);
2270: int dstreg = (ipc->opcode >> 9) & 7;
2271: uint32 dstaddr = ADDRREG(dstreg)-=4;
2272: uint32 dstdata = fetchlong(dstaddr);
2273: uint32 outdata = (sint32)dstdata + (sint32)srcdata+ XFLAG;
2274:
2275: storelong(dstaddr, outdata);
2276: PC+= 2;
2277: }
2278:
2279: void cpu_op_1483b(t_ipc *ipc) /* ADDX */ {
2280: /* mask f1f8, bits d188, mnemonic 12, priv 0, endblk 0, imm_notzero 0, used 5 set -1, size 3, stype 4, dtype 4, sbitpos 0, dbitpos 9, immvalue 0 */
2281: int srcreg = (ipc->opcode >> 0) & 7;
2282: uint32 srcaddr = ADDRREG(srcreg)-=4;
2283: uint32 srcdata = fetchlong(srcaddr);
2284: int dstreg = (ipc->opcode >> 9) & 7;
2285: uint32 dstaddr = ADDRREG(dstreg)-=4;
2286: uint32 dstdata = fetchlong(dstaddr);
2287: uint32 outdata = (sint32)dstdata + (sint32)srcdata+ XFLAG;
2288:
2289: storelong(dstaddr, outdata);
2290:
2291: VFLAG = (((sint32)srcdata < 0) == ((sint32)dstdata < 0)) &&
2292: (((sint32)dstdata < 0) != ((sint32)outdata < 0));
2293: {
2294: int Sm = (sint32)srcdata < 0;
2295: int Dm = (sint32)dstdata < 0;
2296: int Rm = (sint32)outdata < 0;
2297: XFLAG = CFLAG = (Sm && Dm) || (!Rm && (Dm || Sm));
2298: }
2299: NFLAG = ((sint32)outdata) < 0;
2300: if (outdata) ZFLAG = 0;
2301: PC+= 2;
2302: }
2303:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.