|
|
1.1 ! root 1: #include "config.h" ! 2: #include "amiga.h" ! 3: #include "options.h" ! 4: #include <stdlib.h> ! 5: #include "memory.h" ! 6: #include "custom.h" ! 7: #include "newcpu.h" ! 8: #include "cputbl.h" ! 9: void op_5000(UWORD opcode) ! 10: { ! 11: ULONG srcreg = 8; ! 12: ULONG dstreg = (opcode & 7) >> 0; ! 13: {{ ULONG src = srcreg; ! 14: { BYTE dst = regs.d[dstreg]; ! 15: { ULONG newv = dst + src; ! 16: { bool flgs = ((BYTE)(src)) < 0; ! 17: bool flgo = ((BYTE)(dst)) < 0; ! 18: bool flgn = ((BYTE)(newv)) < 0; ! 19: regs.z = ((BYTE)(newv)) == 0; ! 20: regs.v = (flgs == flgo) && (flgn != flgo); ! 21: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 22: regs.n = flgn != 0; ! 23: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 24: }}}}}} ! 25: void op_5010(UWORD opcode) ! 26: { ! 27: ULONG srcreg = 8; ! 28: ULONG dstreg = (opcode & 7) >> 0; ! 29: {{ ULONG src = srcreg; ! 30: { CPTR dsta = regs.a[dstreg]; ! 31: BYTE dst = get_byte(dsta); ! 32: { ULONG newv = dst + src; ! 33: { bool flgs = ((BYTE)(src)) < 0; ! 34: bool flgo = ((BYTE)(dst)) < 0; ! 35: bool flgn = ((BYTE)(newv)) < 0; ! 36: regs.z = ((BYTE)(newv)) == 0; ! 37: regs.v = (flgs == flgo) && (flgn != flgo); ! 38: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 39: regs.n = flgn != 0; ! 40: put_byte(dsta,newv); ! 41: }}}}}} ! 42: void op_5018(UWORD opcode) ! 43: { ! 44: ULONG srcreg = 8; ! 45: ULONG dstreg = (opcode & 7) >> 0; ! 46: {{ ULONG src = srcreg; ! 47: { CPTR dsta = regs.a[dstreg]; ! 48: BYTE dst = get_byte(dsta); ! 49: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 50: { ULONG newv = dst + src; ! 51: { bool flgs = ((BYTE)(src)) < 0; ! 52: bool flgo = ((BYTE)(dst)) < 0; ! 53: bool flgn = ((BYTE)(newv)) < 0; ! 54: regs.z = ((BYTE)(newv)) == 0; ! 55: regs.v = (flgs == flgo) && (flgn != flgo); ! 56: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 57: regs.n = flgn != 0; ! 58: put_byte(dsta,newv); ! 59: }}}}}}} ! 60: void op_5020(UWORD opcode) ! 61: { ! 62: ULONG srcreg = 8; ! 63: ULONG dstreg = (opcode & 7) >> 0; ! 64: {{ ULONG src = srcreg; ! 65: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 66: { CPTR dsta = regs.a[dstreg]; ! 67: BYTE dst = get_byte(dsta); ! 68: { ULONG newv = dst + src; ! 69: { bool flgs = ((BYTE)(src)) < 0; ! 70: bool flgo = ((BYTE)(dst)) < 0; ! 71: bool flgn = ((BYTE)(newv)) < 0; ! 72: regs.z = ((BYTE)(newv)) == 0; ! 73: regs.v = (flgs == flgo) && (flgn != flgo); ! 74: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 75: regs.n = flgn != 0; ! 76: put_byte(dsta,newv); ! 77: }}}}}}} ! 78: void op_5028(UWORD opcode) ! 79: { ! 80: ULONG srcreg = 8; ! 81: ULONG dstreg = (opcode & 7) >> 0; ! 82: {{ ULONG src = srcreg; ! 83: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 84: BYTE dst = get_byte(dsta); ! 85: { ULONG newv = dst + src; ! 86: { bool flgs = ((BYTE)(src)) < 0; ! 87: bool flgo = ((BYTE)(dst)) < 0; ! 88: bool flgn = ((BYTE)(newv)) < 0; ! 89: regs.z = ((BYTE)(newv)) == 0; ! 90: regs.v = (flgs == flgo) && (flgn != flgo); ! 91: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 92: regs.n = flgn != 0; ! 93: put_byte(dsta,newv); ! 94: }}}}}} ! 95: void op_5030(UWORD opcode) ! 96: { ! 97: ULONG srcreg = 8; ! 98: ULONG dstreg = (opcode & 7) >> 0; ! 99: {{ ULONG src = srcreg; ! 100: { CPTR dsta = regs.a[dstreg]; ! 101: UWORD dstdp = nextiword(); ! 102: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 103: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 104: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 105: dsta += dstdpr; ! 106: { BYTE dst = get_byte(dsta); ! 107: { ULONG newv = dst + src; ! 108: { bool flgs = ((BYTE)(src)) < 0; ! 109: bool flgo = ((BYTE)(dst)) < 0; ! 110: bool flgn = ((BYTE)(newv)) < 0; ! 111: regs.z = ((BYTE)(newv)) == 0; ! 112: regs.v = (flgs == flgo) && (flgn != flgo); ! 113: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 114: regs.n = flgn != 0; ! 115: put_byte(dsta,newv); ! 116: }}}}}}}} ! 117: void op_5038(UWORD opcode) ! 118: { ! 119: ULONG srcreg = 8; ! 120: {{ ULONG src = srcreg; ! 121: { CPTR dsta = (LONG)(WORD)nextiword(); ! 122: BYTE dst = get_byte(dsta); ! 123: { ULONG newv = dst + src; ! 124: { bool flgs = ((BYTE)(src)) < 0; ! 125: bool flgo = ((BYTE)(dst)) < 0; ! 126: bool flgn = ((BYTE)(newv)) < 0; ! 127: regs.z = ((BYTE)(newv)) == 0; ! 128: regs.v = (flgs == flgo) && (flgn != flgo); ! 129: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 130: regs.n = flgn != 0; ! 131: put_byte(dsta,newv); ! 132: }}}}}} ! 133: void op_5039(UWORD opcode) ! 134: { ! 135: ULONG srcreg = 8; ! 136: {{ ULONG src = srcreg; ! 137: { CPTR dsta = nextilong(); ! 138: BYTE dst = get_byte(dsta); ! 139: { ULONG newv = dst + src; ! 140: { bool flgs = ((BYTE)(src)) < 0; ! 141: bool flgo = ((BYTE)(dst)) < 0; ! 142: bool flgn = ((BYTE)(newv)) < 0; ! 143: regs.z = ((BYTE)(newv)) == 0; ! 144: regs.v = (flgs == flgo) && (flgn != flgo); ! 145: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 146: regs.n = flgn != 0; ! 147: put_byte(dsta,newv); ! 148: }}}}}} ! 149: void op_5040(UWORD opcode) ! 150: { ! 151: ULONG srcreg = 8; ! 152: ULONG dstreg = (opcode & 7) >> 0; ! 153: {{ ULONG src = srcreg; ! 154: { WORD dst = regs.d[dstreg]; ! 155: { ULONG newv = dst + src; ! 156: { bool flgs = ((WORD)(src)) < 0; ! 157: bool flgo = ((WORD)(dst)) < 0; ! 158: bool flgn = ((WORD)(newv)) < 0; ! 159: regs.z = ((WORD)(newv)) == 0; ! 160: regs.v = (flgs == flgo) && (flgn != flgo); ! 161: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 162: regs.n = flgn != 0; ! 163: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 164: }}}}}} ! 165: void op_5048(UWORD opcode) ! 166: { ! 167: ULONG srcreg = 8; ! 168: ULONG dstreg = (opcode & 7) >> 0; ! 169: {{ ULONG src = srcreg; ! 170: { LONG dst = regs.a[dstreg]; ! 171: { ULONG newv = dst + src; ! 172: regs.a[dstreg] = (newv); ! 173: }}}}} ! 174: void op_5050(UWORD opcode) ! 175: { ! 176: ULONG srcreg = 8; ! 177: ULONG dstreg = (opcode & 7) >> 0; ! 178: {{ ULONG src = srcreg; ! 179: { CPTR dsta = regs.a[dstreg]; ! 180: WORD dst = get_word(dsta); ! 181: { ULONG newv = dst + src; ! 182: { bool flgs = ((WORD)(src)) < 0; ! 183: bool flgo = ((WORD)(dst)) < 0; ! 184: bool flgn = ((WORD)(newv)) < 0; ! 185: regs.z = ((WORD)(newv)) == 0; ! 186: regs.v = (flgs == flgo) && (flgn != flgo); ! 187: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 188: regs.n = flgn != 0; ! 189: put_word(dsta,newv); ! 190: }}}}}} ! 191: void op_5058(UWORD opcode) ! 192: { ! 193: ULONG srcreg = 8; ! 194: ULONG dstreg = (opcode & 7) >> 0; ! 195: {{ ULONG src = srcreg; ! 196: { CPTR dsta = regs.a[dstreg]; ! 197: WORD dst = get_word(dsta); ! 198: { regs.a[dstreg] += 2; ! 199: { ULONG newv = dst + src; ! 200: { bool flgs = ((WORD)(src)) < 0; ! 201: bool flgo = ((WORD)(dst)) < 0; ! 202: bool flgn = ((WORD)(newv)) < 0; ! 203: regs.z = ((WORD)(newv)) == 0; ! 204: regs.v = (flgs == flgo) && (flgn != flgo); ! 205: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 206: regs.n = flgn != 0; ! 207: put_word(dsta,newv); ! 208: }}}}}}} ! 209: void op_5060(UWORD opcode) ! 210: { ! 211: ULONG srcreg = 8; ! 212: ULONG dstreg = (opcode & 7) >> 0; ! 213: {{ ULONG src = srcreg; ! 214: { regs.a[dstreg] -= 2; ! 215: { CPTR dsta = regs.a[dstreg]; ! 216: WORD dst = get_word(dsta); ! 217: { ULONG newv = dst + src; ! 218: { bool flgs = ((WORD)(src)) < 0; ! 219: bool flgo = ((WORD)(dst)) < 0; ! 220: bool flgn = ((WORD)(newv)) < 0; ! 221: regs.z = ((WORD)(newv)) == 0; ! 222: regs.v = (flgs == flgo) && (flgn != flgo); ! 223: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 224: regs.n = flgn != 0; ! 225: put_word(dsta,newv); ! 226: }}}}}}} ! 227: void op_5068(UWORD opcode) ! 228: { ! 229: ULONG srcreg = 8; ! 230: ULONG dstreg = (opcode & 7) >> 0; ! 231: {{ ULONG src = srcreg; ! 232: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 233: WORD dst = get_word(dsta); ! 234: { ULONG newv = dst + src; ! 235: { bool flgs = ((WORD)(src)) < 0; ! 236: bool flgo = ((WORD)(dst)) < 0; ! 237: bool flgn = ((WORD)(newv)) < 0; ! 238: regs.z = ((WORD)(newv)) == 0; ! 239: regs.v = (flgs == flgo) && (flgn != flgo); ! 240: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 241: regs.n = flgn != 0; ! 242: put_word(dsta,newv); ! 243: }}}}}} ! 244: void op_5070(UWORD opcode) ! 245: { ! 246: ULONG srcreg = 8; ! 247: ULONG dstreg = (opcode & 7) >> 0; ! 248: {{ ULONG src = srcreg; ! 249: { CPTR dsta = regs.a[dstreg]; ! 250: UWORD dstdp = nextiword(); ! 251: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 252: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 253: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 254: dsta += dstdpr; ! 255: { WORD dst = get_word(dsta); ! 256: { ULONG newv = dst + src; ! 257: { bool flgs = ((WORD)(src)) < 0; ! 258: bool flgo = ((WORD)(dst)) < 0; ! 259: bool flgn = ((WORD)(newv)) < 0; ! 260: regs.z = ((WORD)(newv)) == 0; ! 261: regs.v = (flgs == flgo) && (flgn != flgo); ! 262: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 263: regs.n = flgn != 0; ! 264: put_word(dsta,newv); ! 265: }}}}}}}} ! 266: void op_5078(UWORD opcode) ! 267: { ! 268: ULONG srcreg = 8; ! 269: {{ ULONG src = srcreg; ! 270: { CPTR dsta = (LONG)(WORD)nextiword(); ! 271: WORD dst = get_word(dsta); ! 272: { ULONG newv = dst + src; ! 273: { bool flgs = ((WORD)(src)) < 0; ! 274: bool flgo = ((WORD)(dst)) < 0; ! 275: bool flgn = ((WORD)(newv)) < 0; ! 276: regs.z = ((WORD)(newv)) == 0; ! 277: regs.v = (flgs == flgo) && (flgn != flgo); ! 278: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 279: regs.n = flgn != 0; ! 280: put_word(dsta,newv); ! 281: }}}}}} ! 282: void op_5079(UWORD opcode) ! 283: { ! 284: ULONG srcreg = 8; ! 285: {{ ULONG src = srcreg; ! 286: { CPTR dsta = nextilong(); ! 287: WORD dst = get_word(dsta); ! 288: { ULONG newv = dst + src; ! 289: { bool flgs = ((WORD)(src)) < 0; ! 290: bool flgo = ((WORD)(dst)) < 0; ! 291: bool flgn = ((WORD)(newv)) < 0; ! 292: regs.z = ((WORD)(newv)) == 0; ! 293: regs.v = (flgs == flgo) && (flgn != flgo); ! 294: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 295: regs.n = flgn != 0; ! 296: put_word(dsta,newv); ! 297: }}}}}} ! 298: void op_5080(UWORD opcode) ! 299: { ! 300: ULONG srcreg = 8; ! 301: ULONG dstreg = (opcode & 7) >> 0; ! 302: {{ ULONG src = srcreg; ! 303: { LONG dst = regs.d[dstreg]; ! 304: { ULONG newv = dst + src; ! 305: { bool flgs = ((LONG)(src)) < 0; ! 306: bool flgo = ((LONG)(dst)) < 0; ! 307: bool flgn = ((LONG)(newv)) < 0; ! 308: regs.z = ((LONG)(newv)) == 0; ! 309: regs.v = (flgs == flgo) && (flgn != flgo); ! 310: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 311: regs.n = flgn != 0; ! 312: regs.d[dstreg] = (newv); ! 313: }}}}}} ! 314: void op_5088(UWORD opcode) ! 315: { ! 316: ULONG srcreg = 8; ! 317: ULONG dstreg = (opcode & 7) >> 0; ! 318: {{ ULONG src = srcreg; ! 319: { LONG dst = regs.a[dstreg]; ! 320: { ULONG newv = dst + src; ! 321: regs.a[dstreg] = (newv); ! 322: }}}}} ! 323: void op_5090(UWORD opcode) ! 324: { ! 325: ULONG srcreg = 8; ! 326: ULONG dstreg = (opcode & 7) >> 0; ! 327: {{ ULONG src = srcreg; ! 328: { CPTR dsta = regs.a[dstreg]; ! 329: LONG dst = get_long(dsta); ! 330: { ULONG newv = dst + src; ! 331: { bool flgs = ((LONG)(src)) < 0; ! 332: bool flgo = ((LONG)(dst)) < 0; ! 333: bool flgn = ((LONG)(newv)) < 0; ! 334: regs.z = ((LONG)(newv)) == 0; ! 335: regs.v = (flgs == flgo) && (flgn != flgo); ! 336: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 337: regs.n = flgn != 0; ! 338: put_long(dsta,newv); ! 339: }}}}}} ! 340: void op_5098(UWORD opcode) ! 341: { ! 342: ULONG srcreg = 8; ! 343: ULONG dstreg = (opcode & 7) >> 0; ! 344: {{ ULONG src = srcreg; ! 345: { CPTR dsta = regs.a[dstreg]; ! 346: LONG dst = get_long(dsta); ! 347: { regs.a[dstreg] += 4; ! 348: { ULONG newv = dst + src; ! 349: { bool flgs = ((LONG)(src)) < 0; ! 350: bool flgo = ((LONG)(dst)) < 0; ! 351: bool flgn = ((LONG)(newv)) < 0; ! 352: regs.z = ((LONG)(newv)) == 0; ! 353: regs.v = (flgs == flgo) && (flgn != flgo); ! 354: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 355: regs.n = flgn != 0; ! 356: put_long(dsta,newv); ! 357: }}}}}}} ! 358: void op_50a0(UWORD opcode) ! 359: { ! 360: ULONG srcreg = 8; ! 361: ULONG dstreg = (opcode & 7) >> 0; ! 362: {{ ULONG src = srcreg; ! 363: { regs.a[dstreg] -= 4; ! 364: { CPTR dsta = regs.a[dstreg]; ! 365: LONG dst = get_long(dsta); ! 366: { ULONG newv = dst + src; ! 367: { bool flgs = ((LONG)(src)) < 0; ! 368: bool flgo = ((LONG)(dst)) < 0; ! 369: bool flgn = ((LONG)(newv)) < 0; ! 370: regs.z = ((LONG)(newv)) == 0; ! 371: regs.v = (flgs == flgo) && (flgn != flgo); ! 372: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 373: regs.n = flgn != 0; ! 374: put_long(dsta,newv); ! 375: }}}}}}} ! 376: void op_50a8(UWORD opcode) ! 377: { ! 378: ULONG srcreg = 8; ! 379: ULONG dstreg = (opcode & 7) >> 0; ! 380: {{ ULONG src = srcreg; ! 381: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 382: LONG dst = get_long(dsta); ! 383: { ULONG newv = dst + src; ! 384: { bool flgs = ((LONG)(src)) < 0; ! 385: bool flgo = ((LONG)(dst)) < 0; ! 386: bool flgn = ((LONG)(newv)) < 0; ! 387: regs.z = ((LONG)(newv)) == 0; ! 388: regs.v = (flgs == flgo) && (flgn != flgo); ! 389: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 390: regs.n = flgn != 0; ! 391: put_long(dsta,newv); ! 392: }}}}}} ! 393: void op_50b0(UWORD opcode) ! 394: { ! 395: ULONG srcreg = 8; ! 396: ULONG dstreg = (opcode & 7) >> 0; ! 397: {{ ULONG src = srcreg; ! 398: { CPTR dsta = regs.a[dstreg]; ! 399: UWORD dstdp = nextiword(); ! 400: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 401: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 402: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 403: dsta += dstdpr; ! 404: { LONG dst = get_long(dsta); ! 405: { ULONG newv = dst + src; ! 406: { bool flgs = ((LONG)(src)) < 0; ! 407: bool flgo = ((LONG)(dst)) < 0; ! 408: bool flgn = ((LONG)(newv)) < 0; ! 409: regs.z = ((LONG)(newv)) == 0; ! 410: regs.v = (flgs == flgo) && (flgn != flgo); ! 411: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 412: regs.n = flgn != 0; ! 413: put_long(dsta,newv); ! 414: }}}}}}}} ! 415: void op_50b8(UWORD opcode) ! 416: { ! 417: ULONG srcreg = 8; ! 418: {{ ULONG src = srcreg; ! 419: { CPTR dsta = (LONG)(WORD)nextiword(); ! 420: LONG dst = get_long(dsta); ! 421: { ULONG newv = dst + src; ! 422: { bool flgs = ((LONG)(src)) < 0; ! 423: bool flgo = ((LONG)(dst)) < 0; ! 424: bool flgn = ((LONG)(newv)) < 0; ! 425: regs.z = ((LONG)(newv)) == 0; ! 426: regs.v = (flgs == flgo) && (flgn != flgo); ! 427: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 428: regs.n = flgn != 0; ! 429: put_long(dsta,newv); ! 430: }}}}}} ! 431: void op_50b9(UWORD opcode) ! 432: { ! 433: ULONG srcreg = 8; ! 434: {{ ULONG src = srcreg; ! 435: { CPTR dsta = nextilong(); ! 436: LONG dst = get_long(dsta); ! 437: { ULONG newv = dst + src; ! 438: { bool flgs = ((LONG)(src)) < 0; ! 439: bool flgo = ((LONG)(dst)) < 0; ! 440: bool flgn = ((LONG)(newv)) < 0; ! 441: regs.z = ((LONG)(newv)) == 0; ! 442: regs.v = (flgs == flgo) && (flgn != flgo); ! 443: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 444: regs.n = flgn != 0; ! 445: put_long(dsta,newv); ! 446: }}}}}} ! 447: void op_50c0(UWORD opcode) ! 448: { ! 449: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 450: {{{ int val = cctrue(0) ? 0xff : 0; ! 451: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 452: }}}} ! 453: void op_50c8(UWORD opcode) ! 454: { ! 455: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 456: {{ WORD src = regs.d[srcreg]; ! 457: { WORD offs = nextiword(); ! 458: if (!cctrue(0)) { ! 459: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 460: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 461: } ! 462: }}}} ! 463: void op_50d0(UWORD opcode) ! 464: { ! 465: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 466: {{ CPTR srca = regs.a[srcreg]; ! 467: { int val = cctrue(0) ? 0xff : 0; ! 468: put_byte(srca,val); ! 469: }}}} ! 470: void op_50d8(UWORD opcode) ! 471: { ! 472: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 473: {{ CPTR srca = regs.a[srcreg]; ! 474: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 475: { int val = cctrue(0) ? 0xff : 0; ! 476: put_byte(srca,val); ! 477: }}}}} ! 478: void op_50e0(UWORD opcode) ! 479: { ! 480: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 481: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 482: { CPTR srca = regs.a[srcreg]; ! 483: { int val = cctrue(0) ? 0xff : 0; ! 484: put_byte(srca,val); ! 485: }}}}} ! 486: void op_50e8(UWORD opcode) ! 487: { ! 488: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 489: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 490: { int val = cctrue(0) ? 0xff : 0; ! 491: put_byte(srca,val); ! 492: }}}} ! 493: void op_50f0(UWORD opcode) ! 494: { ! 495: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 496: {{ CPTR srca = regs.a[srcreg]; ! 497: UWORD srcdp = nextiword(); ! 498: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 499: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 500: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 501: srca += srcdpr; ! 502: { int val = cctrue(0) ? 0xff : 0; ! 503: put_byte(srca,val); ! 504: }}}}} ! 505: void op_50f8(UWORD opcode) ! 506: { ! 507: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 508: { int val = cctrue(0) ? 0xff : 0; ! 509: put_byte(srca,val); ! 510: }}}} ! 511: void op_50f9(UWORD opcode) ! 512: { ! 513: {{ CPTR srca = nextilong(); ! 514: { int val = cctrue(0) ? 0xff : 0; ! 515: put_byte(srca,val); ! 516: }}}} ! 517: void op_5100(UWORD opcode) ! 518: { ! 519: ULONG srcreg = 8; ! 520: ULONG dstreg = (opcode & 7) >> 0; ! 521: {{ ULONG src = srcreg; ! 522: { BYTE dst = regs.d[dstreg]; ! 523: { ULONG newv = dst - src; ! 524: { bool flgs = ((BYTE)(src)) < 0; ! 525: bool flgo = ((BYTE)(dst)) < 0; ! 526: bool flgn = ((BYTE)(newv)) < 0; ! 527: regs.z = ((BYTE)(newv)) == 0; ! 528: regs.v = (flgs != flgo) && (flgn != flgo); ! 529: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 530: regs.n = flgn != 0; ! 531: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 532: }}}}}} ! 533: void op_5110(UWORD opcode) ! 534: { ! 535: ULONG srcreg = 8; ! 536: ULONG dstreg = (opcode & 7) >> 0; ! 537: {{ ULONG src = srcreg; ! 538: { CPTR dsta = regs.a[dstreg]; ! 539: BYTE dst = get_byte(dsta); ! 540: { ULONG newv = dst - src; ! 541: { bool flgs = ((BYTE)(src)) < 0; ! 542: bool flgo = ((BYTE)(dst)) < 0; ! 543: bool flgn = ((BYTE)(newv)) < 0; ! 544: regs.z = ((BYTE)(newv)) == 0; ! 545: regs.v = (flgs != flgo) && (flgn != flgo); ! 546: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 547: regs.n = flgn != 0; ! 548: put_byte(dsta,newv); ! 549: }}}}}} ! 550: void op_5118(UWORD opcode) ! 551: { ! 552: ULONG srcreg = 8; ! 553: ULONG dstreg = (opcode & 7) >> 0; ! 554: {{ ULONG src = srcreg; ! 555: { CPTR dsta = regs.a[dstreg]; ! 556: BYTE dst = get_byte(dsta); ! 557: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 558: { ULONG newv = dst - src; ! 559: { bool flgs = ((BYTE)(src)) < 0; ! 560: bool flgo = ((BYTE)(dst)) < 0; ! 561: bool flgn = ((BYTE)(newv)) < 0; ! 562: regs.z = ((BYTE)(newv)) == 0; ! 563: regs.v = (flgs != flgo) && (flgn != flgo); ! 564: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 565: regs.n = flgn != 0; ! 566: put_byte(dsta,newv); ! 567: }}}}}}} ! 568: void op_5120(UWORD opcode) ! 569: { ! 570: ULONG srcreg = 8; ! 571: ULONG dstreg = (opcode & 7) >> 0; ! 572: {{ ULONG src = srcreg; ! 573: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 574: { CPTR dsta = regs.a[dstreg]; ! 575: BYTE dst = get_byte(dsta); ! 576: { ULONG newv = dst - src; ! 577: { bool flgs = ((BYTE)(src)) < 0; ! 578: bool flgo = ((BYTE)(dst)) < 0; ! 579: bool flgn = ((BYTE)(newv)) < 0; ! 580: regs.z = ((BYTE)(newv)) == 0; ! 581: regs.v = (flgs != flgo) && (flgn != flgo); ! 582: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 583: regs.n = flgn != 0; ! 584: put_byte(dsta,newv); ! 585: }}}}}}} ! 586: void op_5128(UWORD opcode) ! 587: { ! 588: ULONG srcreg = 8; ! 589: ULONG dstreg = (opcode & 7) >> 0; ! 590: {{ ULONG src = srcreg; ! 591: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 592: BYTE dst = get_byte(dsta); ! 593: { ULONG newv = dst - src; ! 594: { bool flgs = ((BYTE)(src)) < 0; ! 595: bool flgo = ((BYTE)(dst)) < 0; ! 596: bool flgn = ((BYTE)(newv)) < 0; ! 597: regs.z = ((BYTE)(newv)) == 0; ! 598: regs.v = (flgs != flgo) && (flgn != flgo); ! 599: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 600: regs.n = flgn != 0; ! 601: put_byte(dsta,newv); ! 602: }}}}}} ! 603: void op_5130(UWORD opcode) ! 604: { ! 605: ULONG srcreg = 8; ! 606: ULONG dstreg = (opcode & 7) >> 0; ! 607: {{ ULONG src = srcreg; ! 608: { CPTR dsta = regs.a[dstreg]; ! 609: UWORD dstdp = nextiword(); ! 610: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 611: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 612: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 613: dsta += dstdpr; ! 614: { BYTE dst = get_byte(dsta); ! 615: { ULONG newv = dst - src; ! 616: { bool flgs = ((BYTE)(src)) < 0; ! 617: bool flgo = ((BYTE)(dst)) < 0; ! 618: bool flgn = ((BYTE)(newv)) < 0; ! 619: regs.z = ((BYTE)(newv)) == 0; ! 620: regs.v = (flgs != flgo) && (flgn != flgo); ! 621: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 622: regs.n = flgn != 0; ! 623: put_byte(dsta,newv); ! 624: }}}}}}}} ! 625: void op_5138(UWORD opcode) ! 626: { ! 627: ULONG srcreg = 8; ! 628: {{ ULONG src = srcreg; ! 629: { CPTR dsta = (LONG)(WORD)nextiword(); ! 630: BYTE dst = get_byte(dsta); ! 631: { ULONG newv = dst - src; ! 632: { bool flgs = ((BYTE)(src)) < 0; ! 633: bool flgo = ((BYTE)(dst)) < 0; ! 634: bool flgn = ((BYTE)(newv)) < 0; ! 635: regs.z = ((BYTE)(newv)) == 0; ! 636: regs.v = (flgs != flgo) && (flgn != flgo); ! 637: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 638: regs.n = flgn != 0; ! 639: put_byte(dsta,newv); ! 640: }}}}}} ! 641: void op_5139(UWORD opcode) ! 642: { ! 643: ULONG srcreg = 8; ! 644: {{ ULONG src = srcreg; ! 645: { CPTR dsta = nextilong(); ! 646: BYTE dst = get_byte(dsta); ! 647: { ULONG newv = dst - src; ! 648: { bool flgs = ((BYTE)(src)) < 0; ! 649: bool flgo = ((BYTE)(dst)) < 0; ! 650: bool flgn = ((BYTE)(newv)) < 0; ! 651: regs.z = ((BYTE)(newv)) == 0; ! 652: regs.v = (flgs != flgo) && (flgn != flgo); ! 653: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 654: regs.n = flgn != 0; ! 655: put_byte(dsta,newv); ! 656: }}}}}} ! 657: void op_5140(UWORD opcode) ! 658: { ! 659: ULONG srcreg = 8; ! 660: ULONG dstreg = (opcode & 7) >> 0; ! 661: {{ ULONG src = srcreg; ! 662: { WORD dst = regs.d[dstreg]; ! 663: { ULONG newv = dst - src; ! 664: { bool flgs = ((WORD)(src)) < 0; ! 665: bool flgo = ((WORD)(dst)) < 0; ! 666: bool flgn = ((WORD)(newv)) < 0; ! 667: regs.z = ((WORD)(newv)) == 0; ! 668: regs.v = (flgs != flgo) && (flgn != flgo); ! 669: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 670: regs.n = flgn != 0; ! 671: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 672: }}}}}} ! 673: void op_5148(UWORD opcode) ! 674: { ! 675: ULONG srcreg = 8; ! 676: ULONG dstreg = (opcode & 7) >> 0; ! 677: {{ ULONG src = srcreg; ! 678: { LONG dst = regs.a[dstreg]; ! 679: { ULONG newv = dst - src; ! 680: regs.a[dstreg] = (newv); ! 681: }}}}} ! 682: void op_5150(UWORD opcode) ! 683: { ! 684: ULONG srcreg = 8; ! 685: ULONG dstreg = (opcode & 7) >> 0; ! 686: {{ ULONG src = srcreg; ! 687: { CPTR dsta = regs.a[dstreg]; ! 688: WORD dst = get_word(dsta); ! 689: { ULONG newv = dst - src; ! 690: { bool flgs = ((WORD)(src)) < 0; ! 691: bool flgo = ((WORD)(dst)) < 0; ! 692: bool flgn = ((WORD)(newv)) < 0; ! 693: regs.z = ((WORD)(newv)) == 0; ! 694: regs.v = (flgs != flgo) && (flgn != flgo); ! 695: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 696: regs.n = flgn != 0; ! 697: put_word(dsta,newv); ! 698: }}}}}} ! 699: void op_5158(UWORD opcode) ! 700: { ! 701: ULONG srcreg = 8; ! 702: ULONG dstreg = (opcode & 7) >> 0; ! 703: {{ ULONG src = srcreg; ! 704: { CPTR dsta = regs.a[dstreg]; ! 705: WORD dst = get_word(dsta); ! 706: { regs.a[dstreg] += 2; ! 707: { ULONG newv = dst - src; ! 708: { bool flgs = ((WORD)(src)) < 0; ! 709: bool flgo = ((WORD)(dst)) < 0; ! 710: bool flgn = ((WORD)(newv)) < 0; ! 711: regs.z = ((WORD)(newv)) == 0; ! 712: regs.v = (flgs != flgo) && (flgn != flgo); ! 713: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 714: regs.n = flgn != 0; ! 715: put_word(dsta,newv); ! 716: }}}}}}} ! 717: void op_5160(UWORD opcode) ! 718: { ! 719: ULONG srcreg = 8; ! 720: ULONG dstreg = (opcode & 7) >> 0; ! 721: {{ ULONG src = srcreg; ! 722: { regs.a[dstreg] -= 2; ! 723: { CPTR dsta = regs.a[dstreg]; ! 724: WORD dst = get_word(dsta); ! 725: { ULONG newv = dst - src; ! 726: { bool flgs = ((WORD)(src)) < 0; ! 727: bool flgo = ((WORD)(dst)) < 0; ! 728: bool flgn = ((WORD)(newv)) < 0; ! 729: regs.z = ((WORD)(newv)) == 0; ! 730: regs.v = (flgs != flgo) && (flgn != flgo); ! 731: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 732: regs.n = flgn != 0; ! 733: put_word(dsta,newv); ! 734: }}}}}}} ! 735: void op_5168(UWORD opcode) ! 736: { ! 737: ULONG srcreg = 8; ! 738: ULONG dstreg = (opcode & 7) >> 0; ! 739: {{ ULONG src = srcreg; ! 740: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 741: WORD dst = get_word(dsta); ! 742: { ULONG newv = dst - src; ! 743: { bool flgs = ((WORD)(src)) < 0; ! 744: bool flgo = ((WORD)(dst)) < 0; ! 745: bool flgn = ((WORD)(newv)) < 0; ! 746: regs.z = ((WORD)(newv)) == 0; ! 747: regs.v = (flgs != flgo) && (flgn != flgo); ! 748: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 749: regs.n = flgn != 0; ! 750: put_word(dsta,newv); ! 751: }}}}}} ! 752: void op_5170(UWORD opcode) ! 753: { ! 754: ULONG srcreg = 8; ! 755: ULONG dstreg = (opcode & 7) >> 0; ! 756: {{ ULONG src = srcreg; ! 757: { CPTR dsta = regs.a[dstreg]; ! 758: UWORD dstdp = nextiword(); ! 759: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 760: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 761: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 762: dsta += dstdpr; ! 763: { WORD dst = get_word(dsta); ! 764: { ULONG newv = dst - src; ! 765: { bool flgs = ((WORD)(src)) < 0; ! 766: bool flgo = ((WORD)(dst)) < 0; ! 767: bool flgn = ((WORD)(newv)) < 0; ! 768: regs.z = ((WORD)(newv)) == 0; ! 769: regs.v = (flgs != flgo) && (flgn != flgo); ! 770: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 771: regs.n = flgn != 0; ! 772: put_word(dsta,newv); ! 773: }}}}}}}} ! 774: void op_5178(UWORD opcode) ! 775: { ! 776: ULONG srcreg = 8; ! 777: {{ ULONG src = srcreg; ! 778: { CPTR dsta = (LONG)(WORD)nextiword(); ! 779: WORD dst = get_word(dsta); ! 780: { ULONG newv = dst - src; ! 781: { bool flgs = ((WORD)(src)) < 0; ! 782: bool flgo = ((WORD)(dst)) < 0; ! 783: bool flgn = ((WORD)(newv)) < 0; ! 784: regs.z = ((WORD)(newv)) == 0; ! 785: regs.v = (flgs != flgo) && (flgn != flgo); ! 786: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 787: regs.n = flgn != 0; ! 788: put_word(dsta,newv); ! 789: }}}}}} ! 790: void op_5179(UWORD opcode) ! 791: { ! 792: ULONG srcreg = 8; ! 793: {{ ULONG src = srcreg; ! 794: { CPTR dsta = nextilong(); ! 795: WORD dst = get_word(dsta); ! 796: { ULONG newv = dst - src; ! 797: { bool flgs = ((WORD)(src)) < 0; ! 798: bool flgo = ((WORD)(dst)) < 0; ! 799: bool flgn = ((WORD)(newv)) < 0; ! 800: regs.z = ((WORD)(newv)) == 0; ! 801: regs.v = (flgs != flgo) && (flgn != flgo); ! 802: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 803: regs.n = flgn != 0; ! 804: put_word(dsta,newv); ! 805: }}}}}} ! 806: void op_5180(UWORD opcode) ! 807: { ! 808: ULONG srcreg = 8; ! 809: ULONG dstreg = (opcode & 7) >> 0; ! 810: {{ ULONG src = srcreg; ! 811: { LONG dst = regs.d[dstreg]; ! 812: { ULONG newv = dst - src; ! 813: { bool flgs = ((LONG)(src)) < 0; ! 814: bool flgo = ((LONG)(dst)) < 0; ! 815: bool flgn = ((LONG)(newv)) < 0; ! 816: regs.z = ((LONG)(newv)) == 0; ! 817: regs.v = (flgs != flgo) && (flgn != flgo); ! 818: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 819: regs.n = flgn != 0; ! 820: regs.d[dstreg] = (newv); ! 821: }}}}}} ! 822: void op_5188(UWORD opcode) ! 823: { ! 824: ULONG srcreg = 8; ! 825: ULONG dstreg = (opcode & 7) >> 0; ! 826: {{ ULONG src = srcreg; ! 827: { LONG dst = regs.a[dstreg]; ! 828: { ULONG newv = dst - src; ! 829: regs.a[dstreg] = (newv); ! 830: }}}}} ! 831: void op_5190(UWORD opcode) ! 832: { ! 833: ULONG srcreg = 8; ! 834: ULONG dstreg = (opcode & 7) >> 0; ! 835: {{ ULONG src = srcreg; ! 836: { CPTR dsta = regs.a[dstreg]; ! 837: LONG dst = get_long(dsta); ! 838: { ULONG newv = dst - src; ! 839: { bool flgs = ((LONG)(src)) < 0; ! 840: bool flgo = ((LONG)(dst)) < 0; ! 841: bool flgn = ((LONG)(newv)) < 0; ! 842: regs.z = ((LONG)(newv)) == 0; ! 843: regs.v = (flgs != flgo) && (flgn != flgo); ! 844: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 845: regs.n = flgn != 0; ! 846: put_long(dsta,newv); ! 847: }}}}}} ! 848: void op_5198(UWORD opcode) ! 849: { ! 850: ULONG srcreg = 8; ! 851: ULONG dstreg = (opcode & 7) >> 0; ! 852: {{ ULONG src = srcreg; ! 853: { CPTR dsta = regs.a[dstreg]; ! 854: LONG dst = get_long(dsta); ! 855: { regs.a[dstreg] += 4; ! 856: { ULONG newv = dst - src; ! 857: { bool flgs = ((LONG)(src)) < 0; ! 858: bool flgo = ((LONG)(dst)) < 0; ! 859: bool flgn = ((LONG)(newv)) < 0; ! 860: regs.z = ((LONG)(newv)) == 0; ! 861: regs.v = (flgs != flgo) && (flgn != flgo); ! 862: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 863: regs.n = flgn != 0; ! 864: put_long(dsta,newv); ! 865: }}}}}}} ! 866: void op_51a0(UWORD opcode) ! 867: { ! 868: ULONG srcreg = 8; ! 869: ULONG dstreg = (opcode & 7) >> 0; ! 870: {{ ULONG src = srcreg; ! 871: { regs.a[dstreg] -= 4; ! 872: { CPTR dsta = regs.a[dstreg]; ! 873: LONG dst = get_long(dsta); ! 874: { ULONG newv = dst - src; ! 875: { bool flgs = ((LONG)(src)) < 0; ! 876: bool flgo = ((LONG)(dst)) < 0; ! 877: bool flgn = ((LONG)(newv)) < 0; ! 878: regs.z = ((LONG)(newv)) == 0; ! 879: regs.v = (flgs != flgo) && (flgn != flgo); ! 880: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 881: regs.n = flgn != 0; ! 882: put_long(dsta,newv); ! 883: }}}}}}} ! 884: void op_51a8(UWORD opcode) ! 885: { ! 886: ULONG srcreg = 8; ! 887: ULONG dstreg = (opcode & 7) >> 0; ! 888: {{ ULONG src = srcreg; ! 889: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 890: LONG dst = get_long(dsta); ! 891: { ULONG newv = dst - src; ! 892: { bool flgs = ((LONG)(src)) < 0; ! 893: bool flgo = ((LONG)(dst)) < 0; ! 894: bool flgn = ((LONG)(newv)) < 0; ! 895: regs.z = ((LONG)(newv)) == 0; ! 896: regs.v = (flgs != flgo) && (flgn != flgo); ! 897: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 898: regs.n = flgn != 0; ! 899: put_long(dsta,newv); ! 900: }}}}}} ! 901: void op_51b0(UWORD opcode) ! 902: { ! 903: ULONG srcreg = 8; ! 904: ULONG dstreg = (opcode & 7) >> 0; ! 905: {{ ULONG src = srcreg; ! 906: { CPTR dsta = regs.a[dstreg]; ! 907: UWORD dstdp = nextiword(); ! 908: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 909: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 910: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 911: dsta += dstdpr; ! 912: { LONG dst = get_long(dsta); ! 913: { ULONG newv = dst - src; ! 914: { bool flgs = ((LONG)(src)) < 0; ! 915: bool flgo = ((LONG)(dst)) < 0; ! 916: bool flgn = ((LONG)(newv)) < 0; ! 917: regs.z = ((LONG)(newv)) == 0; ! 918: regs.v = (flgs != flgo) && (flgn != flgo); ! 919: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 920: regs.n = flgn != 0; ! 921: put_long(dsta,newv); ! 922: }}}}}}}} ! 923: void op_51b8(UWORD opcode) ! 924: { ! 925: ULONG srcreg = 8; ! 926: {{ ULONG src = srcreg; ! 927: { CPTR dsta = (LONG)(WORD)nextiword(); ! 928: LONG dst = get_long(dsta); ! 929: { ULONG newv = dst - src; ! 930: { bool flgs = ((LONG)(src)) < 0; ! 931: bool flgo = ((LONG)(dst)) < 0; ! 932: bool flgn = ((LONG)(newv)) < 0; ! 933: regs.z = ((LONG)(newv)) == 0; ! 934: regs.v = (flgs != flgo) && (flgn != flgo); ! 935: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 936: regs.n = flgn != 0; ! 937: put_long(dsta,newv); ! 938: }}}}}} ! 939: void op_51b9(UWORD opcode) ! 940: { ! 941: ULONG srcreg = 8; ! 942: {{ ULONG src = srcreg; ! 943: { CPTR dsta = nextilong(); ! 944: LONG dst = get_long(dsta); ! 945: { ULONG newv = dst - src; ! 946: { bool flgs = ((LONG)(src)) < 0; ! 947: bool flgo = ((LONG)(dst)) < 0; ! 948: bool flgn = ((LONG)(newv)) < 0; ! 949: regs.z = ((LONG)(newv)) == 0; ! 950: regs.v = (flgs != flgo) && (flgn != flgo); ! 951: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 952: regs.n = flgn != 0; ! 953: put_long(dsta,newv); ! 954: }}}}}} ! 955: void op_51c0(UWORD opcode) ! 956: { ! 957: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 958: {{{ int val = cctrue(1) ? 0xff : 0; ! 959: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 960: }}}} ! 961: void op_51c8(UWORD opcode) ! 962: { ! 963: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 964: {{ WORD src = regs.d[srcreg]; ! 965: { WORD offs = nextiword(); ! 966: if (!cctrue(1)) { ! 967: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 968: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 969: } ! 970: }}}} ! 971: void op_51d0(UWORD opcode) ! 972: { ! 973: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 974: {{ CPTR srca = regs.a[srcreg]; ! 975: { int val = cctrue(1) ? 0xff : 0; ! 976: put_byte(srca,val); ! 977: }}}} ! 978: void op_51d8(UWORD opcode) ! 979: { ! 980: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 981: {{ CPTR srca = regs.a[srcreg]; ! 982: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 983: { int val = cctrue(1) ? 0xff : 0; ! 984: put_byte(srca,val); ! 985: }}}}} ! 986: void op_51e0(UWORD opcode) ! 987: { ! 988: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 989: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 990: { CPTR srca = regs.a[srcreg]; ! 991: { int val = cctrue(1) ? 0xff : 0; ! 992: put_byte(srca,val); ! 993: }}}}} ! 994: void op_51e8(UWORD opcode) ! 995: { ! 996: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 997: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 998: { int val = cctrue(1) ? 0xff : 0; ! 999: put_byte(srca,val); ! 1000: }}}} ! 1001: void op_51f0(UWORD opcode) ! 1002: { ! 1003: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1004: {{ CPTR srca = regs.a[srcreg]; ! 1005: UWORD srcdp = nextiword(); ! 1006: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 1007: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 1008: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 1009: srca += srcdpr; ! 1010: { int val = cctrue(1) ? 0xff : 0; ! 1011: put_byte(srca,val); ! 1012: }}}}} ! 1013: void op_51f8(UWORD opcode) ! 1014: { ! 1015: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 1016: { int val = cctrue(1) ? 0xff : 0; ! 1017: put_byte(srca,val); ! 1018: }}}} ! 1019: void op_51f9(UWORD opcode) ! 1020: { ! 1021: {{ CPTR srca = nextilong(); ! 1022: { int val = cctrue(1) ? 0xff : 0; ! 1023: put_byte(srca,val); ! 1024: }}}} ! 1025: void op_5200(UWORD opcode) ! 1026: { ! 1027: ULONG srcreg = 1; ! 1028: ULONG dstreg = (opcode & 7) >> 0; ! 1029: {{ ULONG src = srcreg; ! 1030: { BYTE dst = regs.d[dstreg]; ! 1031: { ULONG newv = dst + src; ! 1032: { bool flgs = ((BYTE)(src)) < 0; ! 1033: bool flgo = ((BYTE)(dst)) < 0; ! 1034: bool flgn = ((BYTE)(newv)) < 0; ! 1035: regs.z = ((BYTE)(newv)) == 0; ! 1036: regs.v = (flgs == flgo) && (flgn != flgo); ! 1037: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 1038: regs.n = flgn != 0; ! 1039: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 1040: }}}}}} ! 1041: void op_5210(UWORD opcode) ! 1042: { ! 1043: ULONG srcreg = 1; ! 1044: ULONG dstreg = (opcode & 7) >> 0; ! 1045: {{ ULONG src = srcreg; ! 1046: { CPTR dsta = regs.a[dstreg]; ! 1047: BYTE dst = get_byte(dsta); ! 1048: { ULONG newv = dst + src; ! 1049: { bool flgs = ((BYTE)(src)) < 0; ! 1050: bool flgo = ((BYTE)(dst)) < 0; ! 1051: bool flgn = ((BYTE)(newv)) < 0; ! 1052: regs.z = ((BYTE)(newv)) == 0; ! 1053: regs.v = (flgs == flgo) && (flgn != flgo); ! 1054: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 1055: regs.n = flgn != 0; ! 1056: put_byte(dsta,newv); ! 1057: }}}}}} ! 1058: void op_5218(UWORD opcode) ! 1059: { ! 1060: ULONG srcreg = 1; ! 1061: ULONG dstreg = (opcode & 7) >> 0; ! 1062: {{ ULONG src = srcreg; ! 1063: { CPTR dsta = regs.a[dstreg]; ! 1064: BYTE dst = get_byte(dsta); ! 1065: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 1066: { ULONG newv = dst + src; ! 1067: { bool flgs = ((BYTE)(src)) < 0; ! 1068: bool flgo = ((BYTE)(dst)) < 0; ! 1069: bool flgn = ((BYTE)(newv)) < 0; ! 1070: regs.z = ((BYTE)(newv)) == 0; ! 1071: regs.v = (flgs == flgo) && (flgn != flgo); ! 1072: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 1073: regs.n = flgn != 0; ! 1074: put_byte(dsta,newv); ! 1075: }}}}}}} ! 1076: void op_5220(UWORD opcode) ! 1077: { ! 1078: ULONG srcreg = 1; ! 1079: ULONG dstreg = (opcode & 7) >> 0; ! 1080: {{ ULONG src = srcreg; ! 1081: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 1082: { CPTR dsta = regs.a[dstreg]; ! 1083: BYTE dst = get_byte(dsta); ! 1084: { ULONG newv = dst + src; ! 1085: { bool flgs = ((BYTE)(src)) < 0; ! 1086: bool flgo = ((BYTE)(dst)) < 0; ! 1087: bool flgn = ((BYTE)(newv)) < 0; ! 1088: regs.z = ((BYTE)(newv)) == 0; ! 1089: regs.v = (flgs == flgo) && (flgn != flgo); ! 1090: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 1091: regs.n = flgn != 0; ! 1092: put_byte(dsta,newv); ! 1093: }}}}}}} ! 1094: void op_5228(UWORD opcode) ! 1095: { ! 1096: ULONG srcreg = 1; ! 1097: ULONG dstreg = (opcode & 7) >> 0; ! 1098: {{ ULONG src = srcreg; ! 1099: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 1100: BYTE dst = get_byte(dsta); ! 1101: { ULONG newv = dst + src; ! 1102: { bool flgs = ((BYTE)(src)) < 0; ! 1103: bool flgo = ((BYTE)(dst)) < 0; ! 1104: bool flgn = ((BYTE)(newv)) < 0; ! 1105: regs.z = ((BYTE)(newv)) == 0; ! 1106: regs.v = (flgs == flgo) && (flgn != flgo); ! 1107: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 1108: regs.n = flgn != 0; ! 1109: put_byte(dsta,newv); ! 1110: }}}}}} ! 1111: void op_5230(UWORD opcode) ! 1112: { ! 1113: ULONG srcreg = 1; ! 1114: ULONG dstreg = (opcode & 7) >> 0; ! 1115: {{ ULONG src = srcreg; ! 1116: { CPTR dsta = regs.a[dstreg]; ! 1117: UWORD dstdp = nextiword(); ! 1118: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 1119: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 1120: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 1121: dsta += dstdpr; ! 1122: { BYTE dst = get_byte(dsta); ! 1123: { ULONG newv = dst + src; ! 1124: { bool flgs = ((BYTE)(src)) < 0; ! 1125: bool flgo = ((BYTE)(dst)) < 0; ! 1126: bool flgn = ((BYTE)(newv)) < 0; ! 1127: regs.z = ((BYTE)(newv)) == 0; ! 1128: regs.v = (flgs == flgo) && (flgn != flgo); ! 1129: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 1130: regs.n = flgn != 0; ! 1131: put_byte(dsta,newv); ! 1132: }}}}}}}} ! 1133: void op_5238(UWORD opcode) ! 1134: { ! 1135: ULONG srcreg = 1; ! 1136: {{ ULONG src = srcreg; ! 1137: { CPTR dsta = (LONG)(WORD)nextiword(); ! 1138: BYTE dst = get_byte(dsta); ! 1139: { ULONG newv = dst + src; ! 1140: { bool flgs = ((BYTE)(src)) < 0; ! 1141: bool flgo = ((BYTE)(dst)) < 0; ! 1142: bool flgn = ((BYTE)(newv)) < 0; ! 1143: regs.z = ((BYTE)(newv)) == 0; ! 1144: regs.v = (flgs == flgo) && (flgn != flgo); ! 1145: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 1146: regs.n = flgn != 0; ! 1147: put_byte(dsta,newv); ! 1148: }}}}}} ! 1149: void op_5239(UWORD opcode) ! 1150: { ! 1151: ULONG srcreg = 1; ! 1152: {{ ULONG src = srcreg; ! 1153: { CPTR dsta = nextilong(); ! 1154: BYTE dst = get_byte(dsta); ! 1155: { ULONG newv = dst + src; ! 1156: { bool flgs = ((BYTE)(src)) < 0; ! 1157: bool flgo = ((BYTE)(dst)) < 0; ! 1158: bool flgn = ((BYTE)(newv)) < 0; ! 1159: regs.z = ((BYTE)(newv)) == 0; ! 1160: regs.v = (flgs == flgo) && (flgn != flgo); ! 1161: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 1162: regs.n = flgn != 0; ! 1163: put_byte(dsta,newv); ! 1164: }}}}}} ! 1165: void op_5240(UWORD opcode) ! 1166: { ! 1167: ULONG srcreg = 1; ! 1168: ULONG dstreg = (opcode & 7) >> 0; ! 1169: {{ ULONG src = srcreg; ! 1170: { WORD dst = regs.d[dstreg]; ! 1171: { ULONG newv = dst + src; ! 1172: { bool flgs = ((WORD)(src)) < 0; ! 1173: bool flgo = ((WORD)(dst)) < 0; ! 1174: bool flgn = ((WORD)(newv)) < 0; ! 1175: regs.z = ((WORD)(newv)) == 0; ! 1176: regs.v = (flgs == flgo) && (flgn != flgo); ! 1177: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 1178: regs.n = flgn != 0; ! 1179: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 1180: }}}}}} ! 1181: void op_5248(UWORD opcode) ! 1182: { ! 1183: ULONG srcreg = 1; ! 1184: ULONG dstreg = (opcode & 7) >> 0; ! 1185: {{ ULONG src = srcreg; ! 1186: { LONG dst = regs.a[dstreg]; ! 1187: { ULONG newv = dst + src; ! 1188: regs.a[dstreg] = (newv); ! 1189: }}}}} ! 1190: void op_5250(UWORD opcode) ! 1191: { ! 1192: ULONG srcreg = 1; ! 1193: ULONG dstreg = (opcode & 7) >> 0; ! 1194: {{ ULONG src = srcreg; ! 1195: { CPTR dsta = regs.a[dstreg]; ! 1196: WORD dst = get_word(dsta); ! 1197: { ULONG newv = dst + src; ! 1198: { bool flgs = ((WORD)(src)) < 0; ! 1199: bool flgo = ((WORD)(dst)) < 0; ! 1200: bool flgn = ((WORD)(newv)) < 0; ! 1201: regs.z = ((WORD)(newv)) == 0; ! 1202: regs.v = (flgs == flgo) && (flgn != flgo); ! 1203: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 1204: regs.n = flgn != 0; ! 1205: put_word(dsta,newv); ! 1206: }}}}}} ! 1207: void op_5258(UWORD opcode) ! 1208: { ! 1209: ULONG srcreg = 1; ! 1210: ULONG dstreg = (opcode & 7) >> 0; ! 1211: {{ ULONG src = srcreg; ! 1212: { CPTR dsta = regs.a[dstreg]; ! 1213: WORD dst = get_word(dsta); ! 1214: { regs.a[dstreg] += 2; ! 1215: { ULONG newv = dst + src; ! 1216: { bool flgs = ((WORD)(src)) < 0; ! 1217: bool flgo = ((WORD)(dst)) < 0; ! 1218: bool flgn = ((WORD)(newv)) < 0; ! 1219: regs.z = ((WORD)(newv)) == 0; ! 1220: regs.v = (flgs == flgo) && (flgn != flgo); ! 1221: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 1222: regs.n = flgn != 0; ! 1223: put_word(dsta,newv); ! 1224: }}}}}}} ! 1225: void op_5260(UWORD opcode) ! 1226: { ! 1227: ULONG srcreg = 1; ! 1228: ULONG dstreg = (opcode & 7) >> 0; ! 1229: {{ ULONG src = srcreg; ! 1230: { regs.a[dstreg] -= 2; ! 1231: { CPTR dsta = regs.a[dstreg]; ! 1232: WORD dst = get_word(dsta); ! 1233: { ULONG newv = dst + src; ! 1234: { bool flgs = ((WORD)(src)) < 0; ! 1235: bool flgo = ((WORD)(dst)) < 0; ! 1236: bool flgn = ((WORD)(newv)) < 0; ! 1237: regs.z = ((WORD)(newv)) == 0; ! 1238: regs.v = (flgs == flgo) && (flgn != flgo); ! 1239: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 1240: regs.n = flgn != 0; ! 1241: put_word(dsta,newv); ! 1242: }}}}}}} ! 1243: void op_5268(UWORD opcode) ! 1244: { ! 1245: ULONG srcreg = 1; ! 1246: ULONG dstreg = (opcode & 7) >> 0; ! 1247: {{ ULONG src = srcreg; ! 1248: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 1249: WORD dst = get_word(dsta); ! 1250: { ULONG newv = dst + src; ! 1251: { bool flgs = ((WORD)(src)) < 0; ! 1252: bool flgo = ((WORD)(dst)) < 0; ! 1253: bool flgn = ((WORD)(newv)) < 0; ! 1254: regs.z = ((WORD)(newv)) == 0; ! 1255: regs.v = (flgs == flgo) && (flgn != flgo); ! 1256: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 1257: regs.n = flgn != 0; ! 1258: put_word(dsta,newv); ! 1259: }}}}}} ! 1260: void op_5270(UWORD opcode) ! 1261: { ! 1262: ULONG srcreg = 1; ! 1263: ULONG dstreg = (opcode & 7) >> 0; ! 1264: {{ ULONG src = srcreg; ! 1265: { CPTR dsta = regs.a[dstreg]; ! 1266: UWORD dstdp = nextiword(); ! 1267: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 1268: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 1269: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 1270: dsta += dstdpr; ! 1271: { WORD dst = get_word(dsta); ! 1272: { ULONG newv = dst + src; ! 1273: { bool flgs = ((WORD)(src)) < 0; ! 1274: bool flgo = ((WORD)(dst)) < 0; ! 1275: bool flgn = ((WORD)(newv)) < 0; ! 1276: regs.z = ((WORD)(newv)) == 0; ! 1277: regs.v = (flgs == flgo) && (flgn != flgo); ! 1278: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 1279: regs.n = flgn != 0; ! 1280: put_word(dsta,newv); ! 1281: }}}}}}}} ! 1282: void op_5278(UWORD opcode) ! 1283: { ! 1284: ULONG srcreg = 1; ! 1285: {{ ULONG src = srcreg; ! 1286: { CPTR dsta = (LONG)(WORD)nextiword(); ! 1287: WORD dst = get_word(dsta); ! 1288: { ULONG newv = dst + src; ! 1289: { bool flgs = ((WORD)(src)) < 0; ! 1290: bool flgo = ((WORD)(dst)) < 0; ! 1291: bool flgn = ((WORD)(newv)) < 0; ! 1292: regs.z = ((WORD)(newv)) == 0; ! 1293: regs.v = (flgs == flgo) && (flgn != flgo); ! 1294: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 1295: regs.n = flgn != 0; ! 1296: put_word(dsta,newv); ! 1297: }}}}}} ! 1298: void op_5279(UWORD opcode) ! 1299: { ! 1300: ULONG srcreg = 1; ! 1301: {{ ULONG src = srcreg; ! 1302: { CPTR dsta = nextilong(); ! 1303: WORD dst = get_word(dsta); ! 1304: { ULONG newv = dst + src; ! 1305: { bool flgs = ((WORD)(src)) < 0; ! 1306: bool flgo = ((WORD)(dst)) < 0; ! 1307: bool flgn = ((WORD)(newv)) < 0; ! 1308: regs.z = ((WORD)(newv)) == 0; ! 1309: regs.v = (flgs == flgo) && (flgn != flgo); ! 1310: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 1311: regs.n = flgn != 0; ! 1312: put_word(dsta,newv); ! 1313: }}}}}} ! 1314: void op_5280(UWORD opcode) ! 1315: { ! 1316: ULONG srcreg = 1; ! 1317: ULONG dstreg = (opcode & 7) >> 0; ! 1318: {{ ULONG src = srcreg; ! 1319: { LONG dst = regs.d[dstreg]; ! 1320: { ULONG newv = dst + src; ! 1321: { bool flgs = ((LONG)(src)) < 0; ! 1322: bool flgo = ((LONG)(dst)) < 0; ! 1323: bool flgn = ((LONG)(newv)) < 0; ! 1324: regs.z = ((LONG)(newv)) == 0; ! 1325: regs.v = (flgs == flgo) && (flgn != flgo); ! 1326: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 1327: regs.n = flgn != 0; ! 1328: regs.d[dstreg] = (newv); ! 1329: }}}}}} ! 1330: void op_5288(UWORD opcode) ! 1331: { ! 1332: ULONG srcreg = 1; ! 1333: ULONG dstreg = (opcode & 7) >> 0; ! 1334: {{ ULONG src = srcreg; ! 1335: { LONG dst = regs.a[dstreg]; ! 1336: { ULONG newv = dst + src; ! 1337: regs.a[dstreg] = (newv); ! 1338: }}}}} ! 1339: void op_5290(UWORD opcode) ! 1340: { ! 1341: ULONG srcreg = 1; ! 1342: ULONG dstreg = (opcode & 7) >> 0; ! 1343: {{ ULONG src = srcreg; ! 1344: { CPTR dsta = regs.a[dstreg]; ! 1345: LONG dst = get_long(dsta); ! 1346: { ULONG newv = dst + src; ! 1347: { bool flgs = ((LONG)(src)) < 0; ! 1348: bool flgo = ((LONG)(dst)) < 0; ! 1349: bool flgn = ((LONG)(newv)) < 0; ! 1350: regs.z = ((LONG)(newv)) == 0; ! 1351: regs.v = (flgs == flgo) && (flgn != flgo); ! 1352: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 1353: regs.n = flgn != 0; ! 1354: put_long(dsta,newv); ! 1355: }}}}}} ! 1356: void op_5298(UWORD opcode) ! 1357: { ! 1358: ULONG srcreg = 1; ! 1359: ULONG dstreg = (opcode & 7) >> 0; ! 1360: {{ ULONG src = srcreg; ! 1361: { CPTR dsta = regs.a[dstreg]; ! 1362: LONG dst = get_long(dsta); ! 1363: { regs.a[dstreg] += 4; ! 1364: { ULONG newv = dst + src; ! 1365: { bool flgs = ((LONG)(src)) < 0; ! 1366: bool flgo = ((LONG)(dst)) < 0; ! 1367: bool flgn = ((LONG)(newv)) < 0; ! 1368: regs.z = ((LONG)(newv)) == 0; ! 1369: regs.v = (flgs == flgo) && (flgn != flgo); ! 1370: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 1371: regs.n = flgn != 0; ! 1372: put_long(dsta,newv); ! 1373: }}}}}}} ! 1374: void op_52a0(UWORD opcode) ! 1375: { ! 1376: ULONG srcreg = 1; ! 1377: ULONG dstreg = (opcode & 7) >> 0; ! 1378: {{ ULONG src = srcreg; ! 1379: { regs.a[dstreg] -= 4; ! 1380: { CPTR dsta = regs.a[dstreg]; ! 1381: LONG dst = get_long(dsta); ! 1382: { ULONG newv = dst + src; ! 1383: { bool flgs = ((LONG)(src)) < 0; ! 1384: bool flgo = ((LONG)(dst)) < 0; ! 1385: bool flgn = ((LONG)(newv)) < 0; ! 1386: regs.z = ((LONG)(newv)) == 0; ! 1387: regs.v = (flgs == flgo) && (flgn != flgo); ! 1388: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 1389: regs.n = flgn != 0; ! 1390: put_long(dsta,newv); ! 1391: }}}}}}} ! 1392: void op_52a8(UWORD opcode) ! 1393: { ! 1394: ULONG srcreg = 1; ! 1395: ULONG dstreg = (opcode & 7) >> 0; ! 1396: {{ ULONG src = srcreg; ! 1397: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 1398: LONG dst = get_long(dsta); ! 1399: { ULONG newv = dst + src; ! 1400: { bool flgs = ((LONG)(src)) < 0; ! 1401: bool flgo = ((LONG)(dst)) < 0; ! 1402: bool flgn = ((LONG)(newv)) < 0; ! 1403: regs.z = ((LONG)(newv)) == 0; ! 1404: regs.v = (flgs == flgo) && (flgn != flgo); ! 1405: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 1406: regs.n = flgn != 0; ! 1407: put_long(dsta,newv); ! 1408: }}}}}} ! 1409: void op_52b0(UWORD opcode) ! 1410: { ! 1411: ULONG srcreg = 1; ! 1412: ULONG dstreg = (opcode & 7) >> 0; ! 1413: {{ ULONG src = srcreg; ! 1414: { CPTR dsta = regs.a[dstreg]; ! 1415: UWORD dstdp = nextiword(); ! 1416: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 1417: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 1418: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 1419: dsta += dstdpr; ! 1420: { LONG dst = get_long(dsta); ! 1421: { ULONG newv = dst + src; ! 1422: { bool flgs = ((LONG)(src)) < 0; ! 1423: bool flgo = ((LONG)(dst)) < 0; ! 1424: bool flgn = ((LONG)(newv)) < 0; ! 1425: regs.z = ((LONG)(newv)) == 0; ! 1426: regs.v = (flgs == flgo) && (flgn != flgo); ! 1427: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 1428: regs.n = flgn != 0; ! 1429: put_long(dsta,newv); ! 1430: }}}}}}}} ! 1431: void op_52b8(UWORD opcode) ! 1432: { ! 1433: ULONG srcreg = 1; ! 1434: {{ ULONG src = srcreg; ! 1435: { CPTR dsta = (LONG)(WORD)nextiword(); ! 1436: LONG dst = get_long(dsta); ! 1437: { ULONG newv = dst + src; ! 1438: { bool flgs = ((LONG)(src)) < 0; ! 1439: bool flgo = ((LONG)(dst)) < 0; ! 1440: bool flgn = ((LONG)(newv)) < 0; ! 1441: regs.z = ((LONG)(newv)) == 0; ! 1442: regs.v = (flgs == flgo) && (flgn != flgo); ! 1443: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 1444: regs.n = flgn != 0; ! 1445: put_long(dsta,newv); ! 1446: }}}}}} ! 1447: void op_52b9(UWORD opcode) ! 1448: { ! 1449: ULONG srcreg = 1; ! 1450: {{ ULONG src = srcreg; ! 1451: { CPTR dsta = nextilong(); ! 1452: LONG dst = get_long(dsta); ! 1453: { ULONG newv = dst + src; ! 1454: { bool flgs = ((LONG)(src)) < 0; ! 1455: bool flgo = ((LONG)(dst)) < 0; ! 1456: bool flgn = ((LONG)(newv)) < 0; ! 1457: regs.z = ((LONG)(newv)) == 0; ! 1458: regs.v = (flgs == flgo) && (flgn != flgo); ! 1459: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 1460: regs.n = flgn != 0; ! 1461: put_long(dsta,newv); ! 1462: }}}}}} ! 1463: void op_52c0(UWORD opcode) ! 1464: { ! 1465: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1466: {{{ int val = cctrue(2) ? 0xff : 0; ! 1467: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 1468: }}}} ! 1469: void op_52c8(UWORD opcode) ! 1470: { ! 1471: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1472: {{ WORD src = regs.d[srcreg]; ! 1473: { WORD offs = nextiword(); ! 1474: if (!cctrue(2)) { ! 1475: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 1476: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 1477: } ! 1478: }}}} ! 1479: void op_52d0(UWORD opcode) ! 1480: { ! 1481: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1482: {{ CPTR srca = regs.a[srcreg]; ! 1483: { int val = cctrue(2) ? 0xff : 0; ! 1484: put_byte(srca,val); ! 1485: }}}} ! 1486: void op_52d8(UWORD opcode) ! 1487: { ! 1488: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1489: {{ CPTR srca = regs.a[srcreg]; ! 1490: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 1491: { int val = cctrue(2) ? 0xff : 0; ! 1492: put_byte(srca,val); ! 1493: }}}}} ! 1494: void op_52e0(UWORD opcode) ! 1495: { ! 1496: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1497: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 1498: { CPTR srca = regs.a[srcreg]; ! 1499: { int val = cctrue(2) ? 0xff : 0; ! 1500: put_byte(srca,val); ! 1501: }}}}} ! 1502: void op_52e8(UWORD opcode) ! 1503: { ! 1504: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1505: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 1506: { int val = cctrue(2) ? 0xff : 0; ! 1507: put_byte(srca,val); ! 1508: }}}} ! 1509: void op_52f0(UWORD opcode) ! 1510: { ! 1511: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1512: {{ CPTR srca = regs.a[srcreg]; ! 1513: UWORD srcdp = nextiword(); ! 1514: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 1515: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 1516: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 1517: srca += srcdpr; ! 1518: { int val = cctrue(2) ? 0xff : 0; ! 1519: put_byte(srca,val); ! 1520: }}}}} ! 1521: void op_52f8(UWORD opcode) ! 1522: { ! 1523: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 1524: { int val = cctrue(2) ? 0xff : 0; ! 1525: put_byte(srca,val); ! 1526: }}}} ! 1527: void op_52f9(UWORD opcode) ! 1528: { ! 1529: {{ CPTR srca = nextilong(); ! 1530: { int val = cctrue(2) ? 0xff : 0; ! 1531: put_byte(srca,val); ! 1532: }}}} ! 1533: void op_5300(UWORD opcode) ! 1534: { ! 1535: ULONG srcreg = 1; ! 1536: ULONG dstreg = (opcode & 7) >> 0; ! 1537: {{ ULONG src = srcreg; ! 1538: { BYTE dst = regs.d[dstreg]; ! 1539: { ULONG newv = dst - src; ! 1540: { bool flgs = ((BYTE)(src)) < 0; ! 1541: bool flgo = ((BYTE)(dst)) < 0; ! 1542: bool flgn = ((BYTE)(newv)) < 0; ! 1543: regs.z = ((BYTE)(newv)) == 0; ! 1544: regs.v = (flgs != flgo) && (flgn != flgo); ! 1545: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 1546: regs.n = flgn != 0; ! 1547: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 1548: }}}}}} ! 1549: void op_5310(UWORD opcode) ! 1550: { ! 1551: ULONG srcreg = 1; ! 1552: ULONG dstreg = (opcode & 7) >> 0; ! 1553: {{ ULONG src = srcreg; ! 1554: { CPTR dsta = regs.a[dstreg]; ! 1555: BYTE dst = get_byte(dsta); ! 1556: { ULONG newv = dst - src; ! 1557: { bool flgs = ((BYTE)(src)) < 0; ! 1558: bool flgo = ((BYTE)(dst)) < 0; ! 1559: bool flgn = ((BYTE)(newv)) < 0; ! 1560: regs.z = ((BYTE)(newv)) == 0; ! 1561: regs.v = (flgs != flgo) && (flgn != flgo); ! 1562: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 1563: regs.n = flgn != 0; ! 1564: put_byte(dsta,newv); ! 1565: }}}}}} ! 1566: void op_5318(UWORD opcode) ! 1567: { ! 1568: ULONG srcreg = 1; ! 1569: ULONG dstreg = (opcode & 7) >> 0; ! 1570: {{ ULONG src = srcreg; ! 1571: { CPTR dsta = regs.a[dstreg]; ! 1572: BYTE dst = get_byte(dsta); ! 1573: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 1574: { ULONG newv = dst - src; ! 1575: { bool flgs = ((BYTE)(src)) < 0; ! 1576: bool flgo = ((BYTE)(dst)) < 0; ! 1577: bool flgn = ((BYTE)(newv)) < 0; ! 1578: regs.z = ((BYTE)(newv)) == 0; ! 1579: regs.v = (flgs != flgo) && (flgn != flgo); ! 1580: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 1581: regs.n = flgn != 0; ! 1582: put_byte(dsta,newv); ! 1583: }}}}}}} ! 1584: void op_5320(UWORD opcode) ! 1585: { ! 1586: ULONG srcreg = 1; ! 1587: ULONG dstreg = (opcode & 7) >> 0; ! 1588: {{ ULONG src = srcreg; ! 1589: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 1590: { CPTR dsta = regs.a[dstreg]; ! 1591: BYTE dst = get_byte(dsta); ! 1592: { ULONG newv = dst - src; ! 1593: { bool flgs = ((BYTE)(src)) < 0; ! 1594: bool flgo = ((BYTE)(dst)) < 0; ! 1595: bool flgn = ((BYTE)(newv)) < 0; ! 1596: regs.z = ((BYTE)(newv)) == 0; ! 1597: regs.v = (flgs != flgo) && (flgn != flgo); ! 1598: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 1599: regs.n = flgn != 0; ! 1600: put_byte(dsta,newv); ! 1601: }}}}}}} ! 1602: void op_5328(UWORD opcode) ! 1603: { ! 1604: ULONG srcreg = 1; ! 1605: ULONG dstreg = (opcode & 7) >> 0; ! 1606: {{ ULONG src = srcreg; ! 1607: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 1608: BYTE dst = get_byte(dsta); ! 1609: { ULONG newv = dst - src; ! 1610: { bool flgs = ((BYTE)(src)) < 0; ! 1611: bool flgo = ((BYTE)(dst)) < 0; ! 1612: bool flgn = ((BYTE)(newv)) < 0; ! 1613: regs.z = ((BYTE)(newv)) == 0; ! 1614: regs.v = (flgs != flgo) && (flgn != flgo); ! 1615: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 1616: regs.n = flgn != 0; ! 1617: put_byte(dsta,newv); ! 1618: }}}}}} ! 1619: void op_5330(UWORD opcode) ! 1620: { ! 1621: ULONG srcreg = 1; ! 1622: ULONG dstreg = (opcode & 7) >> 0; ! 1623: {{ ULONG src = srcreg; ! 1624: { CPTR dsta = regs.a[dstreg]; ! 1625: UWORD dstdp = nextiword(); ! 1626: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 1627: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 1628: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 1629: dsta += dstdpr; ! 1630: { BYTE dst = get_byte(dsta); ! 1631: { ULONG newv = dst - src; ! 1632: { bool flgs = ((BYTE)(src)) < 0; ! 1633: bool flgo = ((BYTE)(dst)) < 0; ! 1634: bool flgn = ((BYTE)(newv)) < 0; ! 1635: regs.z = ((BYTE)(newv)) == 0; ! 1636: regs.v = (flgs != flgo) && (flgn != flgo); ! 1637: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 1638: regs.n = flgn != 0; ! 1639: put_byte(dsta,newv); ! 1640: }}}}}}}} ! 1641: void op_5338(UWORD opcode) ! 1642: { ! 1643: ULONG srcreg = 1; ! 1644: {{ ULONG src = srcreg; ! 1645: { CPTR dsta = (LONG)(WORD)nextiword(); ! 1646: BYTE dst = get_byte(dsta); ! 1647: { ULONG newv = dst - src; ! 1648: { bool flgs = ((BYTE)(src)) < 0; ! 1649: bool flgo = ((BYTE)(dst)) < 0; ! 1650: bool flgn = ((BYTE)(newv)) < 0; ! 1651: regs.z = ((BYTE)(newv)) == 0; ! 1652: regs.v = (flgs != flgo) && (flgn != flgo); ! 1653: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 1654: regs.n = flgn != 0; ! 1655: put_byte(dsta,newv); ! 1656: }}}}}} ! 1657: void op_5339(UWORD opcode) ! 1658: { ! 1659: ULONG srcreg = 1; ! 1660: {{ ULONG src = srcreg; ! 1661: { CPTR dsta = nextilong(); ! 1662: BYTE dst = get_byte(dsta); ! 1663: { ULONG newv = dst - src; ! 1664: { bool flgs = ((BYTE)(src)) < 0; ! 1665: bool flgo = ((BYTE)(dst)) < 0; ! 1666: bool flgn = ((BYTE)(newv)) < 0; ! 1667: regs.z = ((BYTE)(newv)) == 0; ! 1668: regs.v = (flgs != flgo) && (flgn != flgo); ! 1669: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 1670: regs.n = flgn != 0; ! 1671: put_byte(dsta,newv); ! 1672: }}}}}} ! 1673: void op_5340(UWORD opcode) ! 1674: { ! 1675: ULONG srcreg = 1; ! 1676: ULONG dstreg = (opcode & 7) >> 0; ! 1677: {{ ULONG src = srcreg; ! 1678: { WORD dst = regs.d[dstreg]; ! 1679: { ULONG newv = dst - src; ! 1680: { bool flgs = ((WORD)(src)) < 0; ! 1681: bool flgo = ((WORD)(dst)) < 0; ! 1682: bool flgn = ((WORD)(newv)) < 0; ! 1683: regs.z = ((WORD)(newv)) == 0; ! 1684: regs.v = (flgs != flgo) && (flgn != flgo); ! 1685: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 1686: regs.n = flgn != 0; ! 1687: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 1688: }}}}}} ! 1689: void op_5348(UWORD opcode) ! 1690: { ! 1691: ULONG srcreg = 1; ! 1692: ULONG dstreg = (opcode & 7) >> 0; ! 1693: {{ ULONG src = srcreg; ! 1694: { LONG dst = regs.a[dstreg]; ! 1695: { ULONG newv = dst - src; ! 1696: regs.a[dstreg] = (newv); ! 1697: }}}}} ! 1698: void op_5350(UWORD opcode) ! 1699: { ! 1700: ULONG srcreg = 1; ! 1701: ULONG dstreg = (opcode & 7) >> 0; ! 1702: {{ ULONG src = srcreg; ! 1703: { CPTR dsta = regs.a[dstreg]; ! 1704: WORD dst = get_word(dsta); ! 1705: { ULONG newv = dst - src; ! 1706: { bool flgs = ((WORD)(src)) < 0; ! 1707: bool flgo = ((WORD)(dst)) < 0; ! 1708: bool flgn = ((WORD)(newv)) < 0; ! 1709: regs.z = ((WORD)(newv)) == 0; ! 1710: regs.v = (flgs != flgo) && (flgn != flgo); ! 1711: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 1712: regs.n = flgn != 0; ! 1713: put_word(dsta,newv); ! 1714: }}}}}} ! 1715: void op_5358(UWORD opcode) ! 1716: { ! 1717: ULONG srcreg = 1; ! 1718: ULONG dstreg = (opcode & 7) >> 0; ! 1719: {{ ULONG src = srcreg; ! 1720: { CPTR dsta = regs.a[dstreg]; ! 1721: WORD dst = get_word(dsta); ! 1722: { regs.a[dstreg] += 2; ! 1723: { ULONG newv = dst - src; ! 1724: { bool flgs = ((WORD)(src)) < 0; ! 1725: bool flgo = ((WORD)(dst)) < 0; ! 1726: bool flgn = ((WORD)(newv)) < 0; ! 1727: regs.z = ((WORD)(newv)) == 0; ! 1728: regs.v = (flgs != flgo) && (flgn != flgo); ! 1729: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 1730: regs.n = flgn != 0; ! 1731: put_word(dsta,newv); ! 1732: }}}}}}} ! 1733: void op_5360(UWORD opcode) ! 1734: { ! 1735: ULONG srcreg = 1; ! 1736: ULONG dstreg = (opcode & 7) >> 0; ! 1737: {{ ULONG src = srcreg; ! 1738: { regs.a[dstreg] -= 2; ! 1739: { CPTR dsta = regs.a[dstreg]; ! 1740: WORD dst = get_word(dsta); ! 1741: { ULONG newv = dst - src; ! 1742: { bool flgs = ((WORD)(src)) < 0; ! 1743: bool flgo = ((WORD)(dst)) < 0; ! 1744: bool flgn = ((WORD)(newv)) < 0; ! 1745: regs.z = ((WORD)(newv)) == 0; ! 1746: regs.v = (flgs != flgo) && (flgn != flgo); ! 1747: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 1748: regs.n = flgn != 0; ! 1749: put_word(dsta,newv); ! 1750: }}}}}}} ! 1751: void op_5368(UWORD opcode) ! 1752: { ! 1753: ULONG srcreg = 1; ! 1754: ULONG dstreg = (opcode & 7) >> 0; ! 1755: {{ ULONG src = srcreg; ! 1756: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 1757: WORD dst = get_word(dsta); ! 1758: { ULONG newv = dst - src; ! 1759: { bool flgs = ((WORD)(src)) < 0; ! 1760: bool flgo = ((WORD)(dst)) < 0; ! 1761: bool flgn = ((WORD)(newv)) < 0; ! 1762: regs.z = ((WORD)(newv)) == 0; ! 1763: regs.v = (flgs != flgo) && (flgn != flgo); ! 1764: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 1765: regs.n = flgn != 0; ! 1766: put_word(dsta,newv); ! 1767: }}}}}} ! 1768: void op_5370(UWORD opcode) ! 1769: { ! 1770: ULONG srcreg = 1; ! 1771: ULONG dstreg = (opcode & 7) >> 0; ! 1772: {{ ULONG src = srcreg; ! 1773: { CPTR dsta = regs.a[dstreg]; ! 1774: UWORD dstdp = nextiword(); ! 1775: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 1776: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 1777: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 1778: dsta += dstdpr; ! 1779: { WORD dst = get_word(dsta); ! 1780: { ULONG newv = dst - src; ! 1781: { bool flgs = ((WORD)(src)) < 0; ! 1782: bool flgo = ((WORD)(dst)) < 0; ! 1783: bool flgn = ((WORD)(newv)) < 0; ! 1784: regs.z = ((WORD)(newv)) == 0; ! 1785: regs.v = (flgs != flgo) && (flgn != flgo); ! 1786: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 1787: regs.n = flgn != 0; ! 1788: put_word(dsta,newv); ! 1789: }}}}}}}} ! 1790: void op_5378(UWORD opcode) ! 1791: { ! 1792: ULONG srcreg = 1; ! 1793: {{ ULONG src = srcreg; ! 1794: { CPTR dsta = (LONG)(WORD)nextiword(); ! 1795: WORD dst = get_word(dsta); ! 1796: { ULONG newv = dst - src; ! 1797: { bool flgs = ((WORD)(src)) < 0; ! 1798: bool flgo = ((WORD)(dst)) < 0; ! 1799: bool flgn = ((WORD)(newv)) < 0; ! 1800: regs.z = ((WORD)(newv)) == 0; ! 1801: regs.v = (flgs != flgo) && (flgn != flgo); ! 1802: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 1803: regs.n = flgn != 0; ! 1804: put_word(dsta,newv); ! 1805: }}}}}} ! 1806: void op_5379(UWORD opcode) ! 1807: { ! 1808: ULONG srcreg = 1; ! 1809: {{ ULONG src = srcreg; ! 1810: { CPTR dsta = nextilong(); ! 1811: WORD dst = get_word(dsta); ! 1812: { ULONG newv = dst - src; ! 1813: { bool flgs = ((WORD)(src)) < 0; ! 1814: bool flgo = ((WORD)(dst)) < 0; ! 1815: bool flgn = ((WORD)(newv)) < 0; ! 1816: regs.z = ((WORD)(newv)) == 0; ! 1817: regs.v = (flgs != flgo) && (flgn != flgo); ! 1818: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 1819: regs.n = flgn != 0; ! 1820: put_word(dsta,newv); ! 1821: }}}}}} ! 1822: void op_5380(UWORD opcode) ! 1823: { ! 1824: ULONG srcreg = 1; ! 1825: ULONG dstreg = (opcode & 7) >> 0; ! 1826: {{ ULONG src = srcreg; ! 1827: { LONG dst = regs.d[dstreg]; ! 1828: { ULONG newv = dst - src; ! 1829: { bool flgs = ((LONG)(src)) < 0; ! 1830: bool flgo = ((LONG)(dst)) < 0; ! 1831: bool flgn = ((LONG)(newv)) < 0; ! 1832: regs.z = ((LONG)(newv)) == 0; ! 1833: regs.v = (flgs != flgo) && (flgn != flgo); ! 1834: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 1835: regs.n = flgn != 0; ! 1836: regs.d[dstreg] = (newv); ! 1837: }}}}}} ! 1838: void op_5388(UWORD opcode) ! 1839: { ! 1840: ULONG srcreg = 1; ! 1841: ULONG dstreg = (opcode & 7) >> 0; ! 1842: {{ ULONG src = srcreg; ! 1843: { LONG dst = regs.a[dstreg]; ! 1844: { ULONG newv = dst - src; ! 1845: regs.a[dstreg] = (newv); ! 1846: }}}}} ! 1847: void op_5390(UWORD opcode) ! 1848: { ! 1849: ULONG srcreg = 1; ! 1850: ULONG dstreg = (opcode & 7) >> 0; ! 1851: {{ ULONG src = srcreg; ! 1852: { CPTR dsta = regs.a[dstreg]; ! 1853: LONG dst = get_long(dsta); ! 1854: { ULONG newv = dst - src; ! 1855: { bool flgs = ((LONG)(src)) < 0; ! 1856: bool flgo = ((LONG)(dst)) < 0; ! 1857: bool flgn = ((LONG)(newv)) < 0; ! 1858: regs.z = ((LONG)(newv)) == 0; ! 1859: regs.v = (flgs != flgo) && (flgn != flgo); ! 1860: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 1861: regs.n = flgn != 0; ! 1862: put_long(dsta,newv); ! 1863: }}}}}} ! 1864: void op_5398(UWORD opcode) ! 1865: { ! 1866: ULONG srcreg = 1; ! 1867: ULONG dstreg = (opcode & 7) >> 0; ! 1868: {{ ULONG src = srcreg; ! 1869: { CPTR dsta = regs.a[dstreg]; ! 1870: LONG dst = get_long(dsta); ! 1871: { regs.a[dstreg] += 4; ! 1872: { ULONG newv = dst - src; ! 1873: { bool flgs = ((LONG)(src)) < 0; ! 1874: bool flgo = ((LONG)(dst)) < 0; ! 1875: bool flgn = ((LONG)(newv)) < 0; ! 1876: regs.z = ((LONG)(newv)) == 0; ! 1877: regs.v = (flgs != flgo) && (flgn != flgo); ! 1878: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 1879: regs.n = flgn != 0; ! 1880: put_long(dsta,newv); ! 1881: }}}}}}} ! 1882: void op_53a0(UWORD opcode) ! 1883: { ! 1884: ULONG srcreg = 1; ! 1885: ULONG dstreg = (opcode & 7) >> 0; ! 1886: {{ ULONG src = srcreg; ! 1887: { regs.a[dstreg] -= 4; ! 1888: { CPTR dsta = regs.a[dstreg]; ! 1889: LONG dst = get_long(dsta); ! 1890: { ULONG newv = dst - src; ! 1891: { bool flgs = ((LONG)(src)) < 0; ! 1892: bool flgo = ((LONG)(dst)) < 0; ! 1893: bool flgn = ((LONG)(newv)) < 0; ! 1894: regs.z = ((LONG)(newv)) == 0; ! 1895: regs.v = (flgs != flgo) && (flgn != flgo); ! 1896: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 1897: regs.n = flgn != 0; ! 1898: put_long(dsta,newv); ! 1899: }}}}}}} ! 1900: void op_53a8(UWORD opcode) ! 1901: { ! 1902: ULONG srcreg = 1; ! 1903: ULONG dstreg = (opcode & 7) >> 0; ! 1904: {{ ULONG src = srcreg; ! 1905: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 1906: LONG dst = get_long(dsta); ! 1907: { ULONG newv = dst - src; ! 1908: { bool flgs = ((LONG)(src)) < 0; ! 1909: bool flgo = ((LONG)(dst)) < 0; ! 1910: bool flgn = ((LONG)(newv)) < 0; ! 1911: regs.z = ((LONG)(newv)) == 0; ! 1912: regs.v = (flgs != flgo) && (flgn != flgo); ! 1913: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 1914: regs.n = flgn != 0; ! 1915: put_long(dsta,newv); ! 1916: }}}}}} ! 1917: void op_53b0(UWORD opcode) ! 1918: { ! 1919: ULONG srcreg = 1; ! 1920: ULONG dstreg = (opcode & 7) >> 0; ! 1921: {{ ULONG src = srcreg; ! 1922: { CPTR dsta = regs.a[dstreg]; ! 1923: UWORD dstdp = nextiword(); ! 1924: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 1925: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 1926: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 1927: dsta += dstdpr; ! 1928: { LONG dst = get_long(dsta); ! 1929: { ULONG newv = dst - src; ! 1930: { bool flgs = ((LONG)(src)) < 0; ! 1931: bool flgo = ((LONG)(dst)) < 0; ! 1932: bool flgn = ((LONG)(newv)) < 0; ! 1933: regs.z = ((LONG)(newv)) == 0; ! 1934: regs.v = (flgs != flgo) && (flgn != flgo); ! 1935: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 1936: regs.n = flgn != 0; ! 1937: put_long(dsta,newv); ! 1938: }}}}}}}} ! 1939: void op_53b8(UWORD opcode) ! 1940: { ! 1941: ULONG srcreg = 1; ! 1942: {{ ULONG src = srcreg; ! 1943: { CPTR dsta = (LONG)(WORD)nextiword(); ! 1944: LONG dst = get_long(dsta); ! 1945: { ULONG newv = dst - src; ! 1946: { bool flgs = ((LONG)(src)) < 0; ! 1947: bool flgo = ((LONG)(dst)) < 0; ! 1948: bool flgn = ((LONG)(newv)) < 0; ! 1949: regs.z = ((LONG)(newv)) == 0; ! 1950: regs.v = (flgs != flgo) && (flgn != flgo); ! 1951: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 1952: regs.n = flgn != 0; ! 1953: put_long(dsta,newv); ! 1954: }}}}}} ! 1955: void op_53b9(UWORD opcode) ! 1956: { ! 1957: ULONG srcreg = 1; ! 1958: {{ ULONG src = srcreg; ! 1959: { CPTR dsta = nextilong(); ! 1960: LONG dst = get_long(dsta); ! 1961: { ULONG newv = dst - src; ! 1962: { bool flgs = ((LONG)(src)) < 0; ! 1963: bool flgo = ((LONG)(dst)) < 0; ! 1964: bool flgn = ((LONG)(newv)) < 0; ! 1965: regs.z = ((LONG)(newv)) == 0; ! 1966: regs.v = (flgs != flgo) && (flgn != flgo); ! 1967: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 1968: regs.n = flgn != 0; ! 1969: put_long(dsta,newv); ! 1970: }}}}}} ! 1971: void op_53c0(UWORD opcode) ! 1972: { ! 1973: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1974: {{{ int val = cctrue(3) ? 0xff : 0; ! 1975: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 1976: }}}} ! 1977: void op_53c8(UWORD opcode) ! 1978: { ! 1979: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1980: {{ WORD src = regs.d[srcreg]; ! 1981: { WORD offs = nextiword(); ! 1982: if (!cctrue(3)) { ! 1983: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 1984: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 1985: } ! 1986: }}}} ! 1987: void op_53d0(UWORD opcode) ! 1988: { ! 1989: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1990: {{ CPTR srca = regs.a[srcreg]; ! 1991: { int val = cctrue(3) ? 0xff : 0; ! 1992: put_byte(srca,val); ! 1993: }}}} ! 1994: void op_53d8(UWORD opcode) ! 1995: { ! 1996: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1997: {{ CPTR srca = regs.a[srcreg]; ! 1998: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 1999: { int val = cctrue(3) ? 0xff : 0; ! 2000: put_byte(srca,val); ! 2001: }}}}} ! 2002: void op_53e0(UWORD opcode) ! 2003: { ! 2004: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2005: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 2006: { CPTR srca = regs.a[srcreg]; ! 2007: { int val = cctrue(3) ? 0xff : 0; ! 2008: put_byte(srca,val); ! 2009: }}}}} ! 2010: void op_53e8(UWORD opcode) ! 2011: { ! 2012: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2013: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 2014: { int val = cctrue(3) ? 0xff : 0; ! 2015: put_byte(srca,val); ! 2016: }}}} ! 2017: void op_53f0(UWORD opcode) ! 2018: { ! 2019: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2020: {{ CPTR srca = regs.a[srcreg]; ! 2021: UWORD srcdp = nextiword(); ! 2022: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 2023: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 2024: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 2025: srca += srcdpr; ! 2026: { int val = cctrue(3) ? 0xff : 0; ! 2027: put_byte(srca,val); ! 2028: }}}}} ! 2029: void op_53f8(UWORD opcode) ! 2030: { ! 2031: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 2032: { int val = cctrue(3) ? 0xff : 0; ! 2033: put_byte(srca,val); ! 2034: }}}} ! 2035: void op_53f9(UWORD opcode) ! 2036: { ! 2037: {{ CPTR srca = nextilong(); ! 2038: { int val = cctrue(3) ? 0xff : 0; ! 2039: put_byte(srca,val); ! 2040: }}}} ! 2041: void op_5400(UWORD opcode) ! 2042: { ! 2043: ULONG srcreg = 2; ! 2044: ULONG dstreg = (opcode & 7) >> 0; ! 2045: {{ ULONG src = srcreg; ! 2046: { BYTE dst = regs.d[dstreg]; ! 2047: { ULONG newv = dst + src; ! 2048: { bool flgs = ((BYTE)(src)) < 0; ! 2049: bool flgo = ((BYTE)(dst)) < 0; ! 2050: bool flgn = ((BYTE)(newv)) < 0; ! 2051: regs.z = ((BYTE)(newv)) == 0; ! 2052: regs.v = (flgs == flgo) && (flgn != flgo); ! 2053: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 2054: regs.n = flgn != 0; ! 2055: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 2056: }}}}}} ! 2057: void op_5410(UWORD opcode) ! 2058: { ! 2059: ULONG srcreg = 2; ! 2060: ULONG dstreg = (opcode & 7) >> 0; ! 2061: {{ ULONG src = srcreg; ! 2062: { CPTR dsta = regs.a[dstreg]; ! 2063: BYTE dst = get_byte(dsta); ! 2064: { ULONG newv = dst + src; ! 2065: { bool flgs = ((BYTE)(src)) < 0; ! 2066: bool flgo = ((BYTE)(dst)) < 0; ! 2067: bool flgn = ((BYTE)(newv)) < 0; ! 2068: regs.z = ((BYTE)(newv)) == 0; ! 2069: regs.v = (flgs == flgo) && (flgn != flgo); ! 2070: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 2071: regs.n = flgn != 0; ! 2072: put_byte(dsta,newv); ! 2073: }}}}}} ! 2074: void op_5418(UWORD opcode) ! 2075: { ! 2076: ULONG srcreg = 2; ! 2077: ULONG dstreg = (opcode & 7) >> 0; ! 2078: {{ ULONG src = srcreg; ! 2079: { CPTR dsta = regs.a[dstreg]; ! 2080: BYTE dst = get_byte(dsta); ! 2081: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 2082: { ULONG newv = dst + src; ! 2083: { bool flgs = ((BYTE)(src)) < 0; ! 2084: bool flgo = ((BYTE)(dst)) < 0; ! 2085: bool flgn = ((BYTE)(newv)) < 0; ! 2086: regs.z = ((BYTE)(newv)) == 0; ! 2087: regs.v = (flgs == flgo) && (flgn != flgo); ! 2088: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 2089: regs.n = flgn != 0; ! 2090: put_byte(dsta,newv); ! 2091: }}}}}}} ! 2092: void op_5420(UWORD opcode) ! 2093: { ! 2094: ULONG srcreg = 2; ! 2095: ULONG dstreg = (opcode & 7) >> 0; ! 2096: {{ ULONG src = srcreg; ! 2097: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 2098: { CPTR dsta = regs.a[dstreg]; ! 2099: BYTE dst = get_byte(dsta); ! 2100: { ULONG newv = dst + src; ! 2101: { bool flgs = ((BYTE)(src)) < 0; ! 2102: bool flgo = ((BYTE)(dst)) < 0; ! 2103: bool flgn = ((BYTE)(newv)) < 0; ! 2104: regs.z = ((BYTE)(newv)) == 0; ! 2105: regs.v = (flgs == flgo) && (flgn != flgo); ! 2106: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 2107: regs.n = flgn != 0; ! 2108: put_byte(dsta,newv); ! 2109: }}}}}}} ! 2110: void op_5428(UWORD opcode) ! 2111: { ! 2112: ULONG srcreg = 2; ! 2113: ULONG dstreg = (opcode & 7) >> 0; ! 2114: {{ ULONG src = srcreg; ! 2115: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 2116: BYTE dst = get_byte(dsta); ! 2117: { ULONG newv = dst + src; ! 2118: { bool flgs = ((BYTE)(src)) < 0; ! 2119: bool flgo = ((BYTE)(dst)) < 0; ! 2120: bool flgn = ((BYTE)(newv)) < 0; ! 2121: regs.z = ((BYTE)(newv)) == 0; ! 2122: regs.v = (flgs == flgo) && (flgn != flgo); ! 2123: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 2124: regs.n = flgn != 0; ! 2125: put_byte(dsta,newv); ! 2126: }}}}}} ! 2127: void op_5430(UWORD opcode) ! 2128: { ! 2129: ULONG srcreg = 2; ! 2130: ULONG dstreg = (opcode & 7) >> 0; ! 2131: {{ ULONG src = srcreg; ! 2132: { CPTR dsta = regs.a[dstreg]; ! 2133: UWORD dstdp = nextiword(); ! 2134: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 2135: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 2136: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 2137: dsta += dstdpr; ! 2138: { BYTE dst = get_byte(dsta); ! 2139: { ULONG newv = dst + src; ! 2140: { bool flgs = ((BYTE)(src)) < 0; ! 2141: bool flgo = ((BYTE)(dst)) < 0; ! 2142: bool flgn = ((BYTE)(newv)) < 0; ! 2143: regs.z = ((BYTE)(newv)) == 0; ! 2144: regs.v = (flgs == flgo) && (flgn != flgo); ! 2145: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 2146: regs.n = flgn != 0; ! 2147: put_byte(dsta,newv); ! 2148: }}}}}}}} ! 2149: void op_5438(UWORD opcode) ! 2150: { ! 2151: ULONG srcreg = 2; ! 2152: {{ ULONG src = srcreg; ! 2153: { CPTR dsta = (LONG)(WORD)nextiword(); ! 2154: BYTE dst = get_byte(dsta); ! 2155: { ULONG newv = dst + src; ! 2156: { bool flgs = ((BYTE)(src)) < 0; ! 2157: bool flgo = ((BYTE)(dst)) < 0; ! 2158: bool flgn = ((BYTE)(newv)) < 0; ! 2159: regs.z = ((BYTE)(newv)) == 0; ! 2160: regs.v = (flgs == flgo) && (flgn != flgo); ! 2161: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 2162: regs.n = flgn != 0; ! 2163: put_byte(dsta,newv); ! 2164: }}}}}} ! 2165: void op_5439(UWORD opcode) ! 2166: { ! 2167: ULONG srcreg = 2; ! 2168: {{ ULONG src = srcreg; ! 2169: { CPTR dsta = nextilong(); ! 2170: BYTE dst = get_byte(dsta); ! 2171: { ULONG newv = dst + src; ! 2172: { bool flgs = ((BYTE)(src)) < 0; ! 2173: bool flgo = ((BYTE)(dst)) < 0; ! 2174: bool flgn = ((BYTE)(newv)) < 0; ! 2175: regs.z = ((BYTE)(newv)) == 0; ! 2176: regs.v = (flgs == flgo) && (flgn != flgo); ! 2177: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 2178: regs.n = flgn != 0; ! 2179: put_byte(dsta,newv); ! 2180: }}}}}} ! 2181: void op_5440(UWORD opcode) ! 2182: { ! 2183: ULONG srcreg = 2; ! 2184: ULONG dstreg = (opcode & 7) >> 0; ! 2185: {{ ULONG src = srcreg; ! 2186: { WORD dst = regs.d[dstreg]; ! 2187: { ULONG newv = dst + src; ! 2188: { bool flgs = ((WORD)(src)) < 0; ! 2189: bool flgo = ((WORD)(dst)) < 0; ! 2190: bool flgn = ((WORD)(newv)) < 0; ! 2191: regs.z = ((WORD)(newv)) == 0; ! 2192: regs.v = (flgs == flgo) && (flgn != flgo); ! 2193: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 2194: regs.n = flgn != 0; ! 2195: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 2196: }}}}}} ! 2197: void op_5448(UWORD opcode) ! 2198: { ! 2199: ULONG srcreg = 2; ! 2200: ULONG dstreg = (opcode & 7) >> 0; ! 2201: {{ ULONG src = srcreg; ! 2202: { LONG dst = regs.a[dstreg]; ! 2203: { ULONG newv = dst + src; ! 2204: regs.a[dstreg] = (newv); ! 2205: }}}}} ! 2206: void op_5450(UWORD opcode) ! 2207: { ! 2208: ULONG srcreg = 2; ! 2209: ULONG dstreg = (opcode & 7) >> 0; ! 2210: {{ ULONG src = srcreg; ! 2211: { CPTR dsta = regs.a[dstreg]; ! 2212: WORD dst = get_word(dsta); ! 2213: { ULONG newv = dst + src; ! 2214: { bool flgs = ((WORD)(src)) < 0; ! 2215: bool flgo = ((WORD)(dst)) < 0; ! 2216: bool flgn = ((WORD)(newv)) < 0; ! 2217: regs.z = ((WORD)(newv)) == 0; ! 2218: regs.v = (flgs == flgo) && (flgn != flgo); ! 2219: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 2220: regs.n = flgn != 0; ! 2221: put_word(dsta,newv); ! 2222: }}}}}} ! 2223: void op_5458(UWORD opcode) ! 2224: { ! 2225: ULONG srcreg = 2; ! 2226: ULONG dstreg = (opcode & 7) >> 0; ! 2227: {{ ULONG src = srcreg; ! 2228: { CPTR dsta = regs.a[dstreg]; ! 2229: WORD dst = get_word(dsta); ! 2230: { regs.a[dstreg] += 2; ! 2231: { ULONG newv = dst + src; ! 2232: { bool flgs = ((WORD)(src)) < 0; ! 2233: bool flgo = ((WORD)(dst)) < 0; ! 2234: bool flgn = ((WORD)(newv)) < 0; ! 2235: regs.z = ((WORD)(newv)) == 0; ! 2236: regs.v = (flgs == flgo) && (flgn != flgo); ! 2237: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 2238: regs.n = flgn != 0; ! 2239: put_word(dsta,newv); ! 2240: }}}}}}} ! 2241: void op_5460(UWORD opcode) ! 2242: { ! 2243: ULONG srcreg = 2; ! 2244: ULONG dstreg = (opcode & 7) >> 0; ! 2245: {{ ULONG src = srcreg; ! 2246: { regs.a[dstreg] -= 2; ! 2247: { CPTR dsta = regs.a[dstreg]; ! 2248: WORD dst = get_word(dsta); ! 2249: { ULONG newv = dst + src; ! 2250: { bool flgs = ((WORD)(src)) < 0; ! 2251: bool flgo = ((WORD)(dst)) < 0; ! 2252: bool flgn = ((WORD)(newv)) < 0; ! 2253: regs.z = ((WORD)(newv)) == 0; ! 2254: regs.v = (flgs == flgo) && (flgn != flgo); ! 2255: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 2256: regs.n = flgn != 0; ! 2257: put_word(dsta,newv); ! 2258: }}}}}}} ! 2259: void op_5468(UWORD opcode) ! 2260: { ! 2261: ULONG srcreg = 2; ! 2262: ULONG dstreg = (opcode & 7) >> 0; ! 2263: {{ ULONG src = srcreg; ! 2264: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 2265: WORD dst = get_word(dsta); ! 2266: { ULONG newv = dst + src; ! 2267: { bool flgs = ((WORD)(src)) < 0; ! 2268: bool flgo = ((WORD)(dst)) < 0; ! 2269: bool flgn = ((WORD)(newv)) < 0; ! 2270: regs.z = ((WORD)(newv)) == 0; ! 2271: regs.v = (flgs == flgo) && (flgn != flgo); ! 2272: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 2273: regs.n = flgn != 0; ! 2274: put_word(dsta,newv); ! 2275: }}}}}} ! 2276: void op_5470(UWORD opcode) ! 2277: { ! 2278: ULONG srcreg = 2; ! 2279: ULONG dstreg = (opcode & 7) >> 0; ! 2280: {{ ULONG src = srcreg; ! 2281: { CPTR dsta = regs.a[dstreg]; ! 2282: UWORD dstdp = nextiword(); ! 2283: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 2284: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 2285: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 2286: dsta += dstdpr; ! 2287: { WORD dst = get_word(dsta); ! 2288: { ULONG newv = dst + src; ! 2289: { bool flgs = ((WORD)(src)) < 0; ! 2290: bool flgo = ((WORD)(dst)) < 0; ! 2291: bool flgn = ((WORD)(newv)) < 0; ! 2292: regs.z = ((WORD)(newv)) == 0; ! 2293: regs.v = (flgs == flgo) && (flgn != flgo); ! 2294: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 2295: regs.n = flgn != 0; ! 2296: put_word(dsta,newv); ! 2297: }}}}}}}} ! 2298: void op_5478(UWORD opcode) ! 2299: { ! 2300: ULONG srcreg = 2; ! 2301: {{ ULONG src = srcreg; ! 2302: { CPTR dsta = (LONG)(WORD)nextiword(); ! 2303: WORD dst = get_word(dsta); ! 2304: { ULONG newv = dst + src; ! 2305: { bool flgs = ((WORD)(src)) < 0; ! 2306: bool flgo = ((WORD)(dst)) < 0; ! 2307: bool flgn = ((WORD)(newv)) < 0; ! 2308: regs.z = ((WORD)(newv)) == 0; ! 2309: regs.v = (flgs == flgo) && (flgn != flgo); ! 2310: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 2311: regs.n = flgn != 0; ! 2312: put_word(dsta,newv); ! 2313: }}}}}} ! 2314: void op_5479(UWORD opcode) ! 2315: { ! 2316: ULONG srcreg = 2; ! 2317: {{ ULONG src = srcreg; ! 2318: { CPTR dsta = nextilong(); ! 2319: WORD dst = get_word(dsta); ! 2320: { ULONG newv = dst + src; ! 2321: { bool flgs = ((WORD)(src)) < 0; ! 2322: bool flgo = ((WORD)(dst)) < 0; ! 2323: bool flgn = ((WORD)(newv)) < 0; ! 2324: regs.z = ((WORD)(newv)) == 0; ! 2325: regs.v = (flgs == flgo) && (flgn != flgo); ! 2326: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 2327: regs.n = flgn != 0; ! 2328: put_word(dsta,newv); ! 2329: }}}}}} ! 2330: void op_5480(UWORD opcode) ! 2331: { ! 2332: ULONG srcreg = 2; ! 2333: ULONG dstreg = (opcode & 7) >> 0; ! 2334: {{ ULONG src = srcreg; ! 2335: { LONG dst = regs.d[dstreg]; ! 2336: { ULONG newv = dst + src; ! 2337: { bool flgs = ((LONG)(src)) < 0; ! 2338: bool flgo = ((LONG)(dst)) < 0; ! 2339: bool flgn = ((LONG)(newv)) < 0; ! 2340: regs.z = ((LONG)(newv)) == 0; ! 2341: regs.v = (flgs == flgo) && (flgn != flgo); ! 2342: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 2343: regs.n = flgn != 0; ! 2344: regs.d[dstreg] = (newv); ! 2345: }}}}}} ! 2346: void op_5488(UWORD opcode) ! 2347: { ! 2348: ULONG srcreg = 2; ! 2349: ULONG dstreg = (opcode & 7) >> 0; ! 2350: {{ ULONG src = srcreg; ! 2351: { LONG dst = regs.a[dstreg]; ! 2352: { ULONG newv = dst + src; ! 2353: regs.a[dstreg] = (newv); ! 2354: }}}}} ! 2355: void op_5490(UWORD opcode) ! 2356: { ! 2357: ULONG srcreg = 2; ! 2358: ULONG dstreg = (opcode & 7) >> 0; ! 2359: {{ ULONG src = srcreg; ! 2360: { CPTR dsta = regs.a[dstreg]; ! 2361: LONG dst = get_long(dsta); ! 2362: { ULONG newv = dst + src; ! 2363: { bool flgs = ((LONG)(src)) < 0; ! 2364: bool flgo = ((LONG)(dst)) < 0; ! 2365: bool flgn = ((LONG)(newv)) < 0; ! 2366: regs.z = ((LONG)(newv)) == 0; ! 2367: regs.v = (flgs == flgo) && (flgn != flgo); ! 2368: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 2369: regs.n = flgn != 0; ! 2370: put_long(dsta,newv); ! 2371: }}}}}} ! 2372: void op_5498(UWORD opcode) ! 2373: { ! 2374: ULONG srcreg = 2; ! 2375: ULONG dstreg = (opcode & 7) >> 0; ! 2376: {{ ULONG src = srcreg; ! 2377: { CPTR dsta = regs.a[dstreg]; ! 2378: LONG dst = get_long(dsta); ! 2379: { regs.a[dstreg] += 4; ! 2380: { ULONG newv = dst + src; ! 2381: { bool flgs = ((LONG)(src)) < 0; ! 2382: bool flgo = ((LONG)(dst)) < 0; ! 2383: bool flgn = ((LONG)(newv)) < 0; ! 2384: regs.z = ((LONG)(newv)) == 0; ! 2385: regs.v = (flgs == flgo) && (flgn != flgo); ! 2386: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 2387: regs.n = flgn != 0; ! 2388: put_long(dsta,newv); ! 2389: }}}}}}} ! 2390: void op_54a0(UWORD opcode) ! 2391: { ! 2392: ULONG srcreg = 2; ! 2393: ULONG dstreg = (opcode & 7) >> 0; ! 2394: {{ ULONG src = srcreg; ! 2395: { regs.a[dstreg] -= 4; ! 2396: { CPTR dsta = regs.a[dstreg]; ! 2397: LONG dst = get_long(dsta); ! 2398: { ULONG newv = dst + src; ! 2399: { bool flgs = ((LONG)(src)) < 0; ! 2400: bool flgo = ((LONG)(dst)) < 0; ! 2401: bool flgn = ((LONG)(newv)) < 0; ! 2402: regs.z = ((LONG)(newv)) == 0; ! 2403: regs.v = (flgs == flgo) && (flgn != flgo); ! 2404: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 2405: regs.n = flgn != 0; ! 2406: put_long(dsta,newv); ! 2407: }}}}}}} ! 2408: void op_54a8(UWORD opcode) ! 2409: { ! 2410: ULONG srcreg = 2; ! 2411: ULONG dstreg = (opcode & 7) >> 0; ! 2412: {{ ULONG src = srcreg; ! 2413: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 2414: LONG dst = get_long(dsta); ! 2415: { ULONG newv = dst + src; ! 2416: { bool flgs = ((LONG)(src)) < 0; ! 2417: bool flgo = ((LONG)(dst)) < 0; ! 2418: bool flgn = ((LONG)(newv)) < 0; ! 2419: regs.z = ((LONG)(newv)) == 0; ! 2420: regs.v = (flgs == flgo) && (flgn != flgo); ! 2421: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 2422: regs.n = flgn != 0; ! 2423: put_long(dsta,newv); ! 2424: }}}}}} ! 2425: void op_54b0(UWORD opcode) ! 2426: { ! 2427: ULONG srcreg = 2; ! 2428: ULONG dstreg = (opcode & 7) >> 0; ! 2429: {{ ULONG src = srcreg; ! 2430: { CPTR dsta = regs.a[dstreg]; ! 2431: UWORD dstdp = nextiword(); ! 2432: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 2433: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 2434: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 2435: dsta += dstdpr; ! 2436: { LONG dst = get_long(dsta); ! 2437: { ULONG newv = dst + src; ! 2438: { bool flgs = ((LONG)(src)) < 0; ! 2439: bool flgo = ((LONG)(dst)) < 0; ! 2440: bool flgn = ((LONG)(newv)) < 0; ! 2441: regs.z = ((LONG)(newv)) == 0; ! 2442: regs.v = (flgs == flgo) && (flgn != flgo); ! 2443: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 2444: regs.n = flgn != 0; ! 2445: put_long(dsta,newv); ! 2446: }}}}}}}} ! 2447: void op_54b8(UWORD opcode) ! 2448: { ! 2449: ULONG srcreg = 2; ! 2450: {{ ULONG src = srcreg; ! 2451: { CPTR dsta = (LONG)(WORD)nextiword(); ! 2452: LONG dst = get_long(dsta); ! 2453: { ULONG newv = dst + src; ! 2454: { bool flgs = ((LONG)(src)) < 0; ! 2455: bool flgo = ((LONG)(dst)) < 0; ! 2456: bool flgn = ((LONG)(newv)) < 0; ! 2457: regs.z = ((LONG)(newv)) == 0; ! 2458: regs.v = (flgs == flgo) && (flgn != flgo); ! 2459: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 2460: regs.n = flgn != 0; ! 2461: put_long(dsta,newv); ! 2462: }}}}}} ! 2463: void op_54b9(UWORD opcode) ! 2464: { ! 2465: ULONG srcreg = 2; ! 2466: {{ ULONG src = srcreg; ! 2467: { CPTR dsta = nextilong(); ! 2468: LONG dst = get_long(dsta); ! 2469: { ULONG newv = dst + src; ! 2470: { bool flgs = ((LONG)(src)) < 0; ! 2471: bool flgo = ((LONG)(dst)) < 0; ! 2472: bool flgn = ((LONG)(newv)) < 0; ! 2473: regs.z = ((LONG)(newv)) == 0; ! 2474: regs.v = (flgs == flgo) && (flgn != flgo); ! 2475: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 2476: regs.n = flgn != 0; ! 2477: put_long(dsta,newv); ! 2478: }}}}}} ! 2479: void op_54c0(UWORD opcode) ! 2480: { ! 2481: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2482: {{{ int val = cctrue(4) ? 0xff : 0; ! 2483: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 2484: }}}} ! 2485: void op_54c8(UWORD opcode) ! 2486: { ! 2487: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2488: {{ WORD src = regs.d[srcreg]; ! 2489: { WORD offs = nextiword(); ! 2490: if (!cctrue(4)) { ! 2491: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 2492: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 2493: } ! 2494: }}}} ! 2495: void op_54d0(UWORD opcode) ! 2496: { ! 2497: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2498: {{ CPTR srca = regs.a[srcreg]; ! 2499: { int val = cctrue(4) ? 0xff : 0; ! 2500: put_byte(srca,val); ! 2501: }}}} ! 2502: void op_54d8(UWORD opcode) ! 2503: { ! 2504: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2505: {{ CPTR srca = regs.a[srcreg]; ! 2506: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 2507: { int val = cctrue(4) ? 0xff : 0; ! 2508: put_byte(srca,val); ! 2509: }}}}} ! 2510: void op_54e0(UWORD opcode) ! 2511: { ! 2512: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2513: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 2514: { CPTR srca = regs.a[srcreg]; ! 2515: { int val = cctrue(4) ? 0xff : 0; ! 2516: put_byte(srca,val); ! 2517: }}}}} ! 2518: void op_54e8(UWORD opcode) ! 2519: { ! 2520: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2521: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 2522: { int val = cctrue(4) ? 0xff : 0; ! 2523: put_byte(srca,val); ! 2524: }}}} ! 2525: void op_54f0(UWORD opcode) ! 2526: { ! 2527: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2528: {{ CPTR srca = regs.a[srcreg]; ! 2529: UWORD srcdp = nextiword(); ! 2530: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 2531: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 2532: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 2533: srca += srcdpr; ! 2534: { int val = cctrue(4) ? 0xff : 0; ! 2535: put_byte(srca,val); ! 2536: }}}}} ! 2537: void op_54f8(UWORD opcode) ! 2538: { ! 2539: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 2540: { int val = cctrue(4) ? 0xff : 0; ! 2541: put_byte(srca,val); ! 2542: }}}} ! 2543: void op_54f9(UWORD opcode) ! 2544: { ! 2545: {{ CPTR srca = nextilong(); ! 2546: { int val = cctrue(4) ? 0xff : 0; ! 2547: put_byte(srca,val); ! 2548: }}}} ! 2549: void op_5500(UWORD opcode) ! 2550: { ! 2551: ULONG srcreg = 2; ! 2552: ULONG dstreg = (opcode & 7) >> 0; ! 2553: {{ ULONG src = srcreg; ! 2554: { BYTE dst = regs.d[dstreg]; ! 2555: { ULONG newv = dst - src; ! 2556: { bool flgs = ((BYTE)(src)) < 0; ! 2557: bool flgo = ((BYTE)(dst)) < 0; ! 2558: bool flgn = ((BYTE)(newv)) < 0; ! 2559: regs.z = ((BYTE)(newv)) == 0; ! 2560: regs.v = (flgs != flgo) && (flgn != flgo); ! 2561: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 2562: regs.n = flgn != 0; ! 2563: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 2564: }}}}}} ! 2565: void op_5510(UWORD opcode) ! 2566: { ! 2567: ULONG srcreg = 2; ! 2568: ULONG dstreg = (opcode & 7) >> 0; ! 2569: {{ ULONG src = srcreg; ! 2570: { CPTR dsta = regs.a[dstreg]; ! 2571: BYTE dst = get_byte(dsta); ! 2572: { ULONG newv = dst - src; ! 2573: { bool flgs = ((BYTE)(src)) < 0; ! 2574: bool flgo = ((BYTE)(dst)) < 0; ! 2575: bool flgn = ((BYTE)(newv)) < 0; ! 2576: regs.z = ((BYTE)(newv)) == 0; ! 2577: regs.v = (flgs != flgo) && (flgn != flgo); ! 2578: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 2579: regs.n = flgn != 0; ! 2580: put_byte(dsta,newv); ! 2581: }}}}}} ! 2582: void op_5518(UWORD opcode) ! 2583: { ! 2584: ULONG srcreg = 2; ! 2585: ULONG dstreg = (opcode & 7) >> 0; ! 2586: {{ ULONG src = srcreg; ! 2587: { CPTR dsta = regs.a[dstreg]; ! 2588: BYTE dst = get_byte(dsta); ! 2589: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 2590: { ULONG newv = dst - src; ! 2591: { bool flgs = ((BYTE)(src)) < 0; ! 2592: bool flgo = ((BYTE)(dst)) < 0; ! 2593: bool flgn = ((BYTE)(newv)) < 0; ! 2594: regs.z = ((BYTE)(newv)) == 0; ! 2595: regs.v = (flgs != flgo) && (flgn != flgo); ! 2596: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 2597: regs.n = flgn != 0; ! 2598: put_byte(dsta,newv); ! 2599: }}}}}}} ! 2600: void op_5520(UWORD opcode) ! 2601: { ! 2602: ULONG srcreg = 2; ! 2603: ULONG dstreg = (opcode & 7) >> 0; ! 2604: {{ ULONG src = srcreg; ! 2605: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 2606: { CPTR dsta = regs.a[dstreg]; ! 2607: BYTE dst = get_byte(dsta); ! 2608: { ULONG newv = dst - src; ! 2609: { bool flgs = ((BYTE)(src)) < 0; ! 2610: bool flgo = ((BYTE)(dst)) < 0; ! 2611: bool flgn = ((BYTE)(newv)) < 0; ! 2612: regs.z = ((BYTE)(newv)) == 0; ! 2613: regs.v = (flgs != flgo) && (flgn != flgo); ! 2614: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 2615: regs.n = flgn != 0; ! 2616: put_byte(dsta,newv); ! 2617: }}}}}}} ! 2618: void op_5528(UWORD opcode) ! 2619: { ! 2620: ULONG srcreg = 2; ! 2621: ULONG dstreg = (opcode & 7) >> 0; ! 2622: {{ ULONG src = srcreg; ! 2623: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 2624: BYTE dst = get_byte(dsta); ! 2625: { ULONG newv = dst - src; ! 2626: { bool flgs = ((BYTE)(src)) < 0; ! 2627: bool flgo = ((BYTE)(dst)) < 0; ! 2628: bool flgn = ((BYTE)(newv)) < 0; ! 2629: regs.z = ((BYTE)(newv)) == 0; ! 2630: regs.v = (flgs != flgo) && (flgn != flgo); ! 2631: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 2632: regs.n = flgn != 0; ! 2633: put_byte(dsta,newv); ! 2634: }}}}}} ! 2635: void op_5530(UWORD opcode) ! 2636: { ! 2637: ULONG srcreg = 2; ! 2638: ULONG dstreg = (opcode & 7) >> 0; ! 2639: {{ ULONG src = srcreg; ! 2640: { CPTR dsta = regs.a[dstreg]; ! 2641: UWORD dstdp = nextiword(); ! 2642: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 2643: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 2644: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 2645: dsta += dstdpr; ! 2646: { BYTE dst = get_byte(dsta); ! 2647: { ULONG newv = dst - src; ! 2648: { bool flgs = ((BYTE)(src)) < 0; ! 2649: bool flgo = ((BYTE)(dst)) < 0; ! 2650: bool flgn = ((BYTE)(newv)) < 0; ! 2651: regs.z = ((BYTE)(newv)) == 0; ! 2652: regs.v = (flgs != flgo) && (flgn != flgo); ! 2653: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 2654: regs.n = flgn != 0; ! 2655: put_byte(dsta,newv); ! 2656: }}}}}}}} ! 2657: void op_5538(UWORD opcode) ! 2658: { ! 2659: ULONG srcreg = 2; ! 2660: {{ ULONG src = srcreg; ! 2661: { CPTR dsta = (LONG)(WORD)nextiword(); ! 2662: BYTE dst = get_byte(dsta); ! 2663: { ULONG newv = dst - src; ! 2664: { bool flgs = ((BYTE)(src)) < 0; ! 2665: bool flgo = ((BYTE)(dst)) < 0; ! 2666: bool flgn = ((BYTE)(newv)) < 0; ! 2667: regs.z = ((BYTE)(newv)) == 0; ! 2668: regs.v = (flgs != flgo) && (flgn != flgo); ! 2669: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 2670: regs.n = flgn != 0; ! 2671: put_byte(dsta,newv); ! 2672: }}}}}} ! 2673: void op_5539(UWORD opcode) ! 2674: { ! 2675: ULONG srcreg = 2; ! 2676: {{ ULONG src = srcreg; ! 2677: { CPTR dsta = nextilong(); ! 2678: BYTE dst = get_byte(dsta); ! 2679: { ULONG newv = dst - src; ! 2680: { bool flgs = ((BYTE)(src)) < 0; ! 2681: bool flgo = ((BYTE)(dst)) < 0; ! 2682: bool flgn = ((BYTE)(newv)) < 0; ! 2683: regs.z = ((BYTE)(newv)) == 0; ! 2684: regs.v = (flgs != flgo) && (flgn != flgo); ! 2685: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 2686: regs.n = flgn != 0; ! 2687: put_byte(dsta,newv); ! 2688: }}}}}} ! 2689: void op_5540(UWORD opcode) ! 2690: { ! 2691: ULONG srcreg = 2; ! 2692: ULONG dstreg = (opcode & 7) >> 0; ! 2693: {{ ULONG src = srcreg; ! 2694: { WORD dst = regs.d[dstreg]; ! 2695: { ULONG newv = dst - src; ! 2696: { bool flgs = ((WORD)(src)) < 0; ! 2697: bool flgo = ((WORD)(dst)) < 0; ! 2698: bool flgn = ((WORD)(newv)) < 0; ! 2699: regs.z = ((WORD)(newv)) == 0; ! 2700: regs.v = (flgs != flgo) && (flgn != flgo); ! 2701: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 2702: regs.n = flgn != 0; ! 2703: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 2704: }}}}}} ! 2705: void op_5548(UWORD opcode) ! 2706: { ! 2707: ULONG srcreg = 2; ! 2708: ULONG dstreg = (opcode & 7) >> 0; ! 2709: {{ ULONG src = srcreg; ! 2710: { LONG dst = regs.a[dstreg]; ! 2711: { ULONG newv = dst - src; ! 2712: regs.a[dstreg] = (newv); ! 2713: }}}}} ! 2714: void op_5550(UWORD opcode) ! 2715: { ! 2716: ULONG srcreg = 2; ! 2717: ULONG dstreg = (opcode & 7) >> 0; ! 2718: {{ ULONG src = srcreg; ! 2719: { CPTR dsta = regs.a[dstreg]; ! 2720: WORD dst = get_word(dsta); ! 2721: { ULONG newv = dst - src; ! 2722: { bool flgs = ((WORD)(src)) < 0; ! 2723: bool flgo = ((WORD)(dst)) < 0; ! 2724: bool flgn = ((WORD)(newv)) < 0; ! 2725: regs.z = ((WORD)(newv)) == 0; ! 2726: regs.v = (flgs != flgo) && (flgn != flgo); ! 2727: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 2728: regs.n = flgn != 0; ! 2729: put_word(dsta,newv); ! 2730: }}}}}} ! 2731: void op_5558(UWORD opcode) ! 2732: { ! 2733: ULONG srcreg = 2; ! 2734: ULONG dstreg = (opcode & 7) >> 0; ! 2735: {{ ULONG src = srcreg; ! 2736: { CPTR dsta = regs.a[dstreg]; ! 2737: WORD dst = get_word(dsta); ! 2738: { regs.a[dstreg] += 2; ! 2739: { ULONG newv = dst - src; ! 2740: { bool flgs = ((WORD)(src)) < 0; ! 2741: bool flgo = ((WORD)(dst)) < 0; ! 2742: bool flgn = ((WORD)(newv)) < 0; ! 2743: regs.z = ((WORD)(newv)) == 0; ! 2744: regs.v = (flgs != flgo) && (flgn != flgo); ! 2745: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 2746: regs.n = flgn != 0; ! 2747: put_word(dsta,newv); ! 2748: }}}}}}} ! 2749: void op_5560(UWORD opcode) ! 2750: { ! 2751: ULONG srcreg = 2; ! 2752: ULONG dstreg = (opcode & 7) >> 0; ! 2753: {{ ULONG src = srcreg; ! 2754: { regs.a[dstreg] -= 2; ! 2755: { CPTR dsta = regs.a[dstreg]; ! 2756: WORD dst = get_word(dsta); ! 2757: { ULONG newv = dst - src; ! 2758: { bool flgs = ((WORD)(src)) < 0; ! 2759: bool flgo = ((WORD)(dst)) < 0; ! 2760: bool flgn = ((WORD)(newv)) < 0; ! 2761: regs.z = ((WORD)(newv)) == 0; ! 2762: regs.v = (flgs != flgo) && (flgn != flgo); ! 2763: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 2764: regs.n = flgn != 0; ! 2765: put_word(dsta,newv); ! 2766: }}}}}}} ! 2767: void op_5568(UWORD opcode) ! 2768: { ! 2769: ULONG srcreg = 2; ! 2770: ULONG dstreg = (opcode & 7) >> 0; ! 2771: {{ ULONG src = srcreg; ! 2772: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 2773: WORD dst = get_word(dsta); ! 2774: { ULONG newv = dst - src; ! 2775: { bool flgs = ((WORD)(src)) < 0; ! 2776: bool flgo = ((WORD)(dst)) < 0; ! 2777: bool flgn = ((WORD)(newv)) < 0; ! 2778: regs.z = ((WORD)(newv)) == 0; ! 2779: regs.v = (flgs != flgo) && (flgn != flgo); ! 2780: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 2781: regs.n = flgn != 0; ! 2782: put_word(dsta,newv); ! 2783: }}}}}} ! 2784: void op_5570(UWORD opcode) ! 2785: { ! 2786: ULONG srcreg = 2; ! 2787: ULONG dstreg = (opcode & 7) >> 0; ! 2788: {{ ULONG src = srcreg; ! 2789: { CPTR dsta = regs.a[dstreg]; ! 2790: UWORD dstdp = nextiword(); ! 2791: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 2792: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 2793: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 2794: dsta += dstdpr; ! 2795: { WORD dst = get_word(dsta); ! 2796: { ULONG newv = dst - src; ! 2797: { bool flgs = ((WORD)(src)) < 0; ! 2798: bool flgo = ((WORD)(dst)) < 0; ! 2799: bool flgn = ((WORD)(newv)) < 0; ! 2800: regs.z = ((WORD)(newv)) == 0; ! 2801: regs.v = (flgs != flgo) && (flgn != flgo); ! 2802: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 2803: regs.n = flgn != 0; ! 2804: put_word(dsta,newv); ! 2805: }}}}}}}} ! 2806: void op_5578(UWORD opcode) ! 2807: { ! 2808: ULONG srcreg = 2; ! 2809: {{ ULONG src = srcreg; ! 2810: { CPTR dsta = (LONG)(WORD)nextiword(); ! 2811: WORD dst = get_word(dsta); ! 2812: { ULONG newv = dst - src; ! 2813: { bool flgs = ((WORD)(src)) < 0; ! 2814: bool flgo = ((WORD)(dst)) < 0; ! 2815: bool flgn = ((WORD)(newv)) < 0; ! 2816: regs.z = ((WORD)(newv)) == 0; ! 2817: regs.v = (flgs != flgo) && (flgn != flgo); ! 2818: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 2819: regs.n = flgn != 0; ! 2820: put_word(dsta,newv); ! 2821: }}}}}} ! 2822: void op_5579(UWORD opcode) ! 2823: { ! 2824: ULONG srcreg = 2; ! 2825: {{ ULONG src = srcreg; ! 2826: { CPTR dsta = nextilong(); ! 2827: WORD dst = get_word(dsta); ! 2828: { ULONG newv = dst - src; ! 2829: { bool flgs = ((WORD)(src)) < 0; ! 2830: bool flgo = ((WORD)(dst)) < 0; ! 2831: bool flgn = ((WORD)(newv)) < 0; ! 2832: regs.z = ((WORD)(newv)) == 0; ! 2833: regs.v = (flgs != flgo) && (flgn != flgo); ! 2834: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 2835: regs.n = flgn != 0; ! 2836: put_word(dsta,newv); ! 2837: }}}}}} ! 2838: void op_5580(UWORD opcode) ! 2839: { ! 2840: ULONG srcreg = 2; ! 2841: ULONG dstreg = (opcode & 7) >> 0; ! 2842: {{ ULONG src = srcreg; ! 2843: { LONG dst = regs.d[dstreg]; ! 2844: { ULONG newv = dst - src; ! 2845: { bool flgs = ((LONG)(src)) < 0; ! 2846: bool flgo = ((LONG)(dst)) < 0; ! 2847: bool flgn = ((LONG)(newv)) < 0; ! 2848: regs.z = ((LONG)(newv)) == 0; ! 2849: regs.v = (flgs != flgo) && (flgn != flgo); ! 2850: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 2851: regs.n = flgn != 0; ! 2852: regs.d[dstreg] = (newv); ! 2853: }}}}}} ! 2854: void op_5588(UWORD opcode) ! 2855: { ! 2856: ULONG srcreg = 2; ! 2857: ULONG dstreg = (opcode & 7) >> 0; ! 2858: {{ ULONG src = srcreg; ! 2859: { LONG dst = regs.a[dstreg]; ! 2860: { ULONG newv = dst - src; ! 2861: regs.a[dstreg] = (newv); ! 2862: }}}}} ! 2863: void op_5590(UWORD opcode) ! 2864: { ! 2865: ULONG srcreg = 2; ! 2866: ULONG dstreg = (opcode & 7) >> 0; ! 2867: {{ ULONG src = srcreg; ! 2868: { CPTR dsta = regs.a[dstreg]; ! 2869: LONG dst = get_long(dsta); ! 2870: { ULONG newv = dst - src; ! 2871: { bool flgs = ((LONG)(src)) < 0; ! 2872: bool flgo = ((LONG)(dst)) < 0; ! 2873: bool flgn = ((LONG)(newv)) < 0; ! 2874: regs.z = ((LONG)(newv)) == 0; ! 2875: regs.v = (flgs != flgo) && (flgn != flgo); ! 2876: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 2877: regs.n = flgn != 0; ! 2878: put_long(dsta,newv); ! 2879: }}}}}} ! 2880: void op_5598(UWORD opcode) ! 2881: { ! 2882: ULONG srcreg = 2; ! 2883: ULONG dstreg = (opcode & 7) >> 0; ! 2884: {{ ULONG src = srcreg; ! 2885: { CPTR dsta = regs.a[dstreg]; ! 2886: LONG dst = get_long(dsta); ! 2887: { regs.a[dstreg] += 4; ! 2888: { ULONG newv = dst - src; ! 2889: { bool flgs = ((LONG)(src)) < 0; ! 2890: bool flgo = ((LONG)(dst)) < 0; ! 2891: bool flgn = ((LONG)(newv)) < 0; ! 2892: regs.z = ((LONG)(newv)) == 0; ! 2893: regs.v = (flgs != flgo) && (flgn != flgo); ! 2894: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 2895: regs.n = flgn != 0; ! 2896: put_long(dsta,newv); ! 2897: }}}}}}} ! 2898: void op_55a0(UWORD opcode) ! 2899: { ! 2900: ULONG srcreg = 2; ! 2901: ULONG dstreg = (opcode & 7) >> 0; ! 2902: {{ ULONG src = srcreg; ! 2903: { regs.a[dstreg] -= 4; ! 2904: { CPTR dsta = regs.a[dstreg]; ! 2905: LONG dst = get_long(dsta); ! 2906: { ULONG newv = dst - src; ! 2907: { bool flgs = ((LONG)(src)) < 0; ! 2908: bool flgo = ((LONG)(dst)) < 0; ! 2909: bool flgn = ((LONG)(newv)) < 0; ! 2910: regs.z = ((LONG)(newv)) == 0; ! 2911: regs.v = (flgs != flgo) && (flgn != flgo); ! 2912: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 2913: regs.n = flgn != 0; ! 2914: put_long(dsta,newv); ! 2915: }}}}}}} ! 2916: void op_55a8(UWORD opcode) ! 2917: { ! 2918: ULONG srcreg = 2; ! 2919: ULONG dstreg = (opcode & 7) >> 0; ! 2920: {{ ULONG src = srcreg; ! 2921: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 2922: LONG dst = get_long(dsta); ! 2923: { ULONG newv = dst - src; ! 2924: { bool flgs = ((LONG)(src)) < 0; ! 2925: bool flgo = ((LONG)(dst)) < 0; ! 2926: bool flgn = ((LONG)(newv)) < 0; ! 2927: regs.z = ((LONG)(newv)) == 0; ! 2928: regs.v = (flgs != flgo) && (flgn != flgo); ! 2929: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 2930: regs.n = flgn != 0; ! 2931: put_long(dsta,newv); ! 2932: }}}}}} ! 2933: void op_55b0(UWORD opcode) ! 2934: { ! 2935: ULONG srcreg = 2; ! 2936: ULONG dstreg = (opcode & 7) >> 0; ! 2937: {{ ULONG src = srcreg; ! 2938: { CPTR dsta = regs.a[dstreg]; ! 2939: UWORD dstdp = nextiword(); ! 2940: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 2941: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 2942: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 2943: dsta += dstdpr; ! 2944: { LONG dst = get_long(dsta); ! 2945: { ULONG newv = dst - src; ! 2946: { bool flgs = ((LONG)(src)) < 0; ! 2947: bool flgo = ((LONG)(dst)) < 0; ! 2948: bool flgn = ((LONG)(newv)) < 0; ! 2949: regs.z = ((LONG)(newv)) == 0; ! 2950: regs.v = (flgs != flgo) && (flgn != flgo); ! 2951: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 2952: regs.n = flgn != 0; ! 2953: put_long(dsta,newv); ! 2954: }}}}}}}} ! 2955: void op_55b8(UWORD opcode) ! 2956: { ! 2957: ULONG srcreg = 2; ! 2958: {{ ULONG src = srcreg; ! 2959: { CPTR dsta = (LONG)(WORD)nextiword(); ! 2960: LONG dst = get_long(dsta); ! 2961: { ULONG newv = dst - src; ! 2962: { bool flgs = ((LONG)(src)) < 0; ! 2963: bool flgo = ((LONG)(dst)) < 0; ! 2964: bool flgn = ((LONG)(newv)) < 0; ! 2965: regs.z = ((LONG)(newv)) == 0; ! 2966: regs.v = (flgs != flgo) && (flgn != flgo); ! 2967: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 2968: regs.n = flgn != 0; ! 2969: put_long(dsta,newv); ! 2970: }}}}}} ! 2971: void op_55b9(UWORD opcode) ! 2972: { ! 2973: ULONG srcreg = 2; ! 2974: {{ ULONG src = srcreg; ! 2975: { CPTR dsta = nextilong(); ! 2976: LONG dst = get_long(dsta); ! 2977: { ULONG newv = dst - src; ! 2978: { bool flgs = ((LONG)(src)) < 0; ! 2979: bool flgo = ((LONG)(dst)) < 0; ! 2980: bool flgn = ((LONG)(newv)) < 0; ! 2981: regs.z = ((LONG)(newv)) == 0; ! 2982: regs.v = (flgs != flgo) && (flgn != flgo); ! 2983: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 2984: regs.n = flgn != 0; ! 2985: put_long(dsta,newv); ! 2986: }}}}}} ! 2987: void op_55c0(UWORD opcode) ! 2988: { ! 2989: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2990: {{{ int val = cctrue(5) ? 0xff : 0; ! 2991: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 2992: }}}} ! 2993: void op_55c8(UWORD opcode) ! 2994: { ! 2995: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2996: {{ WORD src = regs.d[srcreg]; ! 2997: { WORD offs = nextiword(); ! 2998: if (!cctrue(5)) { ! 2999: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 3000: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 3001: } ! 3002: }}}} ! 3003: void op_55d0(UWORD opcode) ! 3004: { ! 3005: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3006: {{ CPTR srca = regs.a[srcreg]; ! 3007: { int val = cctrue(5) ? 0xff : 0; ! 3008: put_byte(srca,val); ! 3009: }}}} ! 3010: void op_55d8(UWORD opcode) ! 3011: { ! 3012: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3013: {{ CPTR srca = regs.a[srcreg]; ! 3014: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 3015: { int val = cctrue(5) ? 0xff : 0; ! 3016: put_byte(srca,val); ! 3017: }}}}} ! 3018: void op_55e0(UWORD opcode) ! 3019: { ! 3020: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3021: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 3022: { CPTR srca = regs.a[srcreg]; ! 3023: { int val = cctrue(5) ? 0xff : 0; ! 3024: put_byte(srca,val); ! 3025: }}}}} ! 3026: void op_55e8(UWORD opcode) ! 3027: { ! 3028: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3029: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 3030: { int val = cctrue(5) ? 0xff : 0; ! 3031: put_byte(srca,val); ! 3032: }}}} ! 3033: void op_55f0(UWORD opcode) ! 3034: { ! 3035: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3036: {{ CPTR srca = regs.a[srcreg]; ! 3037: UWORD srcdp = nextiword(); ! 3038: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 3039: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 3040: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 3041: srca += srcdpr; ! 3042: { int val = cctrue(5) ? 0xff : 0; ! 3043: put_byte(srca,val); ! 3044: }}}}} ! 3045: void op_55f8(UWORD opcode) ! 3046: { ! 3047: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 3048: { int val = cctrue(5) ? 0xff : 0; ! 3049: put_byte(srca,val); ! 3050: }}}} ! 3051: void op_55f9(UWORD opcode) ! 3052: { ! 3053: {{ CPTR srca = nextilong(); ! 3054: { int val = cctrue(5) ? 0xff : 0; ! 3055: put_byte(srca,val); ! 3056: }}}} ! 3057: void op_5600(UWORD opcode) ! 3058: { ! 3059: ULONG srcreg = 3; ! 3060: ULONG dstreg = (opcode & 7) >> 0; ! 3061: {{ ULONG src = srcreg; ! 3062: { BYTE dst = regs.d[dstreg]; ! 3063: { ULONG newv = dst + src; ! 3064: { bool flgs = ((BYTE)(src)) < 0; ! 3065: bool flgo = ((BYTE)(dst)) < 0; ! 3066: bool flgn = ((BYTE)(newv)) < 0; ! 3067: regs.z = ((BYTE)(newv)) == 0; ! 3068: regs.v = (flgs == flgo) && (flgn != flgo); ! 3069: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 3070: regs.n = flgn != 0; ! 3071: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 3072: }}}}}} ! 3073: void op_5610(UWORD opcode) ! 3074: { ! 3075: ULONG srcreg = 3; ! 3076: ULONG dstreg = (opcode & 7) >> 0; ! 3077: {{ ULONG src = srcreg; ! 3078: { CPTR dsta = regs.a[dstreg]; ! 3079: BYTE dst = get_byte(dsta); ! 3080: { ULONG newv = dst + src; ! 3081: { bool flgs = ((BYTE)(src)) < 0; ! 3082: bool flgo = ((BYTE)(dst)) < 0; ! 3083: bool flgn = ((BYTE)(newv)) < 0; ! 3084: regs.z = ((BYTE)(newv)) == 0; ! 3085: regs.v = (flgs == flgo) && (flgn != flgo); ! 3086: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 3087: regs.n = flgn != 0; ! 3088: put_byte(dsta,newv); ! 3089: }}}}}} ! 3090: void op_5618(UWORD opcode) ! 3091: { ! 3092: ULONG srcreg = 3; ! 3093: ULONG dstreg = (opcode & 7) >> 0; ! 3094: {{ ULONG src = srcreg; ! 3095: { CPTR dsta = regs.a[dstreg]; ! 3096: BYTE dst = get_byte(dsta); ! 3097: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 3098: { ULONG newv = dst + src; ! 3099: { bool flgs = ((BYTE)(src)) < 0; ! 3100: bool flgo = ((BYTE)(dst)) < 0; ! 3101: bool flgn = ((BYTE)(newv)) < 0; ! 3102: regs.z = ((BYTE)(newv)) == 0; ! 3103: regs.v = (flgs == flgo) && (flgn != flgo); ! 3104: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 3105: regs.n = flgn != 0; ! 3106: put_byte(dsta,newv); ! 3107: }}}}}}} ! 3108: void op_5620(UWORD opcode) ! 3109: { ! 3110: ULONG srcreg = 3; ! 3111: ULONG dstreg = (opcode & 7) >> 0; ! 3112: {{ ULONG src = srcreg; ! 3113: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 3114: { CPTR dsta = regs.a[dstreg]; ! 3115: BYTE dst = get_byte(dsta); ! 3116: { ULONG newv = dst + src; ! 3117: { bool flgs = ((BYTE)(src)) < 0; ! 3118: bool flgo = ((BYTE)(dst)) < 0; ! 3119: bool flgn = ((BYTE)(newv)) < 0; ! 3120: regs.z = ((BYTE)(newv)) == 0; ! 3121: regs.v = (flgs == flgo) && (flgn != flgo); ! 3122: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 3123: regs.n = flgn != 0; ! 3124: put_byte(dsta,newv); ! 3125: }}}}}}} ! 3126: void op_5628(UWORD opcode) ! 3127: { ! 3128: ULONG srcreg = 3; ! 3129: ULONG dstreg = (opcode & 7) >> 0; ! 3130: {{ ULONG src = srcreg; ! 3131: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 3132: BYTE dst = get_byte(dsta); ! 3133: { ULONG newv = dst + src; ! 3134: { bool flgs = ((BYTE)(src)) < 0; ! 3135: bool flgo = ((BYTE)(dst)) < 0; ! 3136: bool flgn = ((BYTE)(newv)) < 0; ! 3137: regs.z = ((BYTE)(newv)) == 0; ! 3138: regs.v = (flgs == flgo) && (flgn != flgo); ! 3139: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 3140: regs.n = flgn != 0; ! 3141: put_byte(dsta,newv); ! 3142: }}}}}} ! 3143: void op_5630(UWORD opcode) ! 3144: { ! 3145: ULONG srcreg = 3; ! 3146: ULONG dstreg = (opcode & 7) >> 0; ! 3147: {{ ULONG src = srcreg; ! 3148: { CPTR dsta = regs.a[dstreg]; ! 3149: UWORD dstdp = nextiword(); ! 3150: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 3151: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 3152: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 3153: dsta += dstdpr; ! 3154: { BYTE dst = get_byte(dsta); ! 3155: { ULONG newv = dst + src; ! 3156: { bool flgs = ((BYTE)(src)) < 0; ! 3157: bool flgo = ((BYTE)(dst)) < 0; ! 3158: bool flgn = ((BYTE)(newv)) < 0; ! 3159: regs.z = ((BYTE)(newv)) == 0; ! 3160: regs.v = (flgs == flgo) && (flgn != flgo); ! 3161: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 3162: regs.n = flgn != 0; ! 3163: put_byte(dsta,newv); ! 3164: }}}}}}}} ! 3165: void op_5638(UWORD opcode) ! 3166: { ! 3167: ULONG srcreg = 3; ! 3168: {{ ULONG src = srcreg; ! 3169: { CPTR dsta = (LONG)(WORD)nextiword(); ! 3170: BYTE dst = get_byte(dsta); ! 3171: { ULONG newv = dst + src; ! 3172: { bool flgs = ((BYTE)(src)) < 0; ! 3173: bool flgo = ((BYTE)(dst)) < 0; ! 3174: bool flgn = ((BYTE)(newv)) < 0; ! 3175: regs.z = ((BYTE)(newv)) == 0; ! 3176: regs.v = (flgs == flgo) && (flgn != flgo); ! 3177: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 3178: regs.n = flgn != 0; ! 3179: put_byte(dsta,newv); ! 3180: }}}}}} ! 3181: void op_5639(UWORD opcode) ! 3182: { ! 3183: ULONG srcreg = 3; ! 3184: {{ ULONG src = srcreg; ! 3185: { CPTR dsta = nextilong(); ! 3186: BYTE dst = get_byte(dsta); ! 3187: { ULONG newv = dst + src; ! 3188: { bool flgs = ((BYTE)(src)) < 0; ! 3189: bool flgo = ((BYTE)(dst)) < 0; ! 3190: bool flgn = ((BYTE)(newv)) < 0; ! 3191: regs.z = ((BYTE)(newv)) == 0; ! 3192: regs.v = (flgs == flgo) && (flgn != flgo); ! 3193: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 3194: regs.n = flgn != 0; ! 3195: put_byte(dsta,newv); ! 3196: }}}}}} ! 3197: void op_5640(UWORD opcode) ! 3198: { ! 3199: ULONG srcreg = 3; ! 3200: ULONG dstreg = (opcode & 7) >> 0; ! 3201: {{ ULONG src = srcreg; ! 3202: { WORD dst = regs.d[dstreg]; ! 3203: { ULONG newv = dst + src; ! 3204: { bool flgs = ((WORD)(src)) < 0; ! 3205: bool flgo = ((WORD)(dst)) < 0; ! 3206: bool flgn = ((WORD)(newv)) < 0; ! 3207: regs.z = ((WORD)(newv)) == 0; ! 3208: regs.v = (flgs == flgo) && (flgn != flgo); ! 3209: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 3210: regs.n = flgn != 0; ! 3211: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 3212: }}}}}} ! 3213: void op_5648(UWORD opcode) ! 3214: { ! 3215: ULONG srcreg = 3; ! 3216: ULONG dstreg = (opcode & 7) >> 0; ! 3217: {{ ULONG src = srcreg; ! 3218: { LONG dst = regs.a[dstreg]; ! 3219: { ULONG newv = dst + src; ! 3220: regs.a[dstreg] = (newv); ! 3221: }}}}} ! 3222: void op_5650(UWORD opcode) ! 3223: { ! 3224: ULONG srcreg = 3; ! 3225: ULONG dstreg = (opcode & 7) >> 0; ! 3226: {{ ULONG src = srcreg; ! 3227: { CPTR dsta = regs.a[dstreg]; ! 3228: WORD dst = get_word(dsta); ! 3229: { ULONG newv = dst + src; ! 3230: { bool flgs = ((WORD)(src)) < 0; ! 3231: bool flgo = ((WORD)(dst)) < 0; ! 3232: bool flgn = ((WORD)(newv)) < 0; ! 3233: regs.z = ((WORD)(newv)) == 0; ! 3234: regs.v = (flgs == flgo) && (flgn != flgo); ! 3235: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 3236: regs.n = flgn != 0; ! 3237: put_word(dsta,newv); ! 3238: }}}}}} ! 3239: void op_5658(UWORD opcode) ! 3240: { ! 3241: ULONG srcreg = 3; ! 3242: ULONG dstreg = (opcode & 7) >> 0; ! 3243: {{ ULONG src = srcreg; ! 3244: { CPTR dsta = regs.a[dstreg]; ! 3245: WORD dst = get_word(dsta); ! 3246: { regs.a[dstreg] += 2; ! 3247: { ULONG newv = dst + src; ! 3248: { bool flgs = ((WORD)(src)) < 0; ! 3249: bool flgo = ((WORD)(dst)) < 0; ! 3250: bool flgn = ((WORD)(newv)) < 0; ! 3251: regs.z = ((WORD)(newv)) == 0; ! 3252: regs.v = (flgs == flgo) && (flgn != flgo); ! 3253: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 3254: regs.n = flgn != 0; ! 3255: put_word(dsta,newv); ! 3256: }}}}}}} ! 3257: void op_5660(UWORD opcode) ! 3258: { ! 3259: ULONG srcreg = 3; ! 3260: ULONG dstreg = (opcode & 7) >> 0; ! 3261: {{ ULONG src = srcreg; ! 3262: { regs.a[dstreg] -= 2; ! 3263: { CPTR dsta = regs.a[dstreg]; ! 3264: WORD dst = get_word(dsta); ! 3265: { ULONG newv = dst + src; ! 3266: { bool flgs = ((WORD)(src)) < 0; ! 3267: bool flgo = ((WORD)(dst)) < 0; ! 3268: bool flgn = ((WORD)(newv)) < 0; ! 3269: regs.z = ((WORD)(newv)) == 0; ! 3270: regs.v = (flgs == flgo) && (flgn != flgo); ! 3271: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 3272: regs.n = flgn != 0; ! 3273: put_word(dsta,newv); ! 3274: }}}}}}} ! 3275: void op_5668(UWORD opcode) ! 3276: { ! 3277: ULONG srcreg = 3; ! 3278: ULONG dstreg = (opcode & 7) >> 0; ! 3279: {{ ULONG src = srcreg; ! 3280: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 3281: WORD dst = get_word(dsta); ! 3282: { ULONG newv = dst + src; ! 3283: { bool flgs = ((WORD)(src)) < 0; ! 3284: bool flgo = ((WORD)(dst)) < 0; ! 3285: bool flgn = ((WORD)(newv)) < 0; ! 3286: regs.z = ((WORD)(newv)) == 0; ! 3287: regs.v = (flgs == flgo) && (flgn != flgo); ! 3288: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 3289: regs.n = flgn != 0; ! 3290: put_word(dsta,newv); ! 3291: }}}}}} ! 3292: void op_5670(UWORD opcode) ! 3293: { ! 3294: ULONG srcreg = 3; ! 3295: ULONG dstreg = (opcode & 7) >> 0; ! 3296: {{ ULONG src = srcreg; ! 3297: { CPTR dsta = regs.a[dstreg]; ! 3298: UWORD dstdp = nextiword(); ! 3299: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 3300: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 3301: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 3302: dsta += dstdpr; ! 3303: { WORD dst = get_word(dsta); ! 3304: { ULONG newv = dst + src; ! 3305: { bool flgs = ((WORD)(src)) < 0; ! 3306: bool flgo = ((WORD)(dst)) < 0; ! 3307: bool flgn = ((WORD)(newv)) < 0; ! 3308: regs.z = ((WORD)(newv)) == 0; ! 3309: regs.v = (flgs == flgo) && (flgn != flgo); ! 3310: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 3311: regs.n = flgn != 0; ! 3312: put_word(dsta,newv); ! 3313: }}}}}}}} ! 3314: void op_5678(UWORD opcode) ! 3315: { ! 3316: ULONG srcreg = 3; ! 3317: {{ ULONG src = srcreg; ! 3318: { CPTR dsta = (LONG)(WORD)nextiword(); ! 3319: WORD dst = get_word(dsta); ! 3320: { ULONG newv = dst + src; ! 3321: { bool flgs = ((WORD)(src)) < 0; ! 3322: bool flgo = ((WORD)(dst)) < 0; ! 3323: bool flgn = ((WORD)(newv)) < 0; ! 3324: regs.z = ((WORD)(newv)) == 0; ! 3325: regs.v = (flgs == flgo) && (flgn != flgo); ! 3326: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 3327: regs.n = flgn != 0; ! 3328: put_word(dsta,newv); ! 3329: }}}}}} ! 3330: void op_5679(UWORD opcode) ! 3331: { ! 3332: ULONG srcreg = 3; ! 3333: {{ ULONG src = srcreg; ! 3334: { CPTR dsta = nextilong(); ! 3335: WORD dst = get_word(dsta); ! 3336: { ULONG newv = dst + src; ! 3337: { bool flgs = ((WORD)(src)) < 0; ! 3338: bool flgo = ((WORD)(dst)) < 0; ! 3339: bool flgn = ((WORD)(newv)) < 0; ! 3340: regs.z = ((WORD)(newv)) == 0; ! 3341: regs.v = (flgs == flgo) && (flgn != flgo); ! 3342: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 3343: regs.n = flgn != 0; ! 3344: put_word(dsta,newv); ! 3345: }}}}}} ! 3346: void op_5680(UWORD opcode) ! 3347: { ! 3348: ULONG srcreg = 3; ! 3349: ULONG dstreg = (opcode & 7) >> 0; ! 3350: {{ ULONG src = srcreg; ! 3351: { LONG dst = regs.d[dstreg]; ! 3352: { ULONG newv = dst + src; ! 3353: { bool flgs = ((LONG)(src)) < 0; ! 3354: bool flgo = ((LONG)(dst)) < 0; ! 3355: bool flgn = ((LONG)(newv)) < 0; ! 3356: regs.z = ((LONG)(newv)) == 0; ! 3357: regs.v = (flgs == flgo) && (flgn != flgo); ! 3358: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 3359: regs.n = flgn != 0; ! 3360: regs.d[dstreg] = (newv); ! 3361: }}}}}} ! 3362: void op_5688(UWORD opcode) ! 3363: { ! 3364: ULONG srcreg = 3; ! 3365: ULONG dstreg = (opcode & 7) >> 0; ! 3366: {{ ULONG src = srcreg; ! 3367: { LONG dst = regs.a[dstreg]; ! 3368: { ULONG newv = dst + src; ! 3369: regs.a[dstreg] = (newv); ! 3370: }}}}} ! 3371: void op_5690(UWORD opcode) ! 3372: { ! 3373: ULONG srcreg = 3; ! 3374: ULONG dstreg = (opcode & 7) >> 0; ! 3375: {{ ULONG src = srcreg; ! 3376: { CPTR dsta = regs.a[dstreg]; ! 3377: LONG dst = get_long(dsta); ! 3378: { ULONG newv = dst + src; ! 3379: { bool flgs = ((LONG)(src)) < 0; ! 3380: bool flgo = ((LONG)(dst)) < 0; ! 3381: bool flgn = ((LONG)(newv)) < 0; ! 3382: regs.z = ((LONG)(newv)) == 0; ! 3383: regs.v = (flgs == flgo) && (flgn != flgo); ! 3384: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 3385: regs.n = flgn != 0; ! 3386: put_long(dsta,newv); ! 3387: }}}}}} ! 3388: void op_5698(UWORD opcode) ! 3389: { ! 3390: ULONG srcreg = 3; ! 3391: ULONG dstreg = (opcode & 7) >> 0; ! 3392: {{ ULONG src = srcreg; ! 3393: { CPTR dsta = regs.a[dstreg]; ! 3394: LONG dst = get_long(dsta); ! 3395: { regs.a[dstreg] += 4; ! 3396: { ULONG newv = dst + src; ! 3397: { bool flgs = ((LONG)(src)) < 0; ! 3398: bool flgo = ((LONG)(dst)) < 0; ! 3399: bool flgn = ((LONG)(newv)) < 0; ! 3400: regs.z = ((LONG)(newv)) == 0; ! 3401: regs.v = (flgs == flgo) && (flgn != flgo); ! 3402: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 3403: regs.n = flgn != 0; ! 3404: put_long(dsta,newv); ! 3405: }}}}}}} ! 3406: void op_56a0(UWORD opcode) ! 3407: { ! 3408: ULONG srcreg = 3; ! 3409: ULONG dstreg = (opcode & 7) >> 0; ! 3410: {{ ULONG src = srcreg; ! 3411: { regs.a[dstreg] -= 4; ! 3412: { CPTR dsta = regs.a[dstreg]; ! 3413: LONG dst = get_long(dsta); ! 3414: { ULONG newv = dst + src; ! 3415: { bool flgs = ((LONG)(src)) < 0; ! 3416: bool flgo = ((LONG)(dst)) < 0; ! 3417: bool flgn = ((LONG)(newv)) < 0; ! 3418: regs.z = ((LONG)(newv)) == 0; ! 3419: regs.v = (flgs == flgo) && (flgn != flgo); ! 3420: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 3421: regs.n = flgn != 0; ! 3422: put_long(dsta,newv); ! 3423: }}}}}}} ! 3424: void op_56a8(UWORD opcode) ! 3425: { ! 3426: ULONG srcreg = 3; ! 3427: ULONG dstreg = (opcode & 7) >> 0; ! 3428: {{ ULONG src = srcreg; ! 3429: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 3430: LONG dst = get_long(dsta); ! 3431: { ULONG newv = dst + src; ! 3432: { bool flgs = ((LONG)(src)) < 0; ! 3433: bool flgo = ((LONG)(dst)) < 0; ! 3434: bool flgn = ((LONG)(newv)) < 0; ! 3435: regs.z = ((LONG)(newv)) == 0; ! 3436: regs.v = (flgs == flgo) && (flgn != flgo); ! 3437: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 3438: regs.n = flgn != 0; ! 3439: put_long(dsta,newv); ! 3440: }}}}}} ! 3441: void op_56b0(UWORD opcode) ! 3442: { ! 3443: ULONG srcreg = 3; ! 3444: ULONG dstreg = (opcode & 7) >> 0; ! 3445: {{ ULONG src = srcreg; ! 3446: { CPTR dsta = regs.a[dstreg]; ! 3447: UWORD dstdp = nextiword(); ! 3448: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 3449: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 3450: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 3451: dsta += dstdpr; ! 3452: { LONG dst = get_long(dsta); ! 3453: { ULONG newv = dst + src; ! 3454: { bool flgs = ((LONG)(src)) < 0; ! 3455: bool flgo = ((LONG)(dst)) < 0; ! 3456: bool flgn = ((LONG)(newv)) < 0; ! 3457: regs.z = ((LONG)(newv)) == 0; ! 3458: regs.v = (flgs == flgo) && (flgn != flgo); ! 3459: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 3460: regs.n = flgn != 0; ! 3461: put_long(dsta,newv); ! 3462: }}}}}}}} ! 3463: void op_56b8(UWORD opcode) ! 3464: { ! 3465: ULONG srcreg = 3; ! 3466: {{ ULONG src = srcreg; ! 3467: { CPTR dsta = (LONG)(WORD)nextiword(); ! 3468: LONG dst = get_long(dsta); ! 3469: { ULONG newv = dst + src; ! 3470: { bool flgs = ((LONG)(src)) < 0; ! 3471: bool flgo = ((LONG)(dst)) < 0; ! 3472: bool flgn = ((LONG)(newv)) < 0; ! 3473: regs.z = ((LONG)(newv)) == 0; ! 3474: regs.v = (flgs == flgo) && (flgn != flgo); ! 3475: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 3476: regs.n = flgn != 0; ! 3477: put_long(dsta,newv); ! 3478: }}}}}} ! 3479: void op_56b9(UWORD opcode) ! 3480: { ! 3481: ULONG srcreg = 3; ! 3482: {{ ULONG src = srcreg; ! 3483: { CPTR dsta = nextilong(); ! 3484: LONG dst = get_long(dsta); ! 3485: { ULONG newv = dst + src; ! 3486: { bool flgs = ((LONG)(src)) < 0; ! 3487: bool flgo = ((LONG)(dst)) < 0; ! 3488: bool flgn = ((LONG)(newv)) < 0; ! 3489: regs.z = ((LONG)(newv)) == 0; ! 3490: regs.v = (flgs == flgo) && (flgn != flgo); ! 3491: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 3492: regs.n = flgn != 0; ! 3493: put_long(dsta,newv); ! 3494: }}}}}} ! 3495: void op_56c0(UWORD opcode) ! 3496: { ! 3497: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3498: {{{ int val = cctrue(6) ? 0xff : 0; ! 3499: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 3500: }}}} ! 3501: void op_56c8(UWORD opcode) ! 3502: { ! 3503: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3504: {{ WORD src = regs.d[srcreg]; ! 3505: { WORD offs = nextiword(); ! 3506: if (!cctrue(6)) { ! 3507: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 3508: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 3509: } ! 3510: }}}} ! 3511: void op_56d0(UWORD opcode) ! 3512: { ! 3513: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3514: {{ CPTR srca = regs.a[srcreg]; ! 3515: { int val = cctrue(6) ? 0xff : 0; ! 3516: put_byte(srca,val); ! 3517: }}}} ! 3518: void op_56d8(UWORD opcode) ! 3519: { ! 3520: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3521: {{ CPTR srca = regs.a[srcreg]; ! 3522: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 3523: { int val = cctrue(6) ? 0xff : 0; ! 3524: put_byte(srca,val); ! 3525: }}}}} ! 3526: void op_56e0(UWORD opcode) ! 3527: { ! 3528: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3529: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 3530: { CPTR srca = regs.a[srcreg]; ! 3531: { int val = cctrue(6) ? 0xff : 0; ! 3532: put_byte(srca,val); ! 3533: }}}}} ! 3534: void op_56e8(UWORD opcode) ! 3535: { ! 3536: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3537: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 3538: { int val = cctrue(6) ? 0xff : 0; ! 3539: put_byte(srca,val); ! 3540: }}}} ! 3541: void op_56f0(UWORD opcode) ! 3542: { ! 3543: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3544: {{ CPTR srca = regs.a[srcreg]; ! 3545: UWORD srcdp = nextiword(); ! 3546: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 3547: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 3548: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 3549: srca += srcdpr; ! 3550: { int val = cctrue(6) ? 0xff : 0; ! 3551: put_byte(srca,val); ! 3552: }}}}} ! 3553: void op_56f8(UWORD opcode) ! 3554: { ! 3555: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 3556: { int val = cctrue(6) ? 0xff : 0; ! 3557: put_byte(srca,val); ! 3558: }}}} ! 3559: void op_56f9(UWORD opcode) ! 3560: { ! 3561: {{ CPTR srca = nextilong(); ! 3562: { int val = cctrue(6) ? 0xff : 0; ! 3563: put_byte(srca,val); ! 3564: }}}} ! 3565: void op_5700(UWORD opcode) ! 3566: { ! 3567: ULONG srcreg = 3; ! 3568: ULONG dstreg = (opcode & 7) >> 0; ! 3569: {{ ULONG src = srcreg; ! 3570: { BYTE dst = regs.d[dstreg]; ! 3571: { ULONG newv = dst - src; ! 3572: { bool flgs = ((BYTE)(src)) < 0; ! 3573: bool flgo = ((BYTE)(dst)) < 0; ! 3574: bool flgn = ((BYTE)(newv)) < 0; ! 3575: regs.z = ((BYTE)(newv)) == 0; ! 3576: regs.v = (flgs != flgo) && (flgn != flgo); ! 3577: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 3578: regs.n = flgn != 0; ! 3579: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 3580: }}}}}} ! 3581: void op_5710(UWORD opcode) ! 3582: { ! 3583: ULONG srcreg = 3; ! 3584: ULONG dstreg = (opcode & 7) >> 0; ! 3585: {{ ULONG src = srcreg; ! 3586: { CPTR dsta = regs.a[dstreg]; ! 3587: BYTE dst = get_byte(dsta); ! 3588: { ULONG newv = dst - src; ! 3589: { bool flgs = ((BYTE)(src)) < 0; ! 3590: bool flgo = ((BYTE)(dst)) < 0; ! 3591: bool flgn = ((BYTE)(newv)) < 0; ! 3592: regs.z = ((BYTE)(newv)) == 0; ! 3593: regs.v = (flgs != flgo) && (flgn != flgo); ! 3594: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 3595: regs.n = flgn != 0; ! 3596: put_byte(dsta,newv); ! 3597: }}}}}} ! 3598: void op_5718(UWORD opcode) ! 3599: { ! 3600: ULONG srcreg = 3; ! 3601: ULONG dstreg = (opcode & 7) >> 0; ! 3602: {{ ULONG src = srcreg; ! 3603: { CPTR dsta = regs.a[dstreg]; ! 3604: BYTE dst = get_byte(dsta); ! 3605: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 3606: { ULONG newv = dst - src; ! 3607: { bool flgs = ((BYTE)(src)) < 0; ! 3608: bool flgo = ((BYTE)(dst)) < 0; ! 3609: bool flgn = ((BYTE)(newv)) < 0; ! 3610: regs.z = ((BYTE)(newv)) == 0; ! 3611: regs.v = (flgs != flgo) && (flgn != flgo); ! 3612: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 3613: regs.n = flgn != 0; ! 3614: put_byte(dsta,newv); ! 3615: }}}}}}} ! 3616: void op_5720(UWORD opcode) ! 3617: { ! 3618: ULONG srcreg = 3; ! 3619: ULONG dstreg = (opcode & 7) >> 0; ! 3620: {{ ULONG src = srcreg; ! 3621: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 3622: { CPTR dsta = regs.a[dstreg]; ! 3623: BYTE dst = get_byte(dsta); ! 3624: { ULONG newv = dst - src; ! 3625: { bool flgs = ((BYTE)(src)) < 0; ! 3626: bool flgo = ((BYTE)(dst)) < 0; ! 3627: bool flgn = ((BYTE)(newv)) < 0; ! 3628: regs.z = ((BYTE)(newv)) == 0; ! 3629: regs.v = (flgs != flgo) && (flgn != flgo); ! 3630: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 3631: regs.n = flgn != 0; ! 3632: put_byte(dsta,newv); ! 3633: }}}}}}} ! 3634: void op_5728(UWORD opcode) ! 3635: { ! 3636: ULONG srcreg = 3; ! 3637: ULONG dstreg = (opcode & 7) >> 0; ! 3638: {{ ULONG src = srcreg; ! 3639: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 3640: BYTE dst = get_byte(dsta); ! 3641: { ULONG newv = dst - src; ! 3642: { bool flgs = ((BYTE)(src)) < 0; ! 3643: bool flgo = ((BYTE)(dst)) < 0; ! 3644: bool flgn = ((BYTE)(newv)) < 0; ! 3645: regs.z = ((BYTE)(newv)) == 0; ! 3646: regs.v = (flgs != flgo) && (flgn != flgo); ! 3647: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 3648: regs.n = flgn != 0; ! 3649: put_byte(dsta,newv); ! 3650: }}}}}} ! 3651: void op_5730(UWORD opcode) ! 3652: { ! 3653: ULONG srcreg = 3; ! 3654: ULONG dstreg = (opcode & 7) >> 0; ! 3655: {{ ULONG src = srcreg; ! 3656: { CPTR dsta = regs.a[dstreg]; ! 3657: UWORD dstdp = nextiword(); ! 3658: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 3659: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 3660: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 3661: dsta += dstdpr; ! 3662: { BYTE dst = get_byte(dsta); ! 3663: { ULONG newv = dst - src; ! 3664: { bool flgs = ((BYTE)(src)) < 0; ! 3665: bool flgo = ((BYTE)(dst)) < 0; ! 3666: bool flgn = ((BYTE)(newv)) < 0; ! 3667: regs.z = ((BYTE)(newv)) == 0; ! 3668: regs.v = (flgs != flgo) && (flgn != flgo); ! 3669: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 3670: regs.n = flgn != 0; ! 3671: put_byte(dsta,newv); ! 3672: }}}}}}}} ! 3673: void op_5738(UWORD opcode) ! 3674: { ! 3675: ULONG srcreg = 3; ! 3676: {{ ULONG src = srcreg; ! 3677: { CPTR dsta = (LONG)(WORD)nextiword(); ! 3678: BYTE dst = get_byte(dsta); ! 3679: { ULONG newv = dst - src; ! 3680: { bool flgs = ((BYTE)(src)) < 0; ! 3681: bool flgo = ((BYTE)(dst)) < 0; ! 3682: bool flgn = ((BYTE)(newv)) < 0; ! 3683: regs.z = ((BYTE)(newv)) == 0; ! 3684: regs.v = (flgs != flgo) && (flgn != flgo); ! 3685: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 3686: regs.n = flgn != 0; ! 3687: put_byte(dsta,newv); ! 3688: }}}}}} ! 3689: void op_5739(UWORD opcode) ! 3690: { ! 3691: ULONG srcreg = 3; ! 3692: {{ ULONG src = srcreg; ! 3693: { CPTR dsta = nextilong(); ! 3694: BYTE dst = get_byte(dsta); ! 3695: { ULONG newv = dst - src; ! 3696: { bool flgs = ((BYTE)(src)) < 0; ! 3697: bool flgo = ((BYTE)(dst)) < 0; ! 3698: bool flgn = ((BYTE)(newv)) < 0; ! 3699: regs.z = ((BYTE)(newv)) == 0; ! 3700: regs.v = (flgs != flgo) && (flgn != flgo); ! 3701: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 3702: regs.n = flgn != 0; ! 3703: put_byte(dsta,newv); ! 3704: }}}}}} ! 3705: void op_5740(UWORD opcode) ! 3706: { ! 3707: ULONG srcreg = 3; ! 3708: ULONG dstreg = (opcode & 7) >> 0; ! 3709: {{ ULONG src = srcreg; ! 3710: { WORD dst = regs.d[dstreg]; ! 3711: { ULONG newv = dst - src; ! 3712: { bool flgs = ((WORD)(src)) < 0; ! 3713: bool flgo = ((WORD)(dst)) < 0; ! 3714: bool flgn = ((WORD)(newv)) < 0; ! 3715: regs.z = ((WORD)(newv)) == 0; ! 3716: regs.v = (flgs != flgo) && (flgn != flgo); ! 3717: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 3718: regs.n = flgn != 0; ! 3719: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 3720: }}}}}} ! 3721: void op_5748(UWORD opcode) ! 3722: { ! 3723: ULONG srcreg = 3; ! 3724: ULONG dstreg = (opcode & 7) >> 0; ! 3725: {{ ULONG src = srcreg; ! 3726: { LONG dst = regs.a[dstreg]; ! 3727: { ULONG newv = dst - src; ! 3728: regs.a[dstreg] = (newv); ! 3729: }}}}} ! 3730: void op_5750(UWORD opcode) ! 3731: { ! 3732: ULONG srcreg = 3; ! 3733: ULONG dstreg = (opcode & 7) >> 0; ! 3734: {{ ULONG src = srcreg; ! 3735: { CPTR dsta = regs.a[dstreg]; ! 3736: WORD dst = get_word(dsta); ! 3737: { ULONG newv = dst - src; ! 3738: { bool flgs = ((WORD)(src)) < 0; ! 3739: bool flgo = ((WORD)(dst)) < 0; ! 3740: bool flgn = ((WORD)(newv)) < 0; ! 3741: regs.z = ((WORD)(newv)) == 0; ! 3742: regs.v = (flgs != flgo) && (flgn != flgo); ! 3743: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 3744: regs.n = flgn != 0; ! 3745: put_word(dsta,newv); ! 3746: }}}}}} ! 3747: void op_5758(UWORD opcode) ! 3748: { ! 3749: ULONG srcreg = 3; ! 3750: ULONG dstreg = (opcode & 7) >> 0; ! 3751: {{ ULONG src = srcreg; ! 3752: { CPTR dsta = regs.a[dstreg]; ! 3753: WORD dst = get_word(dsta); ! 3754: { regs.a[dstreg] += 2; ! 3755: { ULONG newv = dst - src; ! 3756: { bool flgs = ((WORD)(src)) < 0; ! 3757: bool flgo = ((WORD)(dst)) < 0; ! 3758: bool flgn = ((WORD)(newv)) < 0; ! 3759: regs.z = ((WORD)(newv)) == 0; ! 3760: regs.v = (flgs != flgo) && (flgn != flgo); ! 3761: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 3762: regs.n = flgn != 0; ! 3763: put_word(dsta,newv); ! 3764: }}}}}}} ! 3765: void op_5760(UWORD opcode) ! 3766: { ! 3767: ULONG srcreg = 3; ! 3768: ULONG dstreg = (opcode & 7) >> 0; ! 3769: {{ ULONG src = srcreg; ! 3770: { regs.a[dstreg] -= 2; ! 3771: { CPTR dsta = regs.a[dstreg]; ! 3772: WORD dst = get_word(dsta); ! 3773: { ULONG newv = dst - src; ! 3774: { bool flgs = ((WORD)(src)) < 0; ! 3775: bool flgo = ((WORD)(dst)) < 0; ! 3776: bool flgn = ((WORD)(newv)) < 0; ! 3777: regs.z = ((WORD)(newv)) == 0; ! 3778: regs.v = (flgs != flgo) && (flgn != flgo); ! 3779: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 3780: regs.n = flgn != 0; ! 3781: put_word(dsta,newv); ! 3782: }}}}}}} ! 3783: void op_5768(UWORD opcode) ! 3784: { ! 3785: ULONG srcreg = 3; ! 3786: ULONG dstreg = (opcode & 7) >> 0; ! 3787: {{ ULONG src = srcreg; ! 3788: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 3789: WORD dst = get_word(dsta); ! 3790: { ULONG newv = dst - src; ! 3791: { bool flgs = ((WORD)(src)) < 0; ! 3792: bool flgo = ((WORD)(dst)) < 0; ! 3793: bool flgn = ((WORD)(newv)) < 0; ! 3794: regs.z = ((WORD)(newv)) == 0; ! 3795: regs.v = (flgs != flgo) && (flgn != flgo); ! 3796: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 3797: regs.n = flgn != 0; ! 3798: put_word(dsta,newv); ! 3799: }}}}}} ! 3800: void op_5770(UWORD opcode) ! 3801: { ! 3802: ULONG srcreg = 3; ! 3803: ULONG dstreg = (opcode & 7) >> 0; ! 3804: {{ ULONG src = srcreg; ! 3805: { CPTR dsta = regs.a[dstreg]; ! 3806: UWORD dstdp = nextiword(); ! 3807: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 3808: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 3809: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 3810: dsta += dstdpr; ! 3811: { WORD dst = get_word(dsta); ! 3812: { ULONG newv = dst - src; ! 3813: { bool flgs = ((WORD)(src)) < 0; ! 3814: bool flgo = ((WORD)(dst)) < 0; ! 3815: bool flgn = ((WORD)(newv)) < 0; ! 3816: regs.z = ((WORD)(newv)) == 0; ! 3817: regs.v = (flgs != flgo) && (flgn != flgo); ! 3818: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 3819: regs.n = flgn != 0; ! 3820: put_word(dsta,newv); ! 3821: }}}}}}}} ! 3822: void op_5778(UWORD opcode) ! 3823: { ! 3824: ULONG srcreg = 3; ! 3825: {{ ULONG src = srcreg; ! 3826: { CPTR dsta = (LONG)(WORD)nextiword(); ! 3827: WORD dst = get_word(dsta); ! 3828: { ULONG newv = dst - src; ! 3829: { bool flgs = ((WORD)(src)) < 0; ! 3830: bool flgo = ((WORD)(dst)) < 0; ! 3831: bool flgn = ((WORD)(newv)) < 0; ! 3832: regs.z = ((WORD)(newv)) == 0; ! 3833: regs.v = (flgs != flgo) && (flgn != flgo); ! 3834: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 3835: regs.n = flgn != 0; ! 3836: put_word(dsta,newv); ! 3837: }}}}}} ! 3838: void op_5779(UWORD opcode) ! 3839: { ! 3840: ULONG srcreg = 3; ! 3841: {{ ULONG src = srcreg; ! 3842: { CPTR dsta = nextilong(); ! 3843: WORD dst = get_word(dsta); ! 3844: { ULONG newv = dst - src; ! 3845: { bool flgs = ((WORD)(src)) < 0; ! 3846: bool flgo = ((WORD)(dst)) < 0; ! 3847: bool flgn = ((WORD)(newv)) < 0; ! 3848: regs.z = ((WORD)(newv)) == 0; ! 3849: regs.v = (flgs != flgo) && (flgn != flgo); ! 3850: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 3851: regs.n = flgn != 0; ! 3852: put_word(dsta,newv); ! 3853: }}}}}} ! 3854: void op_5780(UWORD opcode) ! 3855: { ! 3856: ULONG srcreg = 3; ! 3857: ULONG dstreg = (opcode & 7) >> 0; ! 3858: {{ ULONG src = srcreg; ! 3859: { LONG dst = regs.d[dstreg]; ! 3860: { ULONG newv = dst - src; ! 3861: { bool flgs = ((LONG)(src)) < 0; ! 3862: bool flgo = ((LONG)(dst)) < 0; ! 3863: bool flgn = ((LONG)(newv)) < 0; ! 3864: regs.z = ((LONG)(newv)) == 0; ! 3865: regs.v = (flgs != flgo) && (flgn != flgo); ! 3866: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 3867: regs.n = flgn != 0; ! 3868: regs.d[dstreg] = (newv); ! 3869: }}}}}} ! 3870: void op_5788(UWORD opcode) ! 3871: { ! 3872: ULONG srcreg = 3; ! 3873: ULONG dstreg = (opcode & 7) >> 0; ! 3874: {{ ULONG src = srcreg; ! 3875: { LONG dst = regs.a[dstreg]; ! 3876: { ULONG newv = dst - src; ! 3877: regs.a[dstreg] = (newv); ! 3878: }}}}} ! 3879: void op_5790(UWORD opcode) ! 3880: { ! 3881: ULONG srcreg = 3; ! 3882: ULONG dstreg = (opcode & 7) >> 0; ! 3883: {{ ULONG src = srcreg; ! 3884: { CPTR dsta = regs.a[dstreg]; ! 3885: LONG dst = get_long(dsta); ! 3886: { ULONG newv = dst - src; ! 3887: { bool flgs = ((LONG)(src)) < 0; ! 3888: bool flgo = ((LONG)(dst)) < 0; ! 3889: bool flgn = ((LONG)(newv)) < 0; ! 3890: regs.z = ((LONG)(newv)) == 0; ! 3891: regs.v = (flgs != flgo) && (flgn != flgo); ! 3892: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 3893: regs.n = flgn != 0; ! 3894: put_long(dsta,newv); ! 3895: }}}}}} ! 3896: void op_5798(UWORD opcode) ! 3897: { ! 3898: ULONG srcreg = 3; ! 3899: ULONG dstreg = (opcode & 7) >> 0; ! 3900: {{ ULONG src = srcreg; ! 3901: { CPTR dsta = regs.a[dstreg]; ! 3902: LONG dst = get_long(dsta); ! 3903: { regs.a[dstreg] += 4; ! 3904: { ULONG newv = dst - src; ! 3905: { bool flgs = ((LONG)(src)) < 0; ! 3906: bool flgo = ((LONG)(dst)) < 0; ! 3907: bool flgn = ((LONG)(newv)) < 0; ! 3908: regs.z = ((LONG)(newv)) == 0; ! 3909: regs.v = (flgs != flgo) && (flgn != flgo); ! 3910: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 3911: regs.n = flgn != 0; ! 3912: put_long(dsta,newv); ! 3913: }}}}}}} ! 3914: void op_57a0(UWORD opcode) ! 3915: { ! 3916: ULONG srcreg = 3; ! 3917: ULONG dstreg = (opcode & 7) >> 0; ! 3918: {{ ULONG src = srcreg; ! 3919: { regs.a[dstreg] -= 4; ! 3920: { CPTR dsta = regs.a[dstreg]; ! 3921: LONG dst = get_long(dsta); ! 3922: { ULONG newv = dst - src; ! 3923: { bool flgs = ((LONG)(src)) < 0; ! 3924: bool flgo = ((LONG)(dst)) < 0; ! 3925: bool flgn = ((LONG)(newv)) < 0; ! 3926: regs.z = ((LONG)(newv)) == 0; ! 3927: regs.v = (flgs != flgo) && (flgn != flgo); ! 3928: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 3929: regs.n = flgn != 0; ! 3930: put_long(dsta,newv); ! 3931: }}}}}}} ! 3932: void op_57a8(UWORD opcode) ! 3933: { ! 3934: ULONG srcreg = 3; ! 3935: ULONG dstreg = (opcode & 7) >> 0; ! 3936: {{ ULONG src = srcreg; ! 3937: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 3938: LONG dst = get_long(dsta); ! 3939: { ULONG newv = dst - src; ! 3940: { bool flgs = ((LONG)(src)) < 0; ! 3941: bool flgo = ((LONG)(dst)) < 0; ! 3942: bool flgn = ((LONG)(newv)) < 0; ! 3943: regs.z = ((LONG)(newv)) == 0; ! 3944: regs.v = (flgs != flgo) && (flgn != flgo); ! 3945: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 3946: regs.n = flgn != 0; ! 3947: put_long(dsta,newv); ! 3948: }}}}}} ! 3949: void op_57b0(UWORD opcode) ! 3950: { ! 3951: ULONG srcreg = 3; ! 3952: ULONG dstreg = (opcode & 7) >> 0; ! 3953: {{ ULONG src = srcreg; ! 3954: { CPTR dsta = regs.a[dstreg]; ! 3955: UWORD dstdp = nextiword(); ! 3956: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 3957: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 3958: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 3959: dsta += dstdpr; ! 3960: { LONG dst = get_long(dsta); ! 3961: { ULONG newv = dst - src; ! 3962: { bool flgs = ((LONG)(src)) < 0; ! 3963: bool flgo = ((LONG)(dst)) < 0; ! 3964: bool flgn = ((LONG)(newv)) < 0; ! 3965: regs.z = ((LONG)(newv)) == 0; ! 3966: regs.v = (flgs != flgo) && (flgn != flgo); ! 3967: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 3968: regs.n = flgn != 0; ! 3969: put_long(dsta,newv); ! 3970: }}}}}}}} ! 3971: void op_57b8(UWORD opcode) ! 3972: { ! 3973: ULONG srcreg = 3; ! 3974: {{ ULONG src = srcreg; ! 3975: { CPTR dsta = (LONG)(WORD)nextiword(); ! 3976: LONG dst = get_long(dsta); ! 3977: { ULONG newv = dst - src; ! 3978: { bool flgs = ((LONG)(src)) < 0; ! 3979: bool flgo = ((LONG)(dst)) < 0; ! 3980: bool flgn = ((LONG)(newv)) < 0; ! 3981: regs.z = ((LONG)(newv)) == 0; ! 3982: regs.v = (flgs != flgo) && (flgn != flgo); ! 3983: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 3984: regs.n = flgn != 0; ! 3985: put_long(dsta,newv); ! 3986: }}}}}} ! 3987: void op_57b9(UWORD opcode) ! 3988: { ! 3989: ULONG srcreg = 3; ! 3990: {{ ULONG src = srcreg; ! 3991: { CPTR dsta = nextilong(); ! 3992: LONG dst = get_long(dsta); ! 3993: { ULONG newv = dst - src; ! 3994: { bool flgs = ((LONG)(src)) < 0; ! 3995: bool flgo = ((LONG)(dst)) < 0; ! 3996: bool flgn = ((LONG)(newv)) < 0; ! 3997: regs.z = ((LONG)(newv)) == 0; ! 3998: regs.v = (flgs != flgo) && (flgn != flgo); ! 3999: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 4000: regs.n = flgn != 0; ! 4001: put_long(dsta,newv); ! 4002: }}}}}} ! 4003: void op_57c0(UWORD opcode) ! 4004: { ! 4005: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4006: {{{ int val = cctrue(7) ? 0xff : 0; ! 4007: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 4008: }}}} ! 4009: void op_57c8(UWORD opcode) ! 4010: { ! 4011: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4012: {{ WORD src = regs.d[srcreg]; ! 4013: { WORD offs = nextiword(); ! 4014: if (!cctrue(7)) { ! 4015: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 4016: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 4017: } ! 4018: }}}} ! 4019: void op_57d0(UWORD opcode) ! 4020: { ! 4021: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4022: {{ CPTR srca = regs.a[srcreg]; ! 4023: { int val = cctrue(7) ? 0xff : 0; ! 4024: put_byte(srca,val); ! 4025: }}}} ! 4026: void op_57d8(UWORD opcode) ! 4027: { ! 4028: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4029: {{ CPTR srca = regs.a[srcreg]; ! 4030: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 4031: { int val = cctrue(7) ? 0xff : 0; ! 4032: put_byte(srca,val); ! 4033: }}}}} ! 4034: void op_57e0(UWORD opcode) ! 4035: { ! 4036: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4037: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 4038: { CPTR srca = regs.a[srcreg]; ! 4039: { int val = cctrue(7) ? 0xff : 0; ! 4040: put_byte(srca,val); ! 4041: }}}}} ! 4042: void op_57e8(UWORD opcode) ! 4043: { ! 4044: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4045: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 4046: { int val = cctrue(7) ? 0xff : 0; ! 4047: put_byte(srca,val); ! 4048: }}}} ! 4049: void op_57f0(UWORD opcode) ! 4050: { ! 4051: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4052: {{ CPTR srca = regs.a[srcreg]; ! 4053: UWORD srcdp = nextiword(); ! 4054: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 4055: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 4056: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 4057: srca += srcdpr; ! 4058: { int val = cctrue(7) ? 0xff : 0; ! 4059: put_byte(srca,val); ! 4060: }}}}} ! 4061: void op_57f8(UWORD opcode) ! 4062: { ! 4063: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 4064: { int val = cctrue(7) ? 0xff : 0; ! 4065: put_byte(srca,val); ! 4066: }}}} ! 4067: void op_57f9(UWORD opcode) ! 4068: { ! 4069: {{ CPTR srca = nextilong(); ! 4070: { int val = cctrue(7) ? 0xff : 0; ! 4071: put_byte(srca,val); ! 4072: }}}} ! 4073: void op_5800(UWORD opcode) ! 4074: { ! 4075: ULONG srcreg = 4; ! 4076: ULONG dstreg = (opcode & 7) >> 0; ! 4077: {{ ULONG src = srcreg; ! 4078: { BYTE dst = regs.d[dstreg]; ! 4079: { ULONG newv = dst + src; ! 4080: { bool flgs = ((BYTE)(src)) < 0; ! 4081: bool flgo = ((BYTE)(dst)) < 0; ! 4082: bool flgn = ((BYTE)(newv)) < 0; ! 4083: regs.z = ((BYTE)(newv)) == 0; ! 4084: regs.v = (flgs == flgo) && (flgn != flgo); ! 4085: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 4086: regs.n = flgn != 0; ! 4087: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 4088: }}}}}} ! 4089: void op_5810(UWORD opcode) ! 4090: { ! 4091: ULONG srcreg = 4; ! 4092: ULONG dstreg = (opcode & 7) >> 0; ! 4093: {{ ULONG src = srcreg; ! 4094: { CPTR dsta = regs.a[dstreg]; ! 4095: BYTE dst = get_byte(dsta); ! 4096: { ULONG newv = dst + src; ! 4097: { bool flgs = ((BYTE)(src)) < 0; ! 4098: bool flgo = ((BYTE)(dst)) < 0; ! 4099: bool flgn = ((BYTE)(newv)) < 0; ! 4100: regs.z = ((BYTE)(newv)) == 0; ! 4101: regs.v = (flgs == flgo) && (flgn != flgo); ! 4102: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 4103: regs.n = flgn != 0; ! 4104: put_byte(dsta,newv); ! 4105: }}}}}} ! 4106: void op_5818(UWORD opcode) ! 4107: { ! 4108: ULONG srcreg = 4; ! 4109: ULONG dstreg = (opcode & 7) >> 0; ! 4110: {{ ULONG src = srcreg; ! 4111: { CPTR dsta = regs.a[dstreg]; ! 4112: BYTE dst = get_byte(dsta); ! 4113: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 4114: { ULONG newv = dst + src; ! 4115: { bool flgs = ((BYTE)(src)) < 0; ! 4116: bool flgo = ((BYTE)(dst)) < 0; ! 4117: bool flgn = ((BYTE)(newv)) < 0; ! 4118: regs.z = ((BYTE)(newv)) == 0; ! 4119: regs.v = (flgs == flgo) && (flgn != flgo); ! 4120: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 4121: regs.n = flgn != 0; ! 4122: put_byte(dsta,newv); ! 4123: }}}}}}} ! 4124: void op_5820(UWORD opcode) ! 4125: { ! 4126: ULONG srcreg = 4; ! 4127: ULONG dstreg = (opcode & 7) >> 0; ! 4128: {{ ULONG src = srcreg; ! 4129: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 4130: { CPTR dsta = regs.a[dstreg]; ! 4131: BYTE dst = get_byte(dsta); ! 4132: { ULONG newv = dst + src; ! 4133: { bool flgs = ((BYTE)(src)) < 0; ! 4134: bool flgo = ((BYTE)(dst)) < 0; ! 4135: bool flgn = ((BYTE)(newv)) < 0; ! 4136: regs.z = ((BYTE)(newv)) == 0; ! 4137: regs.v = (flgs == flgo) && (flgn != flgo); ! 4138: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 4139: regs.n = flgn != 0; ! 4140: put_byte(dsta,newv); ! 4141: }}}}}}} ! 4142: void op_5828(UWORD opcode) ! 4143: { ! 4144: ULONG srcreg = 4; ! 4145: ULONG dstreg = (opcode & 7) >> 0; ! 4146: {{ ULONG src = srcreg; ! 4147: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 4148: BYTE dst = get_byte(dsta); ! 4149: { ULONG newv = dst + src; ! 4150: { bool flgs = ((BYTE)(src)) < 0; ! 4151: bool flgo = ((BYTE)(dst)) < 0; ! 4152: bool flgn = ((BYTE)(newv)) < 0; ! 4153: regs.z = ((BYTE)(newv)) == 0; ! 4154: regs.v = (flgs == flgo) && (flgn != flgo); ! 4155: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 4156: regs.n = flgn != 0; ! 4157: put_byte(dsta,newv); ! 4158: }}}}}} ! 4159: void op_5830(UWORD opcode) ! 4160: { ! 4161: ULONG srcreg = 4; ! 4162: ULONG dstreg = (opcode & 7) >> 0; ! 4163: {{ ULONG src = srcreg; ! 4164: { CPTR dsta = regs.a[dstreg]; ! 4165: UWORD dstdp = nextiword(); ! 4166: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 4167: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 4168: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 4169: dsta += dstdpr; ! 4170: { BYTE dst = get_byte(dsta); ! 4171: { ULONG newv = dst + src; ! 4172: { bool flgs = ((BYTE)(src)) < 0; ! 4173: bool flgo = ((BYTE)(dst)) < 0; ! 4174: bool flgn = ((BYTE)(newv)) < 0; ! 4175: regs.z = ((BYTE)(newv)) == 0; ! 4176: regs.v = (flgs == flgo) && (flgn != flgo); ! 4177: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 4178: regs.n = flgn != 0; ! 4179: put_byte(dsta,newv); ! 4180: }}}}}}}} ! 4181: void op_5838(UWORD opcode) ! 4182: { ! 4183: ULONG srcreg = 4; ! 4184: {{ ULONG src = srcreg; ! 4185: { CPTR dsta = (LONG)(WORD)nextiword(); ! 4186: BYTE dst = get_byte(dsta); ! 4187: { ULONG newv = dst + src; ! 4188: { bool flgs = ((BYTE)(src)) < 0; ! 4189: bool flgo = ((BYTE)(dst)) < 0; ! 4190: bool flgn = ((BYTE)(newv)) < 0; ! 4191: regs.z = ((BYTE)(newv)) == 0; ! 4192: regs.v = (flgs == flgo) && (flgn != flgo); ! 4193: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 4194: regs.n = flgn != 0; ! 4195: put_byte(dsta,newv); ! 4196: }}}}}} ! 4197: void op_5839(UWORD opcode) ! 4198: { ! 4199: ULONG srcreg = 4; ! 4200: {{ ULONG src = srcreg; ! 4201: { CPTR dsta = nextilong(); ! 4202: BYTE dst = get_byte(dsta); ! 4203: { ULONG newv = dst + src; ! 4204: { bool flgs = ((BYTE)(src)) < 0; ! 4205: bool flgo = ((BYTE)(dst)) < 0; ! 4206: bool flgn = ((BYTE)(newv)) < 0; ! 4207: regs.z = ((BYTE)(newv)) == 0; ! 4208: regs.v = (flgs == flgo) && (flgn != flgo); ! 4209: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 4210: regs.n = flgn != 0; ! 4211: put_byte(dsta,newv); ! 4212: }}}}}} ! 4213: void op_5840(UWORD opcode) ! 4214: { ! 4215: ULONG srcreg = 4; ! 4216: ULONG dstreg = (opcode & 7) >> 0; ! 4217: {{ ULONG src = srcreg; ! 4218: { WORD dst = regs.d[dstreg]; ! 4219: { ULONG newv = dst + src; ! 4220: { bool flgs = ((WORD)(src)) < 0; ! 4221: bool flgo = ((WORD)(dst)) < 0; ! 4222: bool flgn = ((WORD)(newv)) < 0; ! 4223: regs.z = ((WORD)(newv)) == 0; ! 4224: regs.v = (flgs == flgo) && (flgn != flgo); ! 4225: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 4226: regs.n = flgn != 0; ! 4227: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 4228: }}}}}} ! 4229: void op_5848(UWORD opcode) ! 4230: { ! 4231: ULONG srcreg = 4; ! 4232: ULONG dstreg = (opcode & 7) >> 0; ! 4233: {{ ULONG src = srcreg; ! 4234: { LONG dst = regs.a[dstreg]; ! 4235: { ULONG newv = dst + src; ! 4236: regs.a[dstreg] = (newv); ! 4237: }}}}} ! 4238: void op_5850(UWORD opcode) ! 4239: { ! 4240: ULONG srcreg = 4; ! 4241: ULONG dstreg = (opcode & 7) >> 0; ! 4242: {{ ULONG src = srcreg; ! 4243: { CPTR dsta = regs.a[dstreg]; ! 4244: WORD dst = get_word(dsta); ! 4245: { ULONG newv = dst + src; ! 4246: { bool flgs = ((WORD)(src)) < 0; ! 4247: bool flgo = ((WORD)(dst)) < 0; ! 4248: bool flgn = ((WORD)(newv)) < 0; ! 4249: regs.z = ((WORD)(newv)) == 0; ! 4250: regs.v = (flgs == flgo) && (flgn != flgo); ! 4251: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 4252: regs.n = flgn != 0; ! 4253: put_word(dsta,newv); ! 4254: }}}}}} ! 4255: void op_5858(UWORD opcode) ! 4256: { ! 4257: ULONG srcreg = 4; ! 4258: ULONG dstreg = (opcode & 7) >> 0; ! 4259: {{ ULONG src = srcreg; ! 4260: { CPTR dsta = regs.a[dstreg]; ! 4261: WORD dst = get_word(dsta); ! 4262: { regs.a[dstreg] += 2; ! 4263: { ULONG newv = dst + src; ! 4264: { bool flgs = ((WORD)(src)) < 0; ! 4265: bool flgo = ((WORD)(dst)) < 0; ! 4266: bool flgn = ((WORD)(newv)) < 0; ! 4267: regs.z = ((WORD)(newv)) == 0; ! 4268: regs.v = (flgs == flgo) && (flgn != flgo); ! 4269: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 4270: regs.n = flgn != 0; ! 4271: put_word(dsta,newv); ! 4272: }}}}}}} ! 4273: void op_5860(UWORD opcode) ! 4274: { ! 4275: ULONG srcreg = 4; ! 4276: ULONG dstreg = (opcode & 7) >> 0; ! 4277: {{ ULONG src = srcreg; ! 4278: { regs.a[dstreg] -= 2; ! 4279: { CPTR dsta = regs.a[dstreg]; ! 4280: WORD dst = get_word(dsta); ! 4281: { ULONG newv = dst + src; ! 4282: { bool flgs = ((WORD)(src)) < 0; ! 4283: bool flgo = ((WORD)(dst)) < 0; ! 4284: bool flgn = ((WORD)(newv)) < 0; ! 4285: regs.z = ((WORD)(newv)) == 0; ! 4286: regs.v = (flgs == flgo) && (flgn != flgo); ! 4287: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 4288: regs.n = flgn != 0; ! 4289: put_word(dsta,newv); ! 4290: }}}}}}} ! 4291: void op_5868(UWORD opcode) ! 4292: { ! 4293: ULONG srcreg = 4; ! 4294: ULONG dstreg = (opcode & 7) >> 0; ! 4295: {{ ULONG src = srcreg; ! 4296: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 4297: WORD dst = get_word(dsta); ! 4298: { ULONG newv = dst + src; ! 4299: { bool flgs = ((WORD)(src)) < 0; ! 4300: bool flgo = ((WORD)(dst)) < 0; ! 4301: bool flgn = ((WORD)(newv)) < 0; ! 4302: regs.z = ((WORD)(newv)) == 0; ! 4303: regs.v = (flgs == flgo) && (flgn != flgo); ! 4304: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 4305: regs.n = flgn != 0; ! 4306: put_word(dsta,newv); ! 4307: }}}}}} ! 4308: void op_5870(UWORD opcode) ! 4309: { ! 4310: ULONG srcreg = 4; ! 4311: ULONG dstreg = (opcode & 7) >> 0; ! 4312: {{ ULONG src = srcreg; ! 4313: { CPTR dsta = regs.a[dstreg]; ! 4314: UWORD dstdp = nextiword(); ! 4315: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 4316: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 4317: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 4318: dsta += dstdpr; ! 4319: { WORD dst = get_word(dsta); ! 4320: { ULONG newv = dst + src; ! 4321: { bool flgs = ((WORD)(src)) < 0; ! 4322: bool flgo = ((WORD)(dst)) < 0; ! 4323: bool flgn = ((WORD)(newv)) < 0; ! 4324: regs.z = ((WORD)(newv)) == 0; ! 4325: regs.v = (flgs == flgo) && (flgn != flgo); ! 4326: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 4327: regs.n = flgn != 0; ! 4328: put_word(dsta,newv); ! 4329: }}}}}}}} ! 4330: void op_5878(UWORD opcode) ! 4331: { ! 4332: ULONG srcreg = 4; ! 4333: {{ ULONG src = srcreg; ! 4334: { CPTR dsta = (LONG)(WORD)nextiword(); ! 4335: WORD dst = get_word(dsta); ! 4336: { ULONG newv = dst + src; ! 4337: { bool flgs = ((WORD)(src)) < 0; ! 4338: bool flgo = ((WORD)(dst)) < 0; ! 4339: bool flgn = ((WORD)(newv)) < 0; ! 4340: regs.z = ((WORD)(newv)) == 0; ! 4341: regs.v = (flgs == flgo) && (flgn != flgo); ! 4342: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 4343: regs.n = flgn != 0; ! 4344: put_word(dsta,newv); ! 4345: }}}}}} ! 4346: void op_5879(UWORD opcode) ! 4347: { ! 4348: ULONG srcreg = 4; ! 4349: {{ ULONG src = srcreg; ! 4350: { CPTR dsta = nextilong(); ! 4351: WORD dst = get_word(dsta); ! 4352: { ULONG newv = dst + src; ! 4353: { bool flgs = ((WORD)(src)) < 0; ! 4354: bool flgo = ((WORD)(dst)) < 0; ! 4355: bool flgn = ((WORD)(newv)) < 0; ! 4356: regs.z = ((WORD)(newv)) == 0; ! 4357: regs.v = (flgs == flgo) && (flgn != flgo); ! 4358: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 4359: regs.n = flgn != 0; ! 4360: put_word(dsta,newv); ! 4361: }}}}}} ! 4362: void op_5880(UWORD opcode) ! 4363: { ! 4364: ULONG srcreg = 4; ! 4365: ULONG dstreg = (opcode & 7) >> 0; ! 4366: {{ ULONG src = srcreg; ! 4367: { LONG dst = regs.d[dstreg]; ! 4368: { ULONG newv = dst + src; ! 4369: { bool flgs = ((LONG)(src)) < 0; ! 4370: bool flgo = ((LONG)(dst)) < 0; ! 4371: bool flgn = ((LONG)(newv)) < 0; ! 4372: regs.z = ((LONG)(newv)) == 0; ! 4373: regs.v = (flgs == flgo) && (flgn != flgo); ! 4374: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 4375: regs.n = flgn != 0; ! 4376: regs.d[dstreg] = (newv); ! 4377: }}}}}} ! 4378: void op_5888(UWORD opcode) ! 4379: { ! 4380: ULONG srcreg = 4; ! 4381: ULONG dstreg = (opcode & 7) >> 0; ! 4382: {{ ULONG src = srcreg; ! 4383: { LONG dst = regs.a[dstreg]; ! 4384: { ULONG newv = dst + src; ! 4385: regs.a[dstreg] = (newv); ! 4386: }}}}} ! 4387: void op_5890(UWORD opcode) ! 4388: { ! 4389: ULONG srcreg = 4; ! 4390: ULONG dstreg = (opcode & 7) >> 0; ! 4391: {{ ULONG src = srcreg; ! 4392: { CPTR dsta = regs.a[dstreg]; ! 4393: LONG dst = get_long(dsta); ! 4394: { ULONG newv = dst + src; ! 4395: { bool flgs = ((LONG)(src)) < 0; ! 4396: bool flgo = ((LONG)(dst)) < 0; ! 4397: bool flgn = ((LONG)(newv)) < 0; ! 4398: regs.z = ((LONG)(newv)) == 0; ! 4399: regs.v = (flgs == flgo) && (flgn != flgo); ! 4400: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 4401: regs.n = flgn != 0; ! 4402: put_long(dsta,newv); ! 4403: }}}}}} ! 4404: void op_5898(UWORD opcode) ! 4405: { ! 4406: ULONG srcreg = 4; ! 4407: ULONG dstreg = (opcode & 7) >> 0; ! 4408: {{ ULONG src = srcreg; ! 4409: { CPTR dsta = regs.a[dstreg]; ! 4410: LONG dst = get_long(dsta); ! 4411: { regs.a[dstreg] += 4; ! 4412: { ULONG newv = dst + src; ! 4413: { bool flgs = ((LONG)(src)) < 0; ! 4414: bool flgo = ((LONG)(dst)) < 0; ! 4415: bool flgn = ((LONG)(newv)) < 0; ! 4416: regs.z = ((LONG)(newv)) == 0; ! 4417: regs.v = (flgs == flgo) && (flgn != flgo); ! 4418: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 4419: regs.n = flgn != 0; ! 4420: put_long(dsta,newv); ! 4421: }}}}}}} ! 4422: void op_58a0(UWORD opcode) ! 4423: { ! 4424: ULONG srcreg = 4; ! 4425: ULONG dstreg = (opcode & 7) >> 0; ! 4426: {{ ULONG src = srcreg; ! 4427: { regs.a[dstreg] -= 4; ! 4428: { CPTR dsta = regs.a[dstreg]; ! 4429: LONG dst = get_long(dsta); ! 4430: { ULONG newv = dst + src; ! 4431: { bool flgs = ((LONG)(src)) < 0; ! 4432: bool flgo = ((LONG)(dst)) < 0; ! 4433: bool flgn = ((LONG)(newv)) < 0; ! 4434: regs.z = ((LONG)(newv)) == 0; ! 4435: regs.v = (flgs == flgo) && (flgn != flgo); ! 4436: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 4437: regs.n = flgn != 0; ! 4438: put_long(dsta,newv); ! 4439: }}}}}}} ! 4440: void op_58a8(UWORD opcode) ! 4441: { ! 4442: ULONG srcreg = 4; ! 4443: ULONG dstreg = (opcode & 7) >> 0; ! 4444: {{ ULONG src = srcreg; ! 4445: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 4446: LONG dst = get_long(dsta); ! 4447: { ULONG newv = dst + src; ! 4448: { bool flgs = ((LONG)(src)) < 0; ! 4449: bool flgo = ((LONG)(dst)) < 0; ! 4450: bool flgn = ((LONG)(newv)) < 0; ! 4451: regs.z = ((LONG)(newv)) == 0; ! 4452: regs.v = (flgs == flgo) && (flgn != flgo); ! 4453: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 4454: regs.n = flgn != 0; ! 4455: put_long(dsta,newv); ! 4456: }}}}}} ! 4457: void op_58b0(UWORD opcode) ! 4458: { ! 4459: ULONG srcreg = 4; ! 4460: ULONG dstreg = (opcode & 7) >> 0; ! 4461: {{ ULONG src = srcreg; ! 4462: { CPTR dsta = regs.a[dstreg]; ! 4463: UWORD dstdp = nextiword(); ! 4464: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 4465: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 4466: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 4467: dsta += dstdpr; ! 4468: { LONG dst = get_long(dsta); ! 4469: { ULONG newv = dst + src; ! 4470: { bool flgs = ((LONG)(src)) < 0; ! 4471: bool flgo = ((LONG)(dst)) < 0; ! 4472: bool flgn = ((LONG)(newv)) < 0; ! 4473: regs.z = ((LONG)(newv)) == 0; ! 4474: regs.v = (flgs == flgo) && (flgn != flgo); ! 4475: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 4476: regs.n = flgn != 0; ! 4477: put_long(dsta,newv); ! 4478: }}}}}}}} ! 4479: void op_58b8(UWORD opcode) ! 4480: { ! 4481: ULONG srcreg = 4; ! 4482: {{ ULONG src = srcreg; ! 4483: { CPTR dsta = (LONG)(WORD)nextiword(); ! 4484: LONG dst = get_long(dsta); ! 4485: { ULONG newv = dst + src; ! 4486: { bool flgs = ((LONG)(src)) < 0; ! 4487: bool flgo = ((LONG)(dst)) < 0; ! 4488: bool flgn = ((LONG)(newv)) < 0; ! 4489: regs.z = ((LONG)(newv)) == 0; ! 4490: regs.v = (flgs == flgo) && (flgn != flgo); ! 4491: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 4492: regs.n = flgn != 0; ! 4493: put_long(dsta,newv); ! 4494: }}}}}} ! 4495: void op_58b9(UWORD opcode) ! 4496: { ! 4497: ULONG srcreg = 4; ! 4498: {{ ULONG src = srcreg; ! 4499: { CPTR dsta = nextilong(); ! 4500: LONG dst = get_long(dsta); ! 4501: { ULONG newv = dst + src; ! 4502: { bool flgs = ((LONG)(src)) < 0; ! 4503: bool flgo = ((LONG)(dst)) < 0; ! 4504: bool flgn = ((LONG)(newv)) < 0; ! 4505: regs.z = ((LONG)(newv)) == 0; ! 4506: regs.v = (flgs == flgo) && (flgn != flgo); ! 4507: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 4508: regs.n = flgn != 0; ! 4509: put_long(dsta,newv); ! 4510: }}}}}} ! 4511: void op_58c0(UWORD opcode) ! 4512: { ! 4513: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4514: {{{ int val = cctrue(8) ? 0xff : 0; ! 4515: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 4516: }}}} ! 4517: void op_58c8(UWORD opcode) ! 4518: { ! 4519: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4520: {{ WORD src = regs.d[srcreg]; ! 4521: { WORD offs = nextiword(); ! 4522: if (!cctrue(8)) { ! 4523: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 4524: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 4525: } ! 4526: }}}} ! 4527: void op_58d0(UWORD opcode) ! 4528: { ! 4529: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4530: {{ CPTR srca = regs.a[srcreg]; ! 4531: { int val = cctrue(8) ? 0xff : 0; ! 4532: put_byte(srca,val); ! 4533: }}}} ! 4534: void op_58d8(UWORD opcode) ! 4535: { ! 4536: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4537: {{ CPTR srca = regs.a[srcreg]; ! 4538: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 4539: { int val = cctrue(8) ? 0xff : 0; ! 4540: put_byte(srca,val); ! 4541: }}}}} ! 4542: void op_58e0(UWORD opcode) ! 4543: { ! 4544: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4545: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 4546: { CPTR srca = regs.a[srcreg]; ! 4547: { int val = cctrue(8) ? 0xff : 0; ! 4548: put_byte(srca,val); ! 4549: }}}}} ! 4550: void op_58e8(UWORD opcode) ! 4551: { ! 4552: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4553: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 4554: { int val = cctrue(8) ? 0xff : 0; ! 4555: put_byte(srca,val); ! 4556: }}}} ! 4557: void op_58f0(UWORD opcode) ! 4558: { ! 4559: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 4560: {{ CPTR srca = regs.a[srcreg]; ! 4561: UWORD srcdp = nextiword(); ! 4562: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 4563: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 4564: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 4565: srca += srcdpr; ! 4566: { int val = cctrue(8) ? 0xff : 0; ! 4567: put_byte(srca,val); ! 4568: }}}}} ! 4569: void op_58f8(UWORD opcode) ! 4570: { ! 4571: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 4572: { int val = cctrue(8) ? 0xff : 0; ! 4573: put_byte(srca,val); ! 4574: }}}} ! 4575: void op_58f9(UWORD opcode) ! 4576: { ! 4577: {{ CPTR srca = nextilong(); ! 4578: { int val = cctrue(8) ? 0xff : 0; ! 4579: put_byte(srca,val); ! 4580: }}}} ! 4581: void op_5900(UWORD opcode) ! 4582: { ! 4583: ULONG srcreg = 4; ! 4584: ULONG dstreg = (opcode & 7) >> 0; ! 4585: {{ ULONG src = srcreg; ! 4586: { BYTE dst = regs.d[dstreg]; ! 4587: { ULONG newv = dst - src; ! 4588: { bool flgs = ((BYTE)(src)) < 0; ! 4589: bool flgo = ((BYTE)(dst)) < 0; ! 4590: bool flgn = ((BYTE)(newv)) < 0; ! 4591: regs.z = ((BYTE)(newv)) == 0; ! 4592: regs.v = (flgs != flgo) && (flgn != flgo); ! 4593: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 4594: regs.n = flgn != 0; ! 4595: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 4596: }}}}}} ! 4597: void op_5910(UWORD opcode) ! 4598: { ! 4599: ULONG srcreg = 4; ! 4600: ULONG dstreg = (opcode & 7) >> 0; ! 4601: {{ ULONG src = srcreg; ! 4602: { CPTR dsta = regs.a[dstreg]; ! 4603: BYTE dst = get_byte(dsta); ! 4604: { ULONG newv = dst - src; ! 4605: { bool flgs = ((BYTE)(src)) < 0; ! 4606: bool flgo = ((BYTE)(dst)) < 0; ! 4607: bool flgn = ((BYTE)(newv)) < 0; ! 4608: regs.z = ((BYTE)(newv)) == 0; ! 4609: regs.v = (flgs != flgo) && (flgn != flgo); ! 4610: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 4611: regs.n = flgn != 0; ! 4612: put_byte(dsta,newv); ! 4613: }}}}}} ! 4614: void op_5918(UWORD opcode) ! 4615: { ! 4616: ULONG srcreg = 4; ! 4617: ULONG dstreg = (opcode & 7) >> 0; ! 4618: {{ ULONG src = srcreg; ! 4619: { CPTR dsta = regs.a[dstreg]; ! 4620: BYTE dst = get_byte(dsta); ! 4621: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 4622: { ULONG newv = dst - src; ! 4623: { bool flgs = ((BYTE)(src)) < 0; ! 4624: bool flgo = ((BYTE)(dst)) < 0; ! 4625: bool flgn = ((BYTE)(newv)) < 0; ! 4626: regs.z = ((BYTE)(newv)) == 0; ! 4627: regs.v = (flgs != flgo) && (flgn != flgo); ! 4628: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 4629: regs.n = flgn != 0; ! 4630: put_byte(dsta,newv); ! 4631: }}}}}}} ! 4632: void op_5920(UWORD opcode) ! 4633: { ! 4634: ULONG srcreg = 4; ! 4635: ULONG dstreg = (opcode & 7) >> 0; ! 4636: {{ ULONG src = srcreg; ! 4637: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 4638: { CPTR dsta = regs.a[dstreg]; ! 4639: BYTE dst = get_byte(dsta); ! 4640: { ULONG newv = dst - src; ! 4641: { bool flgs = ((BYTE)(src)) < 0; ! 4642: bool flgo = ((BYTE)(dst)) < 0; ! 4643: bool flgn = ((BYTE)(newv)) < 0; ! 4644: regs.z = ((BYTE)(newv)) == 0; ! 4645: regs.v = (flgs != flgo) && (flgn != flgo); ! 4646: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 4647: regs.n = flgn != 0; ! 4648: put_byte(dsta,newv); ! 4649: }}}}}}} ! 4650: void op_5928(UWORD opcode) ! 4651: { ! 4652: ULONG srcreg = 4; ! 4653: ULONG dstreg = (opcode & 7) >> 0; ! 4654: {{ ULONG src = srcreg; ! 4655: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 4656: BYTE dst = get_byte(dsta); ! 4657: { ULONG newv = dst - src; ! 4658: { bool flgs = ((BYTE)(src)) < 0; ! 4659: bool flgo = ((BYTE)(dst)) < 0; ! 4660: bool flgn = ((BYTE)(newv)) < 0; ! 4661: regs.z = ((BYTE)(newv)) == 0; ! 4662: regs.v = (flgs != flgo) && (flgn != flgo); ! 4663: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 4664: regs.n = flgn != 0; ! 4665: put_byte(dsta,newv); ! 4666: }}}}}} ! 4667: void op_5930(UWORD opcode) ! 4668: { ! 4669: ULONG srcreg = 4; ! 4670: ULONG dstreg = (opcode & 7) >> 0; ! 4671: {{ ULONG src = srcreg; ! 4672: { CPTR dsta = regs.a[dstreg]; ! 4673: UWORD dstdp = nextiword(); ! 4674: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 4675: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 4676: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 4677: dsta += dstdpr; ! 4678: { BYTE dst = get_byte(dsta); ! 4679: { ULONG newv = dst - src; ! 4680: { bool flgs = ((BYTE)(src)) < 0; ! 4681: bool flgo = ((BYTE)(dst)) < 0; ! 4682: bool flgn = ((BYTE)(newv)) < 0; ! 4683: regs.z = ((BYTE)(newv)) == 0; ! 4684: regs.v = (flgs != flgo) && (flgn != flgo); ! 4685: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 4686: regs.n = flgn != 0; ! 4687: put_byte(dsta,newv); ! 4688: }}}}}}}} ! 4689: void op_5938(UWORD opcode) ! 4690: { ! 4691: ULONG srcreg = 4; ! 4692: {{ ULONG src = srcreg; ! 4693: { CPTR dsta = (LONG)(WORD)nextiword(); ! 4694: BYTE dst = get_byte(dsta); ! 4695: { ULONG newv = dst - src; ! 4696: { bool flgs = ((BYTE)(src)) < 0; ! 4697: bool flgo = ((BYTE)(dst)) < 0; ! 4698: bool flgn = ((BYTE)(newv)) < 0; ! 4699: regs.z = ((BYTE)(newv)) == 0; ! 4700: regs.v = (flgs != flgo) && (flgn != flgo); ! 4701: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 4702: regs.n = flgn != 0; ! 4703: put_byte(dsta,newv); ! 4704: }}}}}} ! 4705: void op_5939(UWORD opcode) ! 4706: { ! 4707: ULONG srcreg = 4; ! 4708: {{ ULONG src = srcreg; ! 4709: { CPTR dsta = nextilong(); ! 4710: BYTE dst = get_byte(dsta); ! 4711: { ULONG newv = dst - src; ! 4712: { bool flgs = ((BYTE)(src)) < 0; ! 4713: bool flgo = ((BYTE)(dst)) < 0; ! 4714: bool flgn = ((BYTE)(newv)) < 0; ! 4715: regs.z = ((BYTE)(newv)) == 0; ! 4716: regs.v = (flgs != flgo) && (flgn != flgo); ! 4717: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 4718: regs.n = flgn != 0; ! 4719: put_byte(dsta,newv); ! 4720: }}}}}} ! 4721: void op_5940(UWORD opcode) ! 4722: { ! 4723: ULONG srcreg = 4; ! 4724: ULONG dstreg = (opcode & 7) >> 0; ! 4725: {{ ULONG src = srcreg; ! 4726: { WORD dst = regs.d[dstreg]; ! 4727: { ULONG newv = dst - src; ! 4728: { bool flgs = ((WORD)(src)) < 0; ! 4729: bool flgo = ((WORD)(dst)) < 0; ! 4730: bool flgn = ((WORD)(newv)) < 0; ! 4731: regs.z = ((WORD)(newv)) == 0; ! 4732: regs.v = (flgs != flgo) && (flgn != flgo); ! 4733: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 4734: regs.n = flgn != 0; ! 4735: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 4736: }}}}}} ! 4737: void op_5948(UWORD opcode) ! 4738: { ! 4739: ULONG srcreg = 4; ! 4740: ULONG dstreg = (opcode & 7) >> 0; ! 4741: {{ ULONG src = srcreg; ! 4742: { LONG dst = regs.a[dstreg]; ! 4743: { ULONG newv = dst - src; ! 4744: regs.a[dstreg] = (newv); ! 4745: }}}}} ! 4746: void op_5950(UWORD opcode) ! 4747: { ! 4748: ULONG srcreg = 4; ! 4749: ULONG dstreg = (opcode & 7) >> 0; ! 4750: {{ ULONG src = srcreg; ! 4751: { CPTR dsta = regs.a[dstreg]; ! 4752: WORD dst = get_word(dsta); ! 4753: { ULONG newv = dst - src; ! 4754: { bool flgs = ((WORD)(src)) < 0; ! 4755: bool flgo = ((WORD)(dst)) < 0; ! 4756: bool flgn = ((WORD)(newv)) < 0; ! 4757: regs.z = ((WORD)(newv)) == 0; ! 4758: regs.v = (flgs != flgo) && (flgn != flgo); ! 4759: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 4760: regs.n = flgn != 0; ! 4761: put_word(dsta,newv); ! 4762: }}}}}} ! 4763: void op_5958(UWORD opcode) ! 4764: { ! 4765: ULONG srcreg = 4; ! 4766: ULONG dstreg = (opcode & 7) >> 0; ! 4767: {{ ULONG src = srcreg; ! 4768: { CPTR dsta = regs.a[dstreg]; ! 4769: WORD dst = get_word(dsta); ! 4770: { regs.a[dstreg] += 2; ! 4771: { ULONG newv = dst - src; ! 4772: { bool flgs = ((WORD)(src)) < 0; ! 4773: bool flgo = ((WORD)(dst)) < 0; ! 4774: bool flgn = ((WORD)(newv)) < 0; ! 4775: regs.z = ((WORD)(newv)) == 0; ! 4776: regs.v = (flgs != flgo) && (flgn != flgo); ! 4777: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 4778: regs.n = flgn != 0; ! 4779: put_word(dsta,newv); ! 4780: }}}}}}} ! 4781: void op_5960(UWORD opcode) ! 4782: { ! 4783: ULONG srcreg = 4; ! 4784: ULONG dstreg = (opcode & 7) >> 0; ! 4785: {{ ULONG src = srcreg; ! 4786: { regs.a[dstreg] -= 2; ! 4787: { CPTR dsta = regs.a[dstreg]; ! 4788: WORD dst = get_word(dsta); ! 4789: { ULONG newv = dst - src; ! 4790: { bool flgs = ((WORD)(src)) < 0; ! 4791: bool flgo = ((WORD)(dst)) < 0; ! 4792: bool flgn = ((WORD)(newv)) < 0; ! 4793: regs.z = ((WORD)(newv)) == 0; ! 4794: regs.v = (flgs != flgo) && (flgn != flgo); ! 4795: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 4796: regs.n = flgn != 0; ! 4797: put_word(dsta,newv); ! 4798: }}}}}}} ! 4799: void op_5968(UWORD opcode) ! 4800: { ! 4801: ULONG srcreg = 4; ! 4802: ULONG dstreg = (opcode & 7) >> 0; ! 4803: {{ ULONG src = srcreg; ! 4804: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 4805: WORD dst = get_word(dsta); ! 4806: { ULONG newv = dst - src; ! 4807: { bool flgs = ((WORD)(src)) < 0; ! 4808: bool flgo = ((WORD)(dst)) < 0; ! 4809: bool flgn = ((WORD)(newv)) < 0; ! 4810: regs.z = ((WORD)(newv)) == 0; ! 4811: regs.v = (flgs != flgo) && (flgn != flgo); ! 4812: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 4813: regs.n = flgn != 0; ! 4814: put_word(dsta,newv); ! 4815: }}}}}} ! 4816: void op_5970(UWORD opcode) ! 4817: { ! 4818: ULONG srcreg = 4; ! 4819: ULONG dstreg = (opcode & 7) >> 0; ! 4820: {{ ULONG src = srcreg; ! 4821: { CPTR dsta = regs.a[dstreg]; ! 4822: UWORD dstdp = nextiword(); ! 4823: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 4824: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 4825: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 4826: dsta += dstdpr; ! 4827: { WORD dst = get_word(dsta); ! 4828: { ULONG newv = dst - src; ! 4829: { bool flgs = ((WORD)(src)) < 0; ! 4830: bool flgo = ((WORD)(dst)) < 0; ! 4831: bool flgn = ((WORD)(newv)) < 0; ! 4832: regs.z = ((WORD)(newv)) == 0; ! 4833: regs.v = (flgs != flgo) && (flgn != flgo); ! 4834: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 4835: regs.n = flgn != 0; ! 4836: put_word(dsta,newv); ! 4837: }}}}}}}} ! 4838: void op_5978(UWORD opcode) ! 4839: { ! 4840: ULONG srcreg = 4; ! 4841: {{ ULONG src = srcreg; ! 4842: { CPTR dsta = (LONG)(WORD)nextiword(); ! 4843: WORD dst = get_word(dsta); ! 4844: { ULONG newv = dst - src; ! 4845: { bool flgs = ((WORD)(src)) < 0; ! 4846: bool flgo = ((WORD)(dst)) < 0; ! 4847: bool flgn = ((WORD)(newv)) < 0; ! 4848: regs.z = ((WORD)(newv)) == 0; ! 4849: regs.v = (flgs != flgo) && (flgn != flgo); ! 4850: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 4851: regs.n = flgn != 0; ! 4852: put_word(dsta,newv); ! 4853: }}}}}} ! 4854: void op_5979(UWORD opcode) ! 4855: { ! 4856: ULONG srcreg = 4; ! 4857: {{ ULONG src = srcreg; ! 4858: { CPTR dsta = nextilong(); ! 4859: WORD dst = get_word(dsta); ! 4860: { ULONG newv = dst - src; ! 4861: { bool flgs = ((WORD)(src)) < 0; ! 4862: bool flgo = ((WORD)(dst)) < 0; ! 4863: bool flgn = ((WORD)(newv)) < 0; ! 4864: regs.z = ((WORD)(newv)) == 0; ! 4865: regs.v = (flgs != flgo) && (flgn != flgo); ! 4866: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 4867: regs.n = flgn != 0; ! 4868: put_word(dsta,newv); ! 4869: }}}}}} ! 4870: void op_5980(UWORD opcode) ! 4871: { ! 4872: ULONG srcreg = 4; ! 4873: ULONG dstreg = (opcode & 7) >> 0; ! 4874: {{ ULONG src = srcreg; ! 4875: { LONG dst = regs.d[dstreg]; ! 4876: { ULONG newv = dst - src; ! 4877: { bool flgs = ((LONG)(src)) < 0; ! 4878: bool flgo = ((LONG)(dst)) < 0; ! 4879: bool flgn = ((LONG)(newv)) < 0; ! 4880: regs.z = ((LONG)(newv)) == 0; ! 4881: regs.v = (flgs != flgo) && (flgn != flgo); ! 4882: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 4883: regs.n = flgn != 0; ! 4884: regs.d[dstreg] = (newv); ! 4885: }}}}}} ! 4886: void op_5988(UWORD opcode) ! 4887: { ! 4888: ULONG srcreg = 4; ! 4889: ULONG dstreg = (opcode & 7) >> 0; ! 4890: {{ ULONG src = srcreg; ! 4891: { LONG dst = regs.a[dstreg]; ! 4892: { ULONG newv = dst - src; ! 4893: regs.a[dstreg] = (newv); ! 4894: }}}}} ! 4895: void op_5990(UWORD opcode) ! 4896: { ! 4897: ULONG srcreg = 4; ! 4898: ULONG dstreg = (opcode & 7) >> 0; ! 4899: {{ ULONG src = srcreg; ! 4900: { CPTR dsta = regs.a[dstreg]; ! 4901: LONG dst = get_long(dsta); ! 4902: { ULONG newv = dst - src; ! 4903: { bool flgs = ((LONG)(src)) < 0; ! 4904: bool flgo = ((LONG)(dst)) < 0; ! 4905: bool flgn = ((LONG)(newv)) < 0; ! 4906: regs.z = ((LONG)(newv)) == 0; ! 4907: regs.v = (flgs != flgo) && (flgn != flgo); ! 4908: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 4909: regs.n = flgn != 0; ! 4910: put_long(dsta,newv); ! 4911: }}}}}} ! 4912: void op_5998(UWORD opcode) ! 4913: { ! 4914: ULONG srcreg = 4; ! 4915: ULONG dstreg = (opcode & 7) >> 0; ! 4916: {{ ULONG src = srcreg; ! 4917: { CPTR dsta = regs.a[dstreg]; ! 4918: LONG dst = get_long(dsta); ! 4919: { regs.a[dstreg] += 4; ! 4920: { ULONG newv = dst - src; ! 4921: { bool flgs = ((LONG)(src)) < 0; ! 4922: bool flgo = ((LONG)(dst)) < 0; ! 4923: bool flgn = ((LONG)(newv)) < 0; ! 4924: regs.z = ((LONG)(newv)) == 0; ! 4925: regs.v = (flgs != flgo) && (flgn != flgo); ! 4926: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 4927: regs.n = flgn != 0; ! 4928: put_long(dsta,newv); ! 4929: }}}}}}} ! 4930: void op_59a0(UWORD opcode) ! 4931: { ! 4932: ULONG srcreg = 4; ! 4933: ULONG dstreg = (opcode & 7) >> 0; ! 4934: {{ ULONG src = srcreg; ! 4935: { regs.a[dstreg] -= 4; ! 4936: { CPTR dsta = regs.a[dstreg]; ! 4937: LONG dst = get_long(dsta); ! 4938: { ULONG newv = dst - src; ! 4939: { bool flgs = ((LONG)(src)) < 0; ! 4940: bool flgo = ((LONG)(dst)) < 0; ! 4941: bool flgn = ((LONG)(newv)) < 0; ! 4942: regs.z = ((LONG)(newv)) == 0; ! 4943: regs.v = (flgs != flgo) && (flgn != flgo); ! 4944: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 4945: regs.n = flgn != 0; ! 4946: put_long(dsta,newv); ! 4947: }}}}}}} ! 4948: void op_59a8(UWORD opcode) ! 4949: { ! 4950: ULONG srcreg = 4; ! 4951: ULONG dstreg = (opcode & 7) >> 0; ! 4952: {{ ULONG src = srcreg; ! 4953: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 4954: LONG dst = get_long(dsta); ! 4955: { ULONG newv = dst - src; ! 4956: { bool flgs = ((LONG)(src)) < 0; ! 4957: bool flgo = ((LONG)(dst)) < 0; ! 4958: bool flgn = ((LONG)(newv)) < 0; ! 4959: regs.z = ((LONG)(newv)) == 0; ! 4960: regs.v = (flgs != flgo) && (flgn != flgo); ! 4961: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 4962: regs.n = flgn != 0; ! 4963: put_long(dsta,newv); ! 4964: }}}}}} ! 4965: void op_59b0(UWORD opcode) ! 4966: { ! 4967: ULONG srcreg = 4; ! 4968: ULONG dstreg = (opcode & 7) >> 0; ! 4969: {{ ULONG src = srcreg; ! 4970: { CPTR dsta = regs.a[dstreg]; ! 4971: UWORD dstdp = nextiword(); ! 4972: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 4973: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 4974: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 4975: dsta += dstdpr; ! 4976: { LONG dst = get_long(dsta); ! 4977: { ULONG newv = dst - src; ! 4978: { bool flgs = ((LONG)(src)) < 0; ! 4979: bool flgo = ((LONG)(dst)) < 0; ! 4980: bool flgn = ((LONG)(newv)) < 0; ! 4981: regs.z = ((LONG)(newv)) == 0; ! 4982: regs.v = (flgs != flgo) && (flgn != flgo); ! 4983: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 4984: regs.n = flgn != 0; ! 4985: put_long(dsta,newv); ! 4986: }}}}}}}} ! 4987: void op_59b8(UWORD opcode) ! 4988: { ! 4989: ULONG srcreg = 4; ! 4990: {{ ULONG src = srcreg; ! 4991: { CPTR dsta = (LONG)(WORD)nextiword(); ! 4992: LONG dst = get_long(dsta); ! 4993: { ULONG newv = dst - src; ! 4994: { bool flgs = ((LONG)(src)) < 0; ! 4995: bool flgo = ((LONG)(dst)) < 0; ! 4996: bool flgn = ((LONG)(newv)) < 0; ! 4997: regs.z = ((LONG)(newv)) == 0; ! 4998: regs.v = (flgs != flgo) && (flgn != flgo); ! 4999: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 5000: regs.n = flgn != 0; ! 5001: put_long(dsta,newv); ! 5002: }}}}}} ! 5003: void op_59b9(UWORD opcode) ! 5004: { ! 5005: ULONG srcreg = 4; ! 5006: {{ ULONG src = srcreg; ! 5007: { CPTR dsta = nextilong(); ! 5008: LONG dst = get_long(dsta); ! 5009: { ULONG newv = dst - src; ! 5010: { bool flgs = ((LONG)(src)) < 0; ! 5011: bool flgo = ((LONG)(dst)) < 0; ! 5012: bool flgn = ((LONG)(newv)) < 0; ! 5013: regs.z = ((LONG)(newv)) == 0; ! 5014: regs.v = (flgs != flgo) && (flgn != flgo); ! 5015: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 5016: regs.n = flgn != 0; ! 5017: put_long(dsta,newv); ! 5018: }}}}}} ! 5019: void op_59c0(UWORD opcode) ! 5020: { ! 5021: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5022: {{{ int val = cctrue(9) ? 0xff : 0; ! 5023: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 5024: }}}} ! 5025: void op_59c8(UWORD opcode) ! 5026: { ! 5027: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5028: {{ WORD src = regs.d[srcreg]; ! 5029: { WORD offs = nextiword(); ! 5030: if (!cctrue(9)) { ! 5031: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 5032: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 5033: } ! 5034: }}}} ! 5035: void op_59d0(UWORD opcode) ! 5036: { ! 5037: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5038: {{ CPTR srca = regs.a[srcreg]; ! 5039: { int val = cctrue(9) ? 0xff : 0; ! 5040: put_byte(srca,val); ! 5041: }}}} ! 5042: void op_59d8(UWORD opcode) ! 5043: { ! 5044: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5045: {{ CPTR srca = regs.a[srcreg]; ! 5046: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 5047: { int val = cctrue(9) ? 0xff : 0; ! 5048: put_byte(srca,val); ! 5049: }}}}} ! 5050: void op_59e0(UWORD opcode) ! 5051: { ! 5052: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5053: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 5054: { CPTR srca = regs.a[srcreg]; ! 5055: { int val = cctrue(9) ? 0xff : 0; ! 5056: put_byte(srca,val); ! 5057: }}}}} ! 5058: void op_59e8(UWORD opcode) ! 5059: { ! 5060: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5061: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 5062: { int val = cctrue(9) ? 0xff : 0; ! 5063: put_byte(srca,val); ! 5064: }}}} ! 5065: void op_59f0(UWORD opcode) ! 5066: { ! 5067: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5068: {{ CPTR srca = regs.a[srcreg]; ! 5069: UWORD srcdp = nextiword(); ! 5070: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 5071: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 5072: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 5073: srca += srcdpr; ! 5074: { int val = cctrue(9) ? 0xff : 0; ! 5075: put_byte(srca,val); ! 5076: }}}}} ! 5077: void op_59f8(UWORD opcode) ! 5078: { ! 5079: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 5080: { int val = cctrue(9) ? 0xff : 0; ! 5081: put_byte(srca,val); ! 5082: }}}} ! 5083: void op_59f9(UWORD opcode) ! 5084: { ! 5085: {{ CPTR srca = nextilong(); ! 5086: { int val = cctrue(9) ? 0xff : 0; ! 5087: put_byte(srca,val); ! 5088: }}}} ! 5089: void op_5a00(UWORD opcode) ! 5090: { ! 5091: ULONG srcreg = 5; ! 5092: ULONG dstreg = (opcode & 7) >> 0; ! 5093: {{ ULONG src = srcreg; ! 5094: { BYTE dst = regs.d[dstreg]; ! 5095: { ULONG newv = dst + src; ! 5096: { bool flgs = ((BYTE)(src)) < 0; ! 5097: bool flgo = ((BYTE)(dst)) < 0; ! 5098: bool flgn = ((BYTE)(newv)) < 0; ! 5099: regs.z = ((BYTE)(newv)) == 0; ! 5100: regs.v = (flgs == flgo) && (flgn != flgo); ! 5101: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 5102: regs.n = flgn != 0; ! 5103: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 5104: }}}}}} ! 5105: void op_5a10(UWORD opcode) ! 5106: { ! 5107: ULONG srcreg = 5; ! 5108: ULONG dstreg = (opcode & 7) >> 0; ! 5109: {{ ULONG src = srcreg; ! 5110: { CPTR dsta = regs.a[dstreg]; ! 5111: BYTE dst = get_byte(dsta); ! 5112: { ULONG newv = dst + src; ! 5113: { bool flgs = ((BYTE)(src)) < 0; ! 5114: bool flgo = ((BYTE)(dst)) < 0; ! 5115: bool flgn = ((BYTE)(newv)) < 0; ! 5116: regs.z = ((BYTE)(newv)) == 0; ! 5117: regs.v = (flgs == flgo) && (flgn != flgo); ! 5118: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 5119: regs.n = flgn != 0; ! 5120: put_byte(dsta,newv); ! 5121: }}}}}} ! 5122: void op_5a18(UWORD opcode) ! 5123: { ! 5124: ULONG srcreg = 5; ! 5125: ULONG dstreg = (opcode & 7) >> 0; ! 5126: {{ ULONG src = srcreg; ! 5127: { CPTR dsta = regs.a[dstreg]; ! 5128: BYTE dst = get_byte(dsta); ! 5129: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 5130: { ULONG newv = dst + src; ! 5131: { bool flgs = ((BYTE)(src)) < 0; ! 5132: bool flgo = ((BYTE)(dst)) < 0; ! 5133: bool flgn = ((BYTE)(newv)) < 0; ! 5134: regs.z = ((BYTE)(newv)) == 0; ! 5135: regs.v = (flgs == flgo) && (flgn != flgo); ! 5136: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 5137: regs.n = flgn != 0; ! 5138: put_byte(dsta,newv); ! 5139: }}}}}}} ! 5140: void op_5a20(UWORD opcode) ! 5141: { ! 5142: ULONG srcreg = 5; ! 5143: ULONG dstreg = (opcode & 7) >> 0; ! 5144: {{ ULONG src = srcreg; ! 5145: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 5146: { CPTR dsta = regs.a[dstreg]; ! 5147: BYTE dst = get_byte(dsta); ! 5148: { ULONG newv = dst + src; ! 5149: { bool flgs = ((BYTE)(src)) < 0; ! 5150: bool flgo = ((BYTE)(dst)) < 0; ! 5151: bool flgn = ((BYTE)(newv)) < 0; ! 5152: regs.z = ((BYTE)(newv)) == 0; ! 5153: regs.v = (flgs == flgo) && (flgn != flgo); ! 5154: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 5155: regs.n = flgn != 0; ! 5156: put_byte(dsta,newv); ! 5157: }}}}}}} ! 5158: void op_5a28(UWORD opcode) ! 5159: { ! 5160: ULONG srcreg = 5; ! 5161: ULONG dstreg = (opcode & 7) >> 0; ! 5162: {{ ULONG src = srcreg; ! 5163: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 5164: BYTE dst = get_byte(dsta); ! 5165: { ULONG newv = dst + src; ! 5166: { bool flgs = ((BYTE)(src)) < 0; ! 5167: bool flgo = ((BYTE)(dst)) < 0; ! 5168: bool flgn = ((BYTE)(newv)) < 0; ! 5169: regs.z = ((BYTE)(newv)) == 0; ! 5170: regs.v = (flgs == flgo) && (flgn != flgo); ! 5171: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 5172: regs.n = flgn != 0; ! 5173: put_byte(dsta,newv); ! 5174: }}}}}} ! 5175: void op_5a30(UWORD opcode) ! 5176: { ! 5177: ULONG srcreg = 5; ! 5178: ULONG dstreg = (opcode & 7) >> 0; ! 5179: {{ ULONG src = srcreg; ! 5180: { CPTR dsta = regs.a[dstreg]; ! 5181: UWORD dstdp = nextiword(); ! 5182: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 5183: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 5184: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 5185: dsta += dstdpr; ! 5186: { BYTE dst = get_byte(dsta); ! 5187: { ULONG newv = dst + src; ! 5188: { bool flgs = ((BYTE)(src)) < 0; ! 5189: bool flgo = ((BYTE)(dst)) < 0; ! 5190: bool flgn = ((BYTE)(newv)) < 0; ! 5191: regs.z = ((BYTE)(newv)) == 0; ! 5192: regs.v = (flgs == flgo) && (flgn != flgo); ! 5193: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 5194: regs.n = flgn != 0; ! 5195: put_byte(dsta,newv); ! 5196: }}}}}}}} ! 5197: void op_5a38(UWORD opcode) ! 5198: { ! 5199: ULONG srcreg = 5; ! 5200: {{ ULONG src = srcreg; ! 5201: { CPTR dsta = (LONG)(WORD)nextiword(); ! 5202: BYTE dst = get_byte(dsta); ! 5203: { ULONG newv = dst + src; ! 5204: { bool flgs = ((BYTE)(src)) < 0; ! 5205: bool flgo = ((BYTE)(dst)) < 0; ! 5206: bool flgn = ((BYTE)(newv)) < 0; ! 5207: regs.z = ((BYTE)(newv)) == 0; ! 5208: regs.v = (flgs == flgo) && (flgn != flgo); ! 5209: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 5210: regs.n = flgn != 0; ! 5211: put_byte(dsta,newv); ! 5212: }}}}}} ! 5213: void op_5a39(UWORD opcode) ! 5214: { ! 5215: ULONG srcreg = 5; ! 5216: {{ ULONG src = srcreg; ! 5217: { CPTR dsta = nextilong(); ! 5218: BYTE dst = get_byte(dsta); ! 5219: { ULONG newv = dst + src; ! 5220: { bool flgs = ((BYTE)(src)) < 0; ! 5221: bool flgo = ((BYTE)(dst)) < 0; ! 5222: bool flgn = ((BYTE)(newv)) < 0; ! 5223: regs.z = ((BYTE)(newv)) == 0; ! 5224: regs.v = (flgs == flgo) && (flgn != flgo); ! 5225: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 5226: regs.n = flgn != 0; ! 5227: put_byte(dsta,newv); ! 5228: }}}}}} ! 5229: void op_5a40(UWORD opcode) ! 5230: { ! 5231: ULONG srcreg = 5; ! 5232: ULONG dstreg = (opcode & 7) >> 0; ! 5233: {{ ULONG src = srcreg; ! 5234: { WORD dst = regs.d[dstreg]; ! 5235: { ULONG newv = dst + src; ! 5236: { bool flgs = ((WORD)(src)) < 0; ! 5237: bool flgo = ((WORD)(dst)) < 0; ! 5238: bool flgn = ((WORD)(newv)) < 0; ! 5239: regs.z = ((WORD)(newv)) == 0; ! 5240: regs.v = (flgs == flgo) && (flgn != flgo); ! 5241: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 5242: regs.n = flgn != 0; ! 5243: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 5244: }}}}}} ! 5245: void op_5a48(UWORD opcode) ! 5246: { ! 5247: ULONG srcreg = 5; ! 5248: ULONG dstreg = (opcode & 7) >> 0; ! 5249: {{ ULONG src = srcreg; ! 5250: { LONG dst = regs.a[dstreg]; ! 5251: { ULONG newv = dst + src; ! 5252: regs.a[dstreg] = (newv); ! 5253: }}}}} ! 5254: void op_5a50(UWORD opcode) ! 5255: { ! 5256: ULONG srcreg = 5; ! 5257: ULONG dstreg = (opcode & 7) >> 0; ! 5258: {{ ULONG src = srcreg; ! 5259: { CPTR dsta = regs.a[dstreg]; ! 5260: WORD dst = get_word(dsta); ! 5261: { ULONG newv = dst + src; ! 5262: { bool flgs = ((WORD)(src)) < 0; ! 5263: bool flgo = ((WORD)(dst)) < 0; ! 5264: bool flgn = ((WORD)(newv)) < 0; ! 5265: regs.z = ((WORD)(newv)) == 0; ! 5266: regs.v = (flgs == flgo) && (flgn != flgo); ! 5267: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 5268: regs.n = flgn != 0; ! 5269: put_word(dsta,newv); ! 5270: }}}}}} ! 5271: void op_5a58(UWORD opcode) ! 5272: { ! 5273: ULONG srcreg = 5; ! 5274: ULONG dstreg = (opcode & 7) >> 0; ! 5275: {{ ULONG src = srcreg; ! 5276: { CPTR dsta = regs.a[dstreg]; ! 5277: WORD dst = get_word(dsta); ! 5278: { regs.a[dstreg] += 2; ! 5279: { ULONG newv = dst + src; ! 5280: { bool flgs = ((WORD)(src)) < 0; ! 5281: bool flgo = ((WORD)(dst)) < 0; ! 5282: bool flgn = ((WORD)(newv)) < 0; ! 5283: regs.z = ((WORD)(newv)) == 0; ! 5284: regs.v = (flgs == flgo) && (flgn != flgo); ! 5285: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 5286: regs.n = flgn != 0; ! 5287: put_word(dsta,newv); ! 5288: }}}}}}} ! 5289: void op_5a60(UWORD opcode) ! 5290: { ! 5291: ULONG srcreg = 5; ! 5292: ULONG dstreg = (opcode & 7) >> 0; ! 5293: {{ ULONG src = srcreg; ! 5294: { regs.a[dstreg] -= 2; ! 5295: { CPTR dsta = regs.a[dstreg]; ! 5296: WORD dst = get_word(dsta); ! 5297: { ULONG newv = dst + src; ! 5298: { bool flgs = ((WORD)(src)) < 0; ! 5299: bool flgo = ((WORD)(dst)) < 0; ! 5300: bool flgn = ((WORD)(newv)) < 0; ! 5301: regs.z = ((WORD)(newv)) == 0; ! 5302: regs.v = (flgs == flgo) && (flgn != flgo); ! 5303: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 5304: regs.n = flgn != 0; ! 5305: put_word(dsta,newv); ! 5306: }}}}}}} ! 5307: void op_5a68(UWORD opcode) ! 5308: { ! 5309: ULONG srcreg = 5; ! 5310: ULONG dstreg = (opcode & 7) >> 0; ! 5311: {{ ULONG src = srcreg; ! 5312: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 5313: WORD dst = get_word(dsta); ! 5314: { ULONG newv = dst + src; ! 5315: { bool flgs = ((WORD)(src)) < 0; ! 5316: bool flgo = ((WORD)(dst)) < 0; ! 5317: bool flgn = ((WORD)(newv)) < 0; ! 5318: regs.z = ((WORD)(newv)) == 0; ! 5319: regs.v = (flgs == flgo) && (flgn != flgo); ! 5320: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 5321: regs.n = flgn != 0; ! 5322: put_word(dsta,newv); ! 5323: }}}}}} ! 5324: void op_5a70(UWORD opcode) ! 5325: { ! 5326: ULONG srcreg = 5; ! 5327: ULONG dstreg = (opcode & 7) >> 0; ! 5328: {{ ULONG src = srcreg; ! 5329: { CPTR dsta = regs.a[dstreg]; ! 5330: UWORD dstdp = nextiword(); ! 5331: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 5332: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 5333: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 5334: dsta += dstdpr; ! 5335: { WORD dst = get_word(dsta); ! 5336: { ULONG newv = dst + src; ! 5337: { bool flgs = ((WORD)(src)) < 0; ! 5338: bool flgo = ((WORD)(dst)) < 0; ! 5339: bool flgn = ((WORD)(newv)) < 0; ! 5340: regs.z = ((WORD)(newv)) == 0; ! 5341: regs.v = (flgs == flgo) && (flgn != flgo); ! 5342: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 5343: regs.n = flgn != 0; ! 5344: put_word(dsta,newv); ! 5345: }}}}}}}} ! 5346: void op_5a78(UWORD opcode) ! 5347: { ! 5348: ULONG srcreg = 5; ! 5349: {{ ULONG src = srcreg; ! 5350: { CPTR dsta = (LONG)(WORD)nextiword(); ! 5351: WORD dst = get_word(dsta); ! 5352: { ULONG newv = dst + src; ! 5353: { bool flgs = ((WORD)(src)) < 0; ! 5354: bool flgo = ((WORD)(dst)) < 0; ! 5355: bool flgn = ((WORD)(newv)) < 0; ! 5356: regs.z = ((WORD)(newv)) == 0; ! 5357: regs.v = (flgs == flgo) && (flgn != flgo); ! 5358: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 5359: regs.n = flgn != 0; ! 5360: put_word(dsta,newv); ! 5361: }}}}}} ! 5362: void op_5a79(UWORD opcode) ! 5363: { ! 5364: ULONG srcreg = 5; ! 5365: {{ ULONG src = srcreg; ! 5366: { CPTR dsta = nextilong(); ! 5367: WORD dst = get_word(dsta); ! 5368: { ULONG newv = dst + src; ! 5369: { bool flgs = ((WORD)(src)) < 0; ! 5370: bool flgo = ((WORD)(dst)) < 0; ! 5371: bool flgn = ((WORD)(newv)) < 0; ! 5372: regs.z = ((WORD)(newv)) == 0; ! 5373: regs.v = (flgs == flgo) && (flgn != flgo); ! 5374: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 5375: regs.n = flgn != 0; ! 5376: put_word(dsta,newv); ! 5377: }}}}}} ! 5378: void op_5a80(UWORD opcode) ! 5379: { ! 5380: ULONG srcreg = 5; ! 5381: ULONG dstreg = (opcode & 7) >> 0; ! 5382: {{ ULONG src = srcreg; ! 5383: { LONG dst = regs.d[dstreg]; ! 5384: { ULONG newv = dst + src; ! 5385: { bool flgs = ((LONG)(src)) < 0; ! 5386: bool flgo = ((LONG)(dst)) < 0; ! 5387: bool flgn = ((LONG)(newv)) < 0; ! 5388: regs.z = ((LONG)(newv)) == 0; ! 5389: regs.v = (flgs == flgo) && (flgn != flgo); ! 5390: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 5391: regs.n = flgn != 0; ! 5392: regs.d[dstreg] = (newv); ! 5393: }}}}}} ! 5394: void op_5a88(UWORD opcode) ! 5395: { ! 5396: ULONG srcreg = 5; ! 5397: ULONG dstreg = (opcode & 7) >> 0; ! 5398: {{ ULONG src = srcreg; ! 5399: { LONG dst = regs.a[dstreg]; ! 5400: { ULONG newv = dst + src; ! 5401: regs.a[dstreg] = (newv); ! 5402: }}}}} ! 5403: void op_5a90(UWORD opcode) ! 5404: { ! 5405: ULONG srcreg = 5; ! 5406: ULONG dstreg = (opcode & 7) >> 0; ! 5407: {{ ULONG src = srcreg; ! 5408: { CPTR dsta = regs.a[dstreg]; ! 5409: LONG dst = get_long(dsta); ! 5410: { ULONG newv = dst + src; ! 5411: { bool flgs = ((LONG)(src)) < 0; ! 5412: bool flgo = ((LONG)(dst)) < 0; ! 5413: bool flgn = ((LONG)(newv)) < 0; ! 5414: regs.z = ((LONG)(newv)) == 0; ! 5415: regs.v = (flgs == flgo) && (flgn != flgo); ! 5416: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 5417: regs.n = flgn != 0; ! 5418: put_long(dsta,newv); ! 5419: }}}}}} ! 5420: void op_5a98(UWORD opcode) ! 5421: { ! 5422: ULONG srcreg = 5; ! 5423: ULONG dstreg = (opcode & 7) >> 0; ! 5424: {{ ULONG src = srcreg; ! 5425: { CPTR dsta = regs.a[dstreg]; ! 5426: LONG dst = get_long(dsta); ! 5427: { regs.a[dstreg] += 4; ! 5428: { ULONG newv = dst + src; ! 5429: { bool flgs = ((LONG)(src)) < 0; ! 5430: bool flgo = ((LONG)(dst)) < 0; ! 5431: bool flgn = ((LONG)(newv)) < 0; ! 5432: regs.z = ((LONG)(newv)) == 0; ! 5433: regs.v = (flgs == flgo) && (flgn != flgo); ! 5434: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 5435: regs.n = flgn != 0; ! 5436: put_long(dsta,newv); ! 5437: }}}}}}} ! 5438: void op_5aa0(UWORD opcode) ! 5439: { ! 5440: ULONG srcreg = 5; ! 5441: ULONG dstreg = (opcode & 7) >> 0; ! 5442: {{ ULONG src = srcreg; ! 5443: { regs.a[dstreg] -= 4; ! 5444: { CPTR dsta = regs.a[dstreg]; ! 5445: LONG dst = get_long(dsta); ! 5446: { ULONG newv = dst + src; ! 5447: { bool flgs = ((LONG)(src)) < 0; ! 5448: bool flgo = ((LONG)(dst)) < 0; ! 5449: bool flgn = ((LONG)(newv)) < 0; ! 5450: regs.z = ((LONG)(newv)) == 0; ! 5451: regs.v = (flgs == flgo) && (flgn != flgo); ! 5452: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 5453: regs.n = flgn != 0; ! 5454: put_long(dsta,newv); ! 5455: }}}}}}} ! 5456: void op_5aa8(UWORD opcode) ! 5457: { ! 5458: ULONG srcreg = 5; ! 5459: ULONG dstreg = (opcode & 7) >> 0; ! 5460: {{ ULONG src = srcreg; ! 5461: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 5462: LONG dst = get_long(dsta); ! 5463: { ULONG newv = dst + src; ! 5464: { bool flgs = ((LONG)(src)) < 0; ! 5465: bool flgo = ((LONG)(dst)) < 0; ! 5466: bool flgn = ((LONG)(newv)) < 0; ! 5467: regs.z = ((LONG)(newv)) == 0; ! 5468: regs.v = (flgs == flgo) && (flgn != flgo); ! 5469: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 5470: regs.n = flgn != 0; ! 5471: put_long(dsta,newv); ! 5472: }}}}}} ! 5473: void op_5ab0(UWORD opcode) ! 5474: { ! 5475: ULONG srcreg = 5; ! 5476: ULONG dstreg = (opcode & 7) >> 0; ! 5477: {{ ULONG src = srcreg; ! 5478: { CPTR dsta = regs.a[dstreg]; ! 5479: UWORD dstdp = nextiword(); ! 5480: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 5481: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 5482: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 5483: dsta += dstdpr; ! 5484: { LONG dst = get_long(dsta); ! 5485: { ULONG newv = dst + src; ! 5486: { bool flgs = ((LONG)(src)) < 0; ! 5487: bool flgo = ((LONG)(dst)) < 0; ! 5488: bool flgn = ((LONG)(newv)) < 0; ! 5489: regs.z = ((LONG)(newv)) == 0; ! 5490: regs.v = (flgs == flgo) && (flgn != flgo); ! 5491: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 5492: regs.n = flgn != 0; ! 5493: put_long(dsta,newv); ! 5494: }}}}}}}} ! 5495: void op_5ab8(UWORD opcode) ! 5496: { ! 5497: ULONG srcreg = 5; ! 5498: {{ ULONG src = srcreg; ! 5499: { CPTR dsta = (LONG)(WORD)nextiword(); ! 5500: LONG dst = get_long(dsta); ! 5501: { ULONG newv = dst + src; ! 5502: { bool flgs = ((LONG)(src)) < 0; ! 5503: bool flgo = ((LONG)(dst)) < 0; ! 5504: bool flgn = ((LONG)(newv)) < 0; ! 5505: regs.z = ((LONG)(newv)) == 0; ! 5506: regs.v = (flgs == flgo) && (flgn != flgo); ! 5507: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 5508: regs.n = flgn != 0; ! 5509: put_long(dsta,newv); ! 5510: }}}}}} ! 5511: void op_5ab9(UWORD opcode) ! 5512: { ! 5513: ULONG srcreg = 5; ! 5514: {{ ULONG src = srcreg; ! 5515: { CPTR dsta = nextilong(); ! 5516: LONG dst = get_long(dsta); ! 5517: { ULONG newv = dst + src; ! 5518: { bool flgs = ((LONG)(src)) < 0; ! 5519: bool flgo = ((LONG)(dst)) < 0; ! 5520: bool flgn = ((LONG)(newv)) < 0; ! 5521: regs.z = ((LONG)(newv)) == 0; ! 5522: regs.v = (flgs == flgo) && (flgn != flgo); ! 5523: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 5524: regs.n = flgn != 0; ! 5525: put_long(dsta,newv); ! 5526: }}}}}} ! 5527: void op_5ac0(UWORD opcode) ! 5528: { ! 5529: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5530: {{{ int val = cctrue(10) ? 0xff : 0; ! 5531: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 5532: }}}} ! 5533: void op_5ac8(UWORD opcode) ! 5534: { ! 5535: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5536: {{ WORD src = regs.d[srcreg]; ! 5537: { WORD offs = nextiword(); ! 5538: if (!cctrue(10)) { ! 5539: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 5540: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 5541: } ! 5542: }}}} ! 5543: void op_5ad0(UWORD opcode) ! 5544: { ! 5545: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5546: {{ CPTR srca = regs.a[srcreg]; ! 5547: { int val = cctrue(10) ? 0xff : 0; ! 5548: put_byte(srca,val); ! 5549: }}}} ! 5550: void op_5ad8(UWORD opcode) ! 5551: { ! 5552: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5553: {{ CPTR srca = regs.a[srcreg]; ! 5554: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 5555: { int val = cctrue(10) ? 0xff : 0; ! 5556: put_byte(srca,val); ! 5557: }}}}} ! 5558: void op_5ae0(UWORD opcode) ! 5559: { ! 5560: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5561: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 5562: { CPTR srca = regs.a[srcreg]; ! 5563: { int val = cctrue(10) ? 0xff : 0; ! 5564: put_byte(srca,val); ! 5565: }}}}} ! 5566: void op_5ae8(UWORD opcode) ! 5567: { ! 5568: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5569: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 5570: { int val = cctrue(10) ? 0xff : 0; ! 5571: put_byte(srca,val); ! 5572: }}}} ! 5573: void op_5af0(UWORD opcode) ! 5574: { ! 5575: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 5576: {{ CPTR srca = regs.a[srcreg]; ! 5577: UWORD srcdp = nextiword(); ! 5578: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 5579: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 5580: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 5581: srca += srcdpr; ! 5582: { int val = cctrue(10) ? 0xff : 0; ! 5583: put_byte(srca,val); ! 5584: }}}}} ! 5585: void op_5af8(UWORD opcode) ! 5586: { ! 5587: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 5588: { int val = cctrue(10) ? 0xff : 0; ! 5589: put_byte(srca,val); ! 5590: }}}} ! 5591: void op_5af9(UWORD opcode) ! 5592: { ! 5593: {{ CPTR srca = nextilong(); ! 5594: { int val = cctrue(10) ? 0xff : 0; ! 5595: put_byte(srca,val); ! 5596: }}}} ! 5597: void op_5b00(UWORD opcode) ! 5598: { ! 5599: ULONG srcreg = 5; ! 5600: ULONG dstreg = (opcode & 7) >> 0; ! 5601: {{ ULONG src = srcreg; ! 5602: { BYTE dst = regs.d[dstreg]; ! 5603: { ULONG newv = dst - src; ! 5604: { bool flgs = ((BYTE)(src)) < 0; ! 5605: bool flgo = ((BYTE)(dst)) < 0; ! 5606: bool flgn = ((BYTE)(newv)) < 0; ! 5607: regs.z = ((BYTE)(newv)) == 0; ! 5608: regs.v = (flgs != flgo) && (flgn != flgo); ! 5609: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 5610: regs.n = flgn != 0; ! 5611: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 5612: }}}}}} ! 5613: void op_5b10(UWORD opcode) ! 5614: { ! 5615: ULONG srcreg = 5; ! 5616: ULONG dstreg = (opcode & 7) >> 0; ! 5617: {{ ULONG src = srcreg; ! 5618: { CPTR dsta = regs.a[dstreg]; ! 5619: BYTE dst = get_byte(dsta); ! 5620: { ULONG newv = dst - src; ! 5621: { bool flgs = ((BYTE)(src)) < 0; ! 5622: bool flgo = ((BYTE)(dst)) < 0; ! 5623: bool flgn = ((BYTE)(newv)) < 0; ! 5624: regs.z = ((BYTE)(newv)) == 0; ! 5625: regs.v = (flgs != flgo) && (flgn != flgo); ! 5626: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 5627: regs.n = flgn != 0; ! 5628: put_byte(dsta,newv); ! 5629: }}}}}} ! 5630: void op_5b18(UWORD opcode) ! 5631: { ! 5632: ULONG srcreg = 5; ! 5633: ULONG dstreg = (opcode & 7) >> 0; ! 5634: {{ ULONG src = srcreg; ! 5635: { CPTR dsta = regs.a[dstreg]; ! 5636: BYTE dst = get_byte(dsta); ! 5637: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 5638: { ULONG newv = dst - src; ! 5639: { bool flgs = ((BYTE)(src)) < 0; ! 5640: bool flgo = ((BYTE)(dst)) < 0; ! 5641: bool flgn = ((BYTE)(newv)) < 0; ! 5642: regs.z = ((BYTE)(newv)) == 0; ! 5643: regs.v = (flgs != flgo) && (flgn != flgo); ! 5644: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 5645: regs.n = flgn != 0; ! 5646: put_byte(dsta,newv); ! 5647: }}}}}}} ! 5648: void op_5b20(UWORD opcode) ! 5649: { ! 5650: ULONG srcreg = 5; ! 5651: ULONG dstreg = (opcode & 7) >> 0; ! 5652: {{ ULONG src = srcreg; ! 5653: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 5654: { CPTR dsta = regs.a[dstreg]; ! 5655: BYTE dst = get_byte(dsta); ! 5656: { ULONG newv = dst - src; ! 5657: { bool flgs = ((BYTE)(src)) < 0; ! 5658: bool flgo = ((BYTE)(dst)) < 0; ! 5659: bool flgn = ((BYTE)(newv)) < 0; ! 5660: regs.z = ((BYTE)(newv)) == 0; ! 5661: regs.v = (flgs != flgo) && (flgn != flgo); ! 5662: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 5663: regs.n = flgn != 0; ! 5664: put_byte(dsta,newv); ! 5665: }}}}}}} ! 5666: void op_5b28(UWORD opcode) ! 5667: { ! 5668: ULONG srcreg = 5; ! 5669: ULONG dstreg = (opcode & 7) >> 0; ! 5670: {{ ULONG src = srcreg; ! 5671: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 5672: BYTE dst = get_byte(dsta); ! 5673: { ULONG newv = dst - src; ! 5674: { bool flgs = ((BYTE)(src)) < 0; ! 5675: bool flgo = ((BYTE)(dst)) < 0; ! 5676: bool flgn = ((BYTE)(newv)) < 0; ! 5677: regs.z = ((BYTE)(newv)) == 0; ! 5678: regs.v = (flgs != flgo) && (flgn != flgo); ! 5679: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 5680: regs.n = flgn != 0; ! 5681: put_byte(dsta,newv); ! 5682: }}}}}} ! 5683: void op_5b30(UWORD opcode) ! 5684: { ! 5685: ULONG srcreg = 5; ! 5686: ULONG dstreg = (opcode & 7) >> 0; ! 5687: {{ ULONG src = srcreg; ! 5688: { CPTR dsta = regs.a[dstreg]; ! 5689: UWORD dstdp = nextiword(); ! 5690: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 5691: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 5692: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 5693: dsta += dstdpr; ! 5694: { BYTE dst = get_byte(dsta); ! 5695: { ULONG newv = dst - src; ! 5696: { bool flgs = ((BYTE)(src)) < 0; ! 5697: bool flgo = ((BYTE)(dst)) < 0; ! 5698: bool flgn = ((BYTE)(newv)) < 0; ! 5699: regs.z = ((BYTE)(newv)) == 0; ! 5700: regs.v = (flgs != flgo) && (flgn != flgo); ! 5701: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 5702: regs.n = flgn != 0; ! 5703: put_byte(dsta,newv); ! 5704: }}}}}}}} ! 5705: void op_5b38(UWORD opcode) ! 5706: { ! 5707: ULONG srcreg = 5; ! 5708: {{ ULONG src = srcreg; ! 5709: { CPTR dsta = (LONG)(WORD)nextiword(); ! 5710: BYTE dst = get_byte(dsta); ! 5711: { ULONG newv = dst - src; ! 5712: { bool flgs = ((BYTE)(src)) < 0; ! 5713: bool flgo = ((BYTE)(dst)) < 0; ! 5714: bool flgn = ((BYTE)(newv)) < 0; ! 5715: regs.z = ((BYTE)(newv)) == 0; ! 5716: regs.v = (flgs != flgo) && (flgn != flgo); ! 5717: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 5718: regs.n = flgn != 0; ! 5719: put_byte(dsta,newv); ! 5720: }}}}}} ! 5721: void op_5b39(UWORD opcode) ! 5722: { ! 5723: ULONG srcreg = 5; ! 5724: {{ ULONG src = srcreg; ! 5725: { CPTR dsta = nextilong(); ! 5726: BYTE dst = get_byte(dsta); ! 5727: { ULONG newv = dst - src; ! 5728: { bool flgs = ((BYTE)(src)) < 0; ! 5729: bool flgo = ((BYTE)(dst)) < 0; ! 5730: bool flgn = ((BYTE)(newv)) < 0; ! 5731: regs.z = ((BYTE)(newv)) == 0; ! 5732: regs.v = (flgs != flgo) && (flgn != flgo); ! 5733: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 5734: regs.n = flgn != 0; ! 5735: put_byte(dsta,newv); ! 5736: }}}}}} ! 5737: void op_5b40(UWORD opcode) ! 5738: { ! 5739: ULONG srcreg = 5; ! 5740: ULONG dstreg = (opcode & 7) >> 0; ! 5741: {{ ULONG src = srcreg; ! 5742: { WORD dst = regs.d[dstreg]; ! 5743: { ULONG newv = dst - src; ! 5744: { bool flgs = ((WORD)(src)) < 0; ! 5745: bool flgo = ((WORD)(dst)) < 0; ! 5746: bool flgn = ((WORD)(newv)) < 0; ! 5747: regs.z = ((WORD)(newv)) == 0; ! 5748: regs.v = (flgs != flgo) && (flgn != flgo); ! 5749: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 5750: regs.n = flgn != 0; ! 5751: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 5752: }}}}}} ! 5753: void op_5b48(UWORD opcode) ! 5754: { ! 5755: ULONG srcreg = 5; ! 5756: ULONG dstreg = (opcode & 7) >> 0; ! 5757: {{ ULONG src = srcreg; ! 5758: { LONG dst = regs.a[dstreg]; ! 5759: { ULONG newv = dst - src; ! 5760: regs.a[dstreg] = (newv); ! 5761: }}}}} ! 5762: void op_5b50(UWORD opcode) ! 5763: { ! 5764: ULONG srcreg = 5; ! 5765: ULONG dstreg = (opcode & 7) >> 0; ! 5766: {{ ULONG src = srcreg; ! 5767: { CPTR dsta = regs.a[dstreg]; ! 5768: WORD dst = get_word(dsta); ! 5769: { ULONG newv = dst - src; ! 5770: { bool flgs = ((WORD)(src)) < 0; ! 5771: bool flgo = ((WORD)(dst)) < 0; ! 5772: bool flgn = ((WORD)(newv)) < 0; ! 5773: regs.z = ((WORD)(newv)) == 0; ! 5774: regs.v = (flgs != flgo) && (flgn != flgo); ! 5775: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 5776: regs.n = flgn != 0; ! 5777: put_word(dsta,newv); ! 5778: }}}}}} ! 5779: void op_5b58(UWORD opcode) ! 5780: { ! 5781: ULONG srcreg = 5; ! 5782: ULONG dstreg = (opcode & 7) >> 0; ! 5783: {{ ULONG src = srcreg; ! 5784: { CPTR dsta = regs.a[dstreg]; ! 5785: WORD dst = get_word(dsta); ! 5786: { regs.a[dstreg] += 2; ! 5787: { ULONG newv = dst - src; ! 5788: { bool flgs = ((WORD)(src)) < 0; ! 5789: bool flgo = ((WORD)(dst)) < 0; ! 5790: bool flgn = ((WORD)(newv)) < 0; ! 5791: regs.z = ((WORD)(newv)) == 0; ! 5792: regs.v = (flgs != flgo) && (flgn != flgo); ! 5793: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 5794: regs.n = flgn != 0; ! 5795: put_word(dsta,newv); ! 5796: }}}}}}} ! 5797: void op_5b60(UWORD opcode) ! 5798: { ! 5799: ULONG srcreg = 5; ! 5800: ULONG dstreg = (opcode & 7) >> 0; ! 5801: {{ ULONG src = srcreg; ! 5802: { regs.a[dstreg] -= 2; ! 5803: { CPTR dsta = regs.a[dstreg]; ! 5804: WORD dst = get_word(dsta); ! 5805: { ULONG newv = dst - src; ! 5806: { bool flgs = ((WORD)(src)) < 0; ! 5807: bool flgo = ((WORD)(dst)) < 0; ! 5808: bool flgn = ((WORD)(newv)) < 0; ! 5809: regs.z = ((WORD)(newv)) == 0; ! 5810: regs.v = (flgs != flgo) && (flgn != flgo); ! 5811: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 5812: regs.n = flgn != 0; ! 5813: put_word(dsta,newv); ! 5814: }}}}}}} ! 5815: void op_5b68(UWORD opcode) ! 5816: { ! 5817: ULONG srcreg = 5; ! 5818: ULONG dstreg = (opcode & 7) >> 0; ! 5819: {{ ULONG src = srcreg; ! 5820: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 5821: WORD dst = get_word(dsta); ! 5822: { ULONG newv = dst - src; ! 5823: { bool flgs = ((WORD)(src)) < 0; ! 5824: bool flgo = ((WORD)(dst)) < 0; ! 5825: bool flgn = ((WORD)(newv)) < 0; ! 5826: regs.z = ((WORD)(newv)) == 0; ! 5827: regs.v = (flgs != flgo) && (flgn != flgo); ! 5828: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 5829: regs.n = flgn != 0; ! 5830: put_word(dsta,newv); ! 5831: }}}}}} ! 5832: void op_5b70(UWORD opcode) ! 5833: { ! 5834: ULONG srcreg = 5; ! 5835: ULONG dstreg = (opcode & 7) >> 0; ! 5836: {{ ULONG src = srcreg; ! 5837: { CPTR dsta = regs.a[dstreg]; ! 5838: UWORD dstdp = nextiword(); ! 5839: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 5840: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 5841: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 5842: dsta += dstdpr; ! 5843: { WORD dst = get_word(dsta); ! 5844: { ULONG newv = dst - src; ! 5845: { bool flgs = ((WORD)(src)) < 0; ! 5846: bool flgo = ((WORD)(dst)) < 0; ! 5847: bool flgn = ((WORD)(newv)) < 0; ! 5848: regs.z = ((WORD)(newv)) == 0; ! 5849: regs.v = (flgs != flgo) && (flgn != flgo); ! 5850: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 5851: regs.n = flgn != 0; ! 5852: put_word(dsta,newv); ! 5853: }}}}}}}} ! 5854: void op_5b78(UWORD opcode) ! 5855: { ! 5856: ULONG srcreg = 5; ! 5857: {{ ULONG src = srcreg; ! 5858: { CPTR dsta = (LONG)(WORD)nextiword(); ! 5859: WORD dst = get_word(dsta); ! 5860: { ULONG newv = dst - src; ! 5861: { bool flgs = ((WORD)(src)) < 0; ! 5862: bool flgo = ((WORD)(dst)) < 0; ! 5863: bool flgn = ((WORD)(newv)) < 0; ! 5864: regs.z = ((WORD)(newv)) == 0; ! 5865: regs.v = (flgs != flgo) && (flgn != flgo); ! 5866: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 5867: regs.n = flgn != 0; ! 5868: put_word(dsta,newv); ! 5869: }}}}}} ! 5870: void op_5b79(UWORD opcode) ! 5871: { ! 5872: ULONG srcreg = 5; ! 5873: {{ ULONG src = srcreg; ! 5874: { CPTR dsta = nextilong(); ! 5875: WORD dst = get_word(dsta); ! 5876: { ULONG newv = dst - src; ! 5877: { bool flgs = ((WORD)(src)) < 0; ! 5878: bool flgo = ((WORD)(dst)) < 0; ! 5879: bool flgn = ((WORD)(newv)) < 0; ! 5880: regs.z = ((WORD)(newv)) == 0; ! 5881: regs.v = (flgs != flgo) && (flgn != flgo); ! 5882: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 5883: regs.n = flgn != 0; ! 5884: put_word(dsta,newv); ! 5885: }}}}}} ! 5886: void op_5b80(UWORD opcode) ! 5887: { ! 5888: ULONG srcreg = 5; ! 5889: ULONG dstreg = (opcode & 7) >> 0; ! 5890: {{ ULONG src = srcreg; ! 5891: { LONG dst = regs.d[dstreg]; ! 5892: { ULONG newv = dst - src; ! 5893: { bool flgs = ((LONG)(src)) < 0; ! 5894: bool flgo = ((LONG)(dst)) < 0; ! 5895: bool flgn = ((LONG)(newv)) < 0; ! 5896: regs.z = ((LONG)(newv)) == 0; ! 5897: regs.v = (flgs != flgo) && (flgn != flgo); ! 5898: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 5899: regs.n = flgn != 0; ! 5900: regs.d[dstreg] = (newv); ! 5901: }}}}}} ! 5902: void op_5b88(UWORD opcode) ! 5903: { ! 5904: ULONG srcreg = 5; ! 5905: ULONG dstreg = (opcode & 7) >> 0; ! 5906: {{ ULONG src = srcreg; ! 5907: { LONG dst = regs.a[dstreg]; ! 5908: { ULONG newv = dst - src; ! 5909: regs.a[dstreg] = (newv); ! 5910: }}}}} ! 5911: void op_5b90(UWORD opcode) ! 5912: { ! 5913: ULONG srcreg = 5; ! 5914: ULONG dstreg = (opcode & 7) >> 0; ! 5915: {{ ULONG src = srcreg; ! 5916: { CPTR dsta = regs.a[dstreg]; ! 5917: LONG dst = get_long(dsta); ! 5918: { ULONG newv = dst - src; ! 5919: { bool flgs = ((LONG)(src)) < 0; ! 5920: bool flgo = ((LONG)(dst)) < 0; ! 5921: bool flgn = ((LONG)(newv)) < 0; ! 5922: regs.z = ((LONG)(newv)) == 0; ! 5923: regs.v = (flgs != flgo) && (flgn != flgo); ! 5924: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 5925: regs.n = flgn != 0; ! 5926: put_long(dsta,newv); ! 5927: }}}}}} ! 5928: void op_5b98(UWORD opcode) ! 5929: { ! 5930: ULONG srcreg = 5; ! 5931: ULONG dstreg = (opcode & 7) >> 0; ! 5932: {{ ULONG src = srcreg; ! 5933: { CPTR dsta = regs.a[dstreg]; ! 5934: LONG dst = get_long(dsta); ! 5935: { regs.a[dstreg] += 4; ! 5936: { ULONG newv = dst - src; ! 5937: { bool flgs = ((LONG)(src)) < 0; ! 5938: bool flgo = ((LONG)(dst)) < 0; ! 5939: bool flgn = ((LONG)(newv)) < 0; ! 5940: regs.z = ((LONG)(newv)) == 0; ! 5941: regs.v = (flgs != flgo) && (flgn != flgo); ! 5942: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 5943: regs.n = flgn != 0; ! 5944: put_long(dsta,newv); ! 5945: }}}}}}} ! 5946: void op_5ba0(UWORD opcode) ! 5947: { ! 5948: ULONG srcreg = 5; ! 5949: ULONG dstreg = (opcode & 7) >> 0; ! 5950: {{ ULONG src = srcreg; ! 5951: { regs.a[dstreg] -= 4; ! 5952: { CPTR dsta = regs.a[dstreg]; ! 5953: LONG dst = get_long(dsta); ! 5954: { ULONG newv = dst - src; ! 5955: { bool flgs = ((LONG)(src)) < 0; ! 5956: bool flgo = ((LONG)(dst)) < 0; ! 5957: bool flgn = ((LONG)(newv)) < 0; ! 5958: regs.z = ((LONG)(newv)) == 0; ! 5959: regs.v = (flgs != flgo) && (flgn != flgo); ! 5960: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 5961: regs.n = flgn != 0; ! 5962: put_long(dsta,newv); ! 5963: }}}}}}} ! 5964: void op_5ba8(UWORD opcode) ! 5965: { ! 5966: ULONG srcreg = 5; ! 5967: ULONG dstreg = (opcode & 7) >> 0; ! 5968: {{ ULONG src = srcreg; ! 5969: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 5970: LONG dst = get_long(dsta); ! 5971: { ULONG newv = dst - src; ! 5972: { bool flgs = ((LONG)(src)) < 0; ! 5973: bool flgo = ((LONG)(dst)) < 0; ! 5974: bool flgn = ((LONG)(newv)) < 0; ! 5975: regs.z = ((LONG)(newv)) == 0; ! 5976: regs.v = (flgs != flgo) && (flgn != flgo); ! 5977: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 5978: regs.n = flgn != 0; ! 5979: put_long(dsta,newv); ! 5980: }}}}}} ! 5981: void op_5bb0(UWORD opcode) ! 5982: { ! 5983: ULONG srcreg = 5; ! 5984: ULONG dstreg = (opcode & 7) >> 0; ! 5985: {{ ULONG src = srcreg; ! 5986: { CPTR dsta = regs.a[dstreg]; ! 5987: UWORD dstdp = nextiword(); ! 5988: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 5989: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 5990: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 5991: dsta += dstdpr; ! 5992: { LONG dst = get_long(dsta); ! 5993: { ULONG newv = dst - src; ! 5994: { bool flgs = ((LONG)(src)) < 0; ! 5995: bool flgo = ((LONG)(dst)) < 0; ! 5996: bool flgn = ((LONG)(newv)) < 0; ! 5997: regs.z = ((LONG)(newv)) == 0; ! 5998: regs.v = (flgs != flgo) && (flgn != flgo); ! 5999: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 6000: regs.n = flgn != 0; ! 6001: put_long(dsta,newv); ! 6002: }}}}}}}} ! 6003: void op_5bb8(UWORD opcode) ! 6004: { ! 6005: ULONG srcreg = 5; ! 6006: {{ ULONG src = srcreg; ! 6007: { CPTR dsta = (LONG)(WORD)nextiword(); ! 6008: LONG dst = get_long(dsta); ! 6009: { ULONG newv = dst - src; ! 6010: { bool flgs = ((LONG)(src)) < 0; ! 6011: bool flgo = ((LONG)(dst)) < 0; ! 6012: bool flgn = ((LONG)(newv)) < 0; ! 6013: regs.z = ((LONG)(newv)) == 0; ! 6014: regs.v = (flgs != flgo) && (flgn != flgo); ! 6015: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 6016: regs.n = flgn != 0; ! 6017: put_long(dsta,newv); ! 6018: }}}}}} ! 6019: void op_5bb9(UWORD opcode) ! 6020: { ! 6021: ULONG srcreg = 5; ! 6022: {{ ULONG src = srcreg; ! 6023: { CPTR dsta = nextilong(); ! 6024: LONG dst = get_long(dsta); ! 6025: { ULONG newv = dst - src; ! 6026: { bool flgs = ((LONG)(src)) < 0; ! 6027: bool flgo = ((LONG)(dst)) < 0; ! 6028: bool flgn = ((LONG)(newv)) < 0; ! 6029: regs.z = ((LONG)(newv)) == 0; ! 6030: regs.v = (flgs != flgo) && (flgn != flgo); ! 6031: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 6032: regs.n = flgn != 0; ! 6033: put_long(dsta,newv); ! 6034: }}}}}} ! 6035: void op_5bc0(UWORD opcode) ! 6036: { ! 6037: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6038: {{{ int val = cctrue(11) ? 0xff : 0; ! 6039: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 6040: }}}} ! 6041: void op_5bc8(UWORD opcode) ! 6042: { ! 6043: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6044: {{ WORD src = regs.d[srcreg]; ! 6045: { WORD offs = nextiword(); ! 6046: if (!cctrue(11)) { ! 6047: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 6048: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 6049: } ! 6050: }}}} ! 6051: void op_5bd0(UWORD opcode) ! 6052: { ! 6053: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6054: {{ CPTR srca = regs.a[srcreg]; ! 6055: { int val = cctrue(11) ? 0xff : 0; ! 6056: put_byte(srca,val); ! 6057: }}}} ! 6058: void op_5bd8(UWORD opcode) ! 6059: { ! 6060: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6061: {{ CPTR srca = regs.a[srcreg]; ! 6062: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 6063: { int val = cctrue(11) ? 0xff : 0; ! 6064: put_byte(srca,val); ! 6065: }}}}} ! 6066: void op_5be0(UWORD opcode) ! 6067: { ! 6068: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6069: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 6070: { CPTR srca = regs.a[srcreg]; ! 6071: { int val = cctrue(11) ? 0xff : 0; ! 6072: put_byte(srca,val); ! 6073: }}}}} ! 6074: void op_5be8(UWORD opcode) ! 6075: { ! 6076: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6077: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 6078: { int val = cctrue(11) ? 0xff : 0; ! 6079: put_byte(srca,val); ! 6080: }}}} ! 6081: void op_5bf0(UWORD opcode) ! 6082: { ! 6083: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6084: {{ CPTR srca = regs.a[srcreg]; ! 6085: UWORD srcdp = nextiword(); ! 6086: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 6087: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 6088: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 6089: srca += srcdpr; ! 6090: { int val = cctrue(11) ? 0xff : 0; ! 6091: put_byte(srca,val); ! 6092: }}}}} ! 6093: void op_5bf8(UWORD opcode) ! 6094: { ! 6095: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 6096: { int val = cctrue(11) ? 0xff : 0; ! 6097: put_byte(srca,val); ! 6098: }}}} ! 6099: void op_5bf9(UWORD opcode) ! 6100: { ! 6101: {{ CPTR srca = nextilong(); ! 6102: { int val = cctrue(11) ? 0xff : 0; ! 6103: put_byte(srca,val); ! 6104: }}}} ! 6105: void op_5c00(UWORD opcode) ! 6106: { ! 6107: ULONG srcreg = 6; ! 6108: ULONG dstreg = (opcode & 7) >> 0; ! 6109: {{ ULONG src = srcreg; ! 6110: { BYTE dst = regs.d[dstreg]; ! 6111: { ULONG newv = dst + src; ! 6112: { bool flgs = ((BYTE)(src)) < 0; ! 6113: bool flgo = ((BYTE)(dst)) < 0; ! 6114: bool flgn = ((BYTE)(newv)) < 0; ! 6115: regs.z = ((BYTE)(newv)) == 0; ! 6116: regs.v = (flgs == flgo) && (flgn != flgo); ! 6117: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 6118: regs.n = flgn != 0; ! 6119: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 6120: }}}}}} ! 6121: void op_5c10(UWORD opcode) ! 6122: { ! 6123: ULONG srcreg = 6; ! 6124: ULONG dstreg = (opcode & 7) >> 0; ! 6125: {{ ULONG src = srcreg; ! 6126: { CPTR dsta = regs.a[dstreg]; ! 6127: BYTE dst = get_byte(dsta); ! 6128: { ULONG newv = dst + src; ! 6129: { bool flgs = ((BYTE)(src)) < 0; ! 6130: bool flgo = ((BYTE)(dst)) < 0; ! 6131: bool flgn = ((BYTE)(newv)) < 0; ! 6132: regs.z = ((BYTE)(newv)) == 0; ! 6133: regs.v = (flgs == flgo) && (flgn != flgo); ! 6134: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 6135: regs.n = flgn != 0; ! 6136: put_byte(dsta,newv); ! 6137: }}}}}} ! 6138: void op_5c18(UWORD opcode) ! 6139: { ! 6140: ULONG srcreg = 6; ! 6141: ULONG dstreg = (opcode & 7) >> 0; ! 6142: {{ ULONG src = srcreg; ! 6143: { CPTR dsta = regs.a[dstreg]; ! 6144: BYTE dst = get_byte(dsta); ! 6145: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 6146: { ULONG newv = dst + src; ! 6147: { bool flgs = ((BYTE)(src)) < 0; ! 6148: bool flgo = ((BYTE)(dst)) < 0; ! 6149: bool flgn = ((BYTE)(newv)) < 0; ! 6150: regs.z = ((BYTE)(newv)) == 0; ! 6151: regs.v = (flgs == flgo) && (flgn != flgo); ! 6152: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 6153: regs.n = flgn != 0; ! 6154: put_byte(dsta,newv); ! 6155: }}}}}}} ! 6156: void op_5c20(UWORD opcode) ! 6157: { ! 6158: ULONG srcreg = 6; ! 6159: ULONG dstreg = (opcode & 7) >> 0; ! 6160: {{ ULONG src = srcreg; ! 6161: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 6162: { CPTR dsta = regs.a[dstreg]; ! 6163: BYTE dst = get_byte(dsta); ! 6164: { ULONG newv = dst + src; ! 6165: { bool flgs = ((BYTE)(src)) < 0; ! 6166: bool flgo = ((BYTE)(dst)) < 0; ! 6167: bool flgn = ((BYTE)(newv)) < 0; ! 6168: regs.z = ((BYTE)(newv)) == 0; ! 6169: regs.v = (flgs == flgo) && (flgn != flgo); ! 6170: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 6171: regs.n = flgn != 0; ! 6172: put_byte(dsta,newv); ! 6173: }}}}}}} ! 6174: void op_5c28(UWORD opcode) ! 6175: { ! 6176: ULONG srcreg = 6; ! 6177: ULONG dstreg = (opcode & 7) >> 0; ! 6178: {{ ULONG src = srcreg; ! 6179: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 6180: BYTE dst = get_byte(dsta); ! 6181: { ULONG newv = dst + src; ! 6182: { bool flgs = ((BYTE)(src)) < 0; ! 6183: bool flgo = ((BYTE)(dst)) < 0; ! 6184: bool flgn = ((BYTE)(newv)) < 0; ! 6185: regs.z = ((BYTE)(newv)) == 0; ! 6186: regs.v = (flgs == flgo) && (flgn != flgo); ! 6187: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 6188: regs.n = flgn != 0; ! 6189: put_byte(dsta,newv); ! 6190: }}}}}} ! 6191: void op_5c30(UWORD opcode) ! 6192: { ! 6193: ULONG srcreg = 6; ! 6194: ULONG dstreg = (opcode & 7) >> 0; ! 6195: {{ ULONG src = srcreg; ! 6196: { CPTR dsta = regs.a[dstreg]; ! 6197: UWORD dstdp = nextiword(); ! 6198: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 6199: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 6200: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 6201: dsta += dstdpr; ! 6202: { BYTE dst = get_byte(dsta); ! 6203: { ULONG newv = dst + src; ! 6204: { bool flgs = ((BYTE)(src)) < 0; ! 6205: bool flgo = ((BYTE)(dst)) < 0; ! 6206: bool flgn = ((BYTE)(newv)) < 0; ! 6207: regs.z = ((BYTE)(newv)) == 0; ! 6208: regs.v = (flgs == flgo) && (flgn != flgo); ! 6209: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 6210: regs.n = flgn != 0; ! 6211: put_byte(dsta,newv); ! 6212: }}}}}}}} ! 6213: void op_5c38(UWORD opcode) ! 6214: { ! 6215: ULONG srcreg = 6; ! 6216: {{ ULONG src = srcreg; ! 6217: { CPTR dsta = (LONG)(WORD)nextiword(); ! 6218: BYTE dst = get_byte(dsta); ! 6219: { ULONG newv = dst + src; ! 6220: { bool flgs = ((BYTE)(src)) < 0; ! 6221: bool flgo = ((BYTE)(dst)) < 0; ! 6222: bool flgn = ((BYTE)(newv)) < 0; ! 6223: regs.z = ((BYTE)(newv)) == 0; ! 6224: regs.v = (flgs == flgo) && (flgn != flgo); ! 6225: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 6226: regs.n = flgn != 0; ! 6227: put_byte(dsta,newv); ! 6228: }}}}}} ! 6229: void op_5c39(UWORD opcode) ! 6230: { ! 6231: ULONG srcreg = 6; ! 6232: {{ ULONG src = srcreg; ! 6233: { CPTR dsta = nextilong(); ! 6234: BYTE dst = get_byte(dsta); ! 6235: { ULONG newv = dst + src; ! 6236: { bool flgs = ((BYTE)(src)) < 0; ! 6237: bool flgo = ((BYTE)(dst)) < 0; ! 6238: bool flgn = ((BYTE)(newv)) < 0; ! 6239: regs.z = ((BYTE)(newv)) == 0; ! 6240: regs.v = (flgs == flgo) && (flgn != flgo); ! 6241: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 6242: regs.n = flgn != 0; ! 6243: put_byte(dsta,newv); ! 6244: }}}}}} ! 6245: void op_5c40(UWORD opcode) ! 6246: { ! 6247: ULONG srcreg = 6; ! 6248: ULONG dstreg = (opcode & 7) >> 0; ! 6249: {{ ULONG src = srcreg; ! 6250: { WORD dst = regs.d[dstreg]; ! 6251: { ULONG newv = dst + src; ! 6252: { bool flgs = ((WORD)(src)) < 0; ! 6253: bool flgo = ((WORD)(dst)) < 0; ! 6254: bool flgn = ((WORD)(newv)) < 0; ! 6255: regs.z = ((WORD)(newv)) == 0; ! 6256: regs.v = (flgs == flgo) && (flgn != flgo); ! 6257: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 6258: regs.n = flgn != 0; ! 6259: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 6260: }}}}}} ! 6261: void op_5c48(UWORD opcode) ! 6262: { ! 6263: ULONG srcreg = 6; ! 6264: ULONG dstreg = (opcode & 7) >> 0; ! 6265: {{ ULONG src = srcreg; ! 6266: { LONG dst = regs.a[dstreg]; ! 6267: { ULONG newv = dst + src; ! 6268: regs.a[dstreg] = (newv); ! 6269: }}}}} ! 6270: void op_5c50(UWORD opcode) ! 6271: { ! 6272: ULONG srcreg = 6; ! 6273: ULONG dstreg = (opcode & 7) >> 0; ! 6274: {{ ULONG src = srcreg; ! 6275: { CPTR dsta = regs.a[dstreg]; ! 6276: WORD dst = get_word(dsta); ! 6277: { ULONG newv = dst + src; ! 6278: { bool flgs = ((WORD)(src)) < 0; ! 6279: bool flgo = ((WORD)(dst)) < 0; ! 6280: bool flgn = ((WORD)(newv)) < 0; ! 6281: regs.z = ((WORD)(newv)) == 0; ! 6282: regs.v = (flgs == flgo) && (flgn != flgo); ! 6283: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 6284: regs.n = flgn != 0; ! 6285: put_word(dsta,newv); ! 6286: }}}}}} ! 6287: void op_5c58(UWORD opcode) ! 6288: { ! 6289: ULONG srcreg = 6; ! 6290: ULONG dstreg = (opcode & 7) >> 0; ! 6291: {{ ULONG src = srcreg; ! 6292: { CPTR dsta = regs.a[dstreg]; ! 6293: WORD dst = get_word(dsta); ! 6294: { regs.a[dstreg] += 2; ! 6295: { ULONG newv = dst + src; ! 6296: { bool flgs = ((WORD)(src)) < 0; ! 6297: bool flgo = ((WORD)(dst)) < 0; ! 6298: bool flgn = ((WORD)(newv)) < 0; ! 6299: regs.z = ((WORD)(newv)) == 0; ! 6300: regs.v = (flgs == flgo) && (flgn != flgo); ! 6301: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 6302: regs.n = flgn != 0; ! 6303: put_word(dsta,newv); ! 6304: }}}}}}} ! 6305: void op_5c60(UWORD opcode) ! 6306: { ! 6307: ULONG srcreg = 6; ! 6308: ULONG dstreg = (opcode & 7) >> 0; ! 6309: {{ ULONG src = srcreg; ! 6310: { regs.a[dstreg] -= 2; ! 6311: { CPTR dsta = regs.a[dstreg]; ! 6312: WORD dst = get_word(dsta); ! 6313: { ULONG newv = dst + src; ! 6314: { bool flgs = ((WORD)(src)) < 0; ! 6315: bool flgo = ((WORD)(dst)) < 0; ! 6316: bool flgn = ((WORD)(newv)) < 0; ! 6317: regs.z = ((WORD)(newv)) == 0; ! 6318: regs.v = (flgs == flgo) && (flgn != flgo); ! 6319: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 6320: regs.n = flgn != 0; ! 6321: put_word(dsta,newv); ! 6322: }}}}}}} ! 6323: void op_5c68(UWORD opcode) ! 6324: { ! 6325: ULONG srcreg = 6; ! 6326: ULONG dstreg = (opcode & 7) >> 0; ! 6327: {{ ULONG src = srcreg; ! 6328: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 6329: WORD dst = get_word(dsta); ! 6330: { ULONG newv = dst + src; ! 6331: { bool flgs = ((WORD)(src)) < 0; ! 6332: bool flgo = ((WORD)(dst)) < 0; ! 6333: bool flgn = ((WORD)(newv)) < 0; ! 6334: regs.z = ((WORD)(newv)) == 0; ! 6335: regs.v = (flgs == flgo) && (flgn != flgo); ! 6336: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 6337: regs.n = flgn != 0; ! 6338: put_word(dsta,newv); ! 6339: }}}}}} ! 6340: void op_5c70(UWORD opcode) ! 6341: { ! 6342: ULONG srcreg = 6; ! 6343: ULONG dstreg = (opcode & 7) >> 0; ! 6344: {{ ULONG src = srcreg; ! 6345: { CPTR dsta = regs.a[dstreg]; ! 6346: UWORD dstdp = nextiword(); ! 6347: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 6348: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 6349: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 6350: dsta += dstdpr; ! 6351: { WORD dst = get_word(dsta); ! 6352: { ULONG newv = dst + src; ! 6353: { bool flgs = ((WORD)(src)) < 0; ! 6354: bool flgo = ((WORD)(dst)) < 0; ! 6355: bool flgn = ((WORD)(newv)) < 0; ! 6356: regs.z = ((WORD)(newv)) == 0; ! 6357: regs.v = (flgs == flgo) && (flgn != flgo); ! 6358: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 6359: regs.n = flgn != 0; ! 6360: put_word(dsta,newv); ! 6361: }}}}}}}} ! 6362: void op_5c78(UWORD opcode) ! 6363: { ! 6364: ULONG srcreg = 6; ! 6365: {{ ULONG src = srcreg; ! 6366: { CPTR dsta = (LONG)(WORD)nextiword(); ! 6367: WORD dst = get_word(dsta); ! 6368: { ULONG newv = dst + src; ! 6369: { bool flgs = ((WORD)(src)) < 0; ! 6370: bool flgo = ((WORD)(dst)) < 0; ! 6371: bool flgn = ((WORD)(newv)) < 0; ! 6372: regs.z = ((WORD)(newv)) == 0; ! 6373: regs.v = (flgs == flgo) && (flgn != flgo); ! 6374: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 6375: regs.n = flgn != 0; ! 6376: put_word(dsta,newv); ! 6377: }}}}}} ! 6378: void op_5c79(UWORD opcode) ! 6379: { ! 6380: ULONG srcreg = 6; ! 6381: {{ ULONG src = srcreg; ! 6382: { CPTR dsta = nextilong(); ! 6383: WORD dst = get_word(dsta); ! 6384: { ULONG newv = dst + src; ! 6385: { bool flgs = ((WORD)(src)) < 0; ! 6386: bool flgo = ((WORD)(dst)) < 0; ! 6387: bool flgn = ((WORD)(newv)) < 0; ! 6388: regs.z = ((WORD)(newv)) == 0; ! 6389: regs.v = (flgs == flgo) && (flgn != flgo); ! 6390: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 6391: regs.n = flgn != 0; ! 6392: put_word(dsta,newv); ! 6393: }}}}}} ! 6394: void op_5c80(UWORD opcode) ! 6395: { ! 6396: ULONG srcreg = 6; ! 6397: ULONG dstreg = (opcode & 7) >> 0; ! 6398: {{ ULONG src = srcreg; ! 6399: { LONG dst = regs.d[dstreg]; ! 6400: { ULONG newv = dst + src; ! 6401: { bool flgs = ((LONG)(src)) < 0; ! 6402: bool flgo = ((LONG)(dst)) < 0; ! 6403: bool flgn = ((LONG)(newv)) < 0; ! 6404: regs.z = ((LONG)(newv)) == 0; ! 6405: regs.v = (flgs == flgo) && (flgn != flgo); ! 6406: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 6407: regs.n = flgn != 0; ! 6408: regs.d[dstreg] = (newv); ! 6409: }}}}}} ! 6410: void op_5c88(UWORD opcode) ! 6411: { ! 6412: ULONG srcreg = 6; ! 6413: ULONG dstreg = (opcode & 7) >> 0; ! 6414: {{ ULONG src = srcreg; ! 6415: { LONG dst = regs.a[dstreg]; ! 6416: { ULONG newv = dst + src; ! 6417: regs.a[dstreg] = (newv); ! 6418: }}}}} ! 6419: void op_5c90(UWORD opcode) ! 6420: { ! 6421: ULONG srcreg = 6; ! 6422: ULONG dstreg = (opcode & 7) >> 0; ! 6423: {{ ULONG src = srcreg; ! 6424: { CPTR dsta = regs.a[dstreg]; ! 6425: LONG dst = get_long(dsta); ! 6426: { ULONG newv = dst + src; ! 6427: { bool flgs = ((LONG)(src)) < 0; ! 6428: bool flgo = ((LONG)(dst)) < 0; ! 6429: bool flgn = ((LONG)(newv)) < 0; ! 6430: regs.z = ((LONG)(newv)) == 0; ! 6431: regs.v = (flgs == flgo) && (flgn != flgo); ! 6432: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 6433: regs.n = flgn != 0; ! 6434: put_long(dsta,newv); ! 6435: }}}}}} ! 6436: void op_5c98(UWORD opcode) ! 6437: { ! 6438: ULONG srcreg = 6; ! 6439: ULONG dstreg = (opcode & 7) >> 0; ! 6440: {{ ULONG src = srcreg; ! 6441: { CPTR dsta = regs.a[dstreg]; ! 6442: LONG dst = get_long(dsta); ! 6443: { regs.a[dstreg] += 4; ! 6444: { ULONG newv = dst + src; ! 6445: { bool flgs = ((LONG)(src)) < 0; ! 6446: bool flgo = ((LONG)(dst)) < 0; ! 6447: bool flgn = ((LONG)(newv)) < 0; ! 6448: regs.z = ((LONG)(newv)) == 0; ! 6449: regs.v = (flgs == flgo) && (flgn != flgo); ! 6450: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 6451: regs.n = flgn != 0; ! 6452: put_long(dsta,newv); ! 6453: }}}}}}} ! 6454: void op_5ca0(UWORD opcode) ! 6455: { ! 6456: ULONG srcreg = 6; ! 6457: ULONG dstreg = (opcode & 7) >> 0; ! 6458: {{ ULONG src = srcreg; ! 6459: { regs.a[dstreg] -= 4; ! 6460: { CPTR dsta = regs.a[dstreg]; ! 6461: LONG dst = get_long(dsta); ! 6462: { ULONG newv = dst + src; ! 6463: { bool flgs = ((LONG)(src)) < 0; ! 6464: bool flgo = ((LONG)(dst)) < 0; ! 6465: bool flgn = ((LONG)(newv)) < 0; ! 6466: regs.z = ((LONG)(newv)) == 0; ! 6467: regs.v = (flgs == flgo) && (flgn != flgo); ! 6468: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 6469: regs.n = flgn != 0; ! 6470: put_long(dsta,newv); ! 6471: }}}}}}} ! 6472: void op_5ca8(UWORD opcode) ! 6473: { ! 6474: ULONG srcreg = 6; ! 6475: ULONG dstreg = (opcode & 7) >> 0; ! 6476: {{ ULONG src = srcreg; ! 6477: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 6478: LONG dst = get_long(dsta); ! 6479: { ULONG newv = dst + src; ! 6480: { bool flgs = ((LONG)(src)) < 0; ! 6481: bool flgo = ((LONG)(dst)) < 0; ! 6482: bool flgn = ((LONG)(newv)) < 0; ! 6483: regs.z = ((LONG)(newv)) == 0; ! 6484: regs.v = (flgs == flgo) && (flgn != flgo); ! 6485: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 6486: regs.n = flgn != 0; ! 6487: put_long(dsta,newv); ! 6488: }}}}}} ! 6489: void op_5cb0(UWORD opcode) ! 6490: { ! 6491: ULONG srcreg = 6; ! 6492: ULONG dstreg = (opcode & 7) >> 0; ! 6493: {{ ULONG src = srcreg; ! 6494: { CPTR dsta = regs.a[dstreg]; ! 6495: UWORD dstdp = nextiword(); ! 6496: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 6497: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 6498: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 6499: dsta += dstdpr; ! 6500: { LONG dst = get_long(dsta); ! 6501: { ULONG newv = dst + src; ! 6502: { bool flgs = ((LONG)(src)) < 0; ! 6503: bool flgo = ((LONG)(dst)) < 0; ! 6504: bool flgn = ((LONG)(newv)) < 0; ! 6505: regs.z = ((LONG)(newv)) == 0; ! 6506: regs.v = (flgs == flgo) && (flgn != flgo); ! 6507: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 6508: regs.n = flgn != 0; ! 6509: put_long(dsta,newv); ! 6510: }}}}}}}} ! 6511: void op_5cb8(UWORD opcode) ! 6512: { ! 6513: ULONG srcreg = 6; ! 6514: {{ ULONG src = srcreg; ! 6515: { CPTR dsta = (LONG)(WORD)nextiword(); ! 6516: LONG dst = get_long(dsta); ! 6517: { ULONG newv = dst + src; ! 6518: { bool flgs = ((LONG)(src)) < 0; ! 6519: bool flgo = ((LONG)(dst)) < 0; ! 6520: bool flgn = ((LONG)(newv)) < 0; ! 6521: regs.z = ((LONG)(newv)) == 0; ! 6522: regs.v = (flgs == flgo) && (flgn != flgo); ! 6523: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 6524: regs.n = flgn != 0; ! 6525: put_long(dsta,newv); ! 6526: }}}}}} ! 6527: void op_5cb9(UWORD opcode) ! 6528: { ! 6529: ULONG srcreg = 6; ! 6530: {{ ULONG src = srcreg; ! 6531: { CPTR dsta = nextilong(); ! 6532: LONG dst = get_long(dsta); ! 6533: { ULONG newv = dst + src; ! 6534: { bool flgs = ((LONG)(src)) < 0; ! 6535: bool flgo = ((LONG)(dst)) < 0; ! 6536: bool flgn = ((LONG)(newv)) < 0; ! 6537: regs.z = ((LONG)(newv)) == 0; ! 6538: regs.v = (flgs == flgo) && (flgn != flgo); ! 6539: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 6540: regs.n = flgn != 0; ! 6541: put_long(dsta,newv); ! 6542: }}}}}} ! 6543: void op_5cc0(UWORD opcode) ! 6544: { ! 6545: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6546: {{{ int val = cctrue(12) ? 0xff : 0; ! 6547: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 6548: }}}} ! 6549: void op_5cc8(UWORD opcode) ! 6550: { ! 6551: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6552: {{ WORD src = regs.d[srcreg]; ! 6553: { WORD offs = nextiword(); ! 6554: if (!cctrue(12)) { ! 6555: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 6556: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 6557: } ! 6558: }}}} ! 6559: void op_5cd0(UWORD opcode) ! 6560: { ! 6561: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6562: {{ CPTR srca = regs.a[srcreg]; ! 6563: { int val = cctrue(12) ? 0xff : 0; ! 6564: put_byte(srca,val); ! 6565: }}}} ! 6566: void op_5cd8(UWORD opcode) ! 6567: { ! 6568: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6569: {{ CPTR srca = regs.a[srcreg]; ! 6570: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 6571: { int val = cctrue(12) ? 0xff : 0; ! 6572: put_byte(srca,val); ! 6573: }}}}} ! 6574: void op_5ce0(UWORD opcode) ! 6575: { ! 6576: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6577: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 6578: { CPTR srca = regs.a[srcreg]; ! 6579: { int val = cctrue(12) ? 0xff : 0; ! 6580: put_byte(srca,val); ! 6581: }}}}} ! 6582: void op_5ce8(UWORD opcode) ! 6583: { ! 6584: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6585: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 6586: { int val = cctrue(12) ? 0xff : 0; ! 6587: put_byte(srca,val); ! 6588: }}}} ! 6589: void op_5cf0(UWORD opcode) ! 6590: { ! 6591: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 6592: {{ CPTR srca = regs.a[srcreg]; ! 6593: UWORD srcdp = nextiword(); ! 6594: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 6595: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 6596: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 6597: srca += srcdpr; ! 6598: { int val = cctrue(12) ? 0xff : 0; ! 6599: put_byte(srca,val); ! 6600: }}}}} ! 6601: void op_5cf8(UWORD opcode) ! 6602: { ! 6603: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 6604: { int val = cctrue(12) ? 0xff : 0; ! 6605: put_byte(srca,val); ! 6606: }}}} ! 6607: void op_5cf9(UWORD opcode) ! 6608: { ! 6609: {{ CPTR srca = nextilong(); ! 6610: { int val = cctrue(12) ? 0xff : 0; ! 6611: put_byte(srca,val); ! 6612: }}}} ! 6613: void op_5d00(UWORD opcode) ! 6614: { ! 6615: ULONG srcreg = 6; ! 6616: ULONG dstreg = (opcode & 7) >> 0; ! 6617: {{ ULONG src = srcreg; ! 6618: { BYTE dst = regs.d[dstreg]; ! 6619: { ULONG newv = dst - src; ! 6620: { bool flgs = ((BYTE)(src)) < 0; ! 6621: bool flgo = ((BYTE)(dst)) < 0; ! 6622: bool flgn = ((BYTE)(newv)) < 0; ! 6623: regs.z = ((BYTE)(newv)) == 0; ! 6624: regs.v = (flgs != flgo) && (flgn != flgo); ! 6625: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 6626: regs.n = flgn != 0; ! 6627: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 6628: }}}}}} ! 6629: void op_5d10(UWORD opcode) ! 6630: { ! 6631: ULONG srcreg = 6; ! 6632: ULONG dstreg = (opcode & 7) >> 0; ! 6633: {{ ULONG src = srcreg; ! 6634: { CPTR dsta = regs.a[dstreg]; ! 6635: BYTE dst = get_byte(dsta); ! 6636: { ULONG newv = dst - src; ! 6637: { bool flgs = ((BYTE)(src)) < 0; ! 6638: bool flgo = ((BYTE)(dst)) < 0; ! 6639: bool flgn = ((BYTE)(newv)) < 0; ! 6640: regs.z = ((BYTE)(newv)) == 0; ! 6641: regs.v = (flgs != flgo) && (flgn != flgo); ! 6642: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 6643: regs.n = flgn != 0; ! 6644: put_byte(dsta,newv); ! 6645: }}}}}} ! 6646: void op_5d18(UWORD opcode) ! 6647: { ! 6648: ULONG srcreg = 6; ! 6649: ULONG dstreg = (opcode & 7) >> 0; ! 6650: {{ ULONG src = srcreg; ! 6651: { CPTR dsta = regs.a[dstreg]; ! 6652: BYTE dst = get_byte(dsta); ! 6653: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 6654: { ULONG newv = dst - src; ! 6655: { bool flgs = ((BYTE)(src)) < 0; ! 6656: bool flgo = ((BYTE)(dst)) < 0; ! 6657: bool flgn = ((BYTE)(newv)) < 0; ! 6658: regs.z = ((BYTE)(newv)) == 0; ! 6659: regs.v = (flgs != flgo) && (flgn != flgo); ! 6660: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 6661: regs.n = flgn != 0; ! 6662: put_byte(dsta,newv); ! 6663: }}}}}}} ! 6664: void op_5d20(UWORD opcode) ! 6665: { ! 6666: ULONG srcreg = 6; ! 6667: ULONG dstreg = (opcode & 7) >> 0; ! 6668: {{ ULONG src = srcreg; ! 6669: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 6670: { CPTR dsta = regs.a[dstreg]; ! 6671: BYTE dst = get_byte(dsta); ! 6672: { ULONG newv = dst - src; ! 6673: { bool flgs = ((BYTE)(src)) < 0; ! 6674: bool flgo = ((BYTE)(dst)) < 0; ! 6675: bool flgn = ((BYTE)(newv)) < 0; ! 6676: regs.z = ((BYTE)(newv)) == 0; ! 6677: regs.v = (flgs != flgo) && (flgn != flgo); ! 6678: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 6679: regs.n = flgn != 0; ! 6680: put_byte(dsta,newv); ! 6681: }}}}}}} ! 6682: void op_5d28(UWORD opcode) ! 6683: { ! 6684: ULONG srcreg = 6; ! 6685: ULONG dstreg = (opcode & 7) >> 0; ! 6686: {{ ULONG src = srcreg; ! 6687: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 6688: BYTE dst = get_byte(dsta); ! 6689: { ULONG newv = dst - src; ! 6690: { bool flgs = ((BYTE)(src)) < 0; ! 6691: bool flgo = ((BYTE)(dst)) < 0; ! 6692: bool flgn = ((BYTE)(newv)) < 0; ! 6693: regs.z = ((BYTE)(newv)) == 0; ! 6694: regs.v = (flgs != flgo) && (flgn != flgo); ! 6695: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 6696: regs.n = flgn != 0; ! 6697: put_byte(dsta,newv); ! 6698: }}}}}} ! 6699: void op_5d30(UWORD opcode) ! 6700: { ! 6701: ULONG srcreg = 6; ! 6702: ULONG dstreg = (opcode & 7) >> 0; ! 6703: {{ ULONG src = srcreg; ! 6704: { CPTR dsta = regs.a[dstreg]; ! 6705: UWORD dstdp = nextiword(); ! 6706: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 6707: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 6708: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 6709: dsta += dstdpr; ! 6710: { BYTE dst = get_byte(dsta); ! 6711: { ULONG newv = dst - src; ! 6712: { bool flgs = ((BYTE)(src)) < 0; ! 6713: bool flgo = ((BYTE)(dst)) < 0; ! 6714: bool flgn = ((BYTE)(newv)) < 0; ! 6715: regs.z = ((BYTE)(newv)) == 0; ! 6716: regs.v = (flgs != flgo) && (flgn != flgo); ! 6717: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 6718: regs.n = flgn != 0; ! 6719: put_byte(dsta,newv); ! 6720: }}}}}}}} ! 6721: void op_5d38(UWORD opcode) ! 6722: { ! 6723: ULONG srcreg = 6; ! 6724: {{ ULONG src = srcreg; ! 6725: { CPTR dsta = (LONG)(WORD)nextiword(); ! 6726: BYTE dst = get_byte(dsta); ! 6727: { ULONG newv = dst - src; ! 6728: { bool flgs = ((BYTE)(src)) < 0; ! 6729: bool flgo = ((BYTE)(dst)) < 0; ! 6730: bool flgn = ((BYTE)(newv)) < 0; ! 6731: regs.z = ((BYTE)(newv)) == 0; ! 6732: regs.v = (flgs != flgo) && (flgn != flgo); ! 6733: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 6734: regs.n = flgn != 0; ! 6735: put_byte(dsta,newv); ! 6736: }}}}}} ! 6737: void op_5d39(UWORD opcode) ! 6738: { ! 6739: ULONG srcreg = 6; ! 6740: {{ ULONG src = srcreg; ! 6741: { CPTR dsta = nextilong(); ! 6742: BYTE dst = get_byte(dsta); ! 6743: { ULONG newv = dst - src; ! 6744: { bool flgs = ((BYTE)(src)) < 0; ! 6745: bool flgo = ((BYTE)(dst)) < 0; ! 6746: bool flgn = ((BYTE)(newv)) < 0; ! 6747: regs.z = ((BYTE)(newv)) == 0; ! 6748: regs.v = (flgs != flgo) && (flgn != flgo); ! 6749: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 6750: regs.n = flgn != 0; ! 6751: put_byte(dsta,newv); ! 6752: }}}}}} ! 6753: void op_5d40(UWORD opcode) ! 6754: { ! 6755: ULONG srcreg = 6; ! 6756: ULONG dstreg = (opcode & 7) >> 0; ! 6757: {{ ULONG src = srcreg; ! 6758: { WORD dst = regs.d[dstreg]; ! 6759: { ULONG newv = dst - src; ! 6760: { bool flgs = ((WORD)(src)) < 0; ! 6761: bool flgo = ((WORD)(dst)) < 0; ! 6762: bool flgn = ((WORD)(newv)) < 0; ! 6763: regs.z = ((WORD)(newv)) == 0; ! 6764: regs.v = (flgs != flgo) && (flgn != flgo); ! 6765: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 6766: regs.n = flgn != 0; ! 6767: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 6768: }}}}}} ! 6769: void op_5d48(UWORD opcode) ! 6770: { ! 6771: ULONG srcreg = 6; ! 6772: ULONG dstreg = (opcode & 7) >> 0; ! 6773: {{ ULONG src = srcreg; ! 6774: { LONG dst = regs.a[dstreg]; ! 6775: { ULONG newv = dst - src; ! 6776: regs.a[dstreg] = (newv); ! 6777: }}}}} ! 6778: void op_5d50(UWORD opcode) ! 6779: { ! 6780: ULONG srcreg = 6; ! 6781: ULONG dstreg = (opcode & 7) >> 0; ! 6782: {{ ULONG src = srcreg; ! 6783: { CPTR dsta = regs.a[dstreg]; ! 6784: WORD dst = get_word(dsta); ! 6785: { ULONG newv = dst - src; ! 6786: { bool flgs = ((WORD)(src)) < 0; ! 6787: bool flgo = ((WORD)(dst)) < 0; ! 6788: bool flgn = ((WORD)(newv)) < 0; ! 6789: regs.z = ((WORD)(newv)) == 0; ! 6790: regs.v = (flgs != flgo) && (flgn != flgo); ! 6791: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 6792: regs.n = flgn != 0; ! 6793: put_word(dsta,newv); ! 6794: }}}}}} ! 6795: void op_5d58(UWORD opcode) ! 6796: { ! 6797: ULONG srcreg = 6; ! 6798: ULONG dstreg = (opcode & 7) >> 0; ! 6799: {{ ULONG src = srcreg; ! 6800: { CPTR dsta = regs.a[dstreg]; ! 6801: WORD dst = get_word(dsta); ! 6802: { regs.a[dstreg] += 2; ! 6803: { ULONG newv = dst - src; ! 6804: { bool flgs = ((WORD)(src)) < 0; ! 6805: bool flgo = ((WORD)(dst)) < 0; ! 6806: bool flgn = ((WORD)(newv)) < 0; ! 6807: regs.z = ((WORD)(newv)) == 0; ! 6808: regs.v = (flgs != flgo) && (flgn != flgo); ! 6809: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 6810: regs.n = flgn != 0; ! 6811: put_word(dsta,newv); ! 6812: }}}}}}} ! 6813: void op_5d60(UWORD opcode) ! 6814: { ! 6815: ULONG srcreg = 6; ! 6816: ULONG dstreg = (opcode & 7) >> 0; ! 6817: {{ ULONG src = srcreg; ! 6818: { regs.a[dstreg] -= 2; ! 6819: { CPTR dsta = regs.a[dstreg]; ! 6820: WORD dst = get_word(dsta); ! 6821: { ULONG newv = dst - src; ! 6822: { bool flgs = ((WORD)(src)) < 0; ! 6823: bool flgo = ((WORD)(dst)) < 0; ! 6824: bool flgn = ((WORD)(newv)) < 0; ! 6825: regs.z = ((WORD)(newv)) == 0; ! 6826: regs.v = (flgs != flgo) && (flgn != flgo); ! 6827: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 6828: regs.n = flgn != 0; ! 6829: put_word(dsta,newv); ! 6830: }}}}}}} ! 6831: void op_5d68(UWORD opcode) ! 6832: { ! 6833: ULONG srcreg = 6; ! 6834: ULONG dstreg = (opcode & 7) >> 0; ! 6835: {{ ULONG src = srcreg; ! 6836: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 6837: WORD dst = get_word(dsta); ! 6838: { ULONG newv = dst - src; ! 6839: { bool flgs = ((WORD)(src)) < 0; ! 6840: bool flgo = ((WORD)(dst)) < 0; ! 6841: bool flgn = ((WORD)(newv)) < 0; ! 6842: regs.z = ((WORD)(newv)) == 0; ! 6843: regs.v = (flgs != flgo) && (flgn != flgo); ! 6844: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 6845: regs.n = flgn != 0; ! 6846: put_word(dsta,newv); ! 6847: }}}}}} ! 6848: void op_5d70(UWORD opcode) ! 6849: { ! 6850: ULONG srcreg = 6; ! 6851: ULONG dstreg = (opcode & 7) >> 0; ! 6852: {{ ULONG src = srcreg; ! 6853: { CPTR dsta = regs.a[dstreg]; ! 6854: UWORD dstdp = nextiword(); ! 6855: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 6856: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 6857: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 6858: dsta += dstdpr; ! 6859: { WORD dst = get_word(dsta); ! 6860: { ULONG newv = dst - src; ! 6861: { bool flgs = ((WORD)(src)) < 0; ! 6862: bool flgo = ((WORD)(dst)) < 0; ! 6863: bool flgn = ((WORD)(newv)) < 0; ! 6864: regs.z = ((WORD)(newv)) == 0; ! 6865: regs.v = (flgs != flgo) && (flgn != flgo); ! 6866: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 6867: regs.n = flgn != 0; ! 6868: put_word(dsta,newv); ! 6869: }}}}}}}} ! 6870: void op_5d78(UWORD opcode) ! 6871: { ! 6872: ULONG srcreg = 6; ! 6873: {{ ULONG src = srcreg; ! 6874: { CPTR dsta = (LONG)(WORD)nextiword(); ! 6875: WORD dst = get_word(dsta); ! 6876: { ULONG newv = dst - src; ! 6877: { bool flgs = ((WORD)(src)) < 0; ! 6878: bool flgo = ((WORD)(dst)) < 0; ! 6879: bool flgn = ((WORD)(newv)) < 0; ! 6880: regs.z = ((WORD)(newv)) == 0; ! 6881: regs.v = (flgs != flgo) && (flgn != flgo); ! 6882: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 6883: regs.n = flgn != 0; ! 6884: put_word(dsta,newv); ! 6885: }}}}}} ! 6886: void op_5d79(UWORD opcode) ! 6887: { ! 6888: ULONG srcreg = 6; ! 6889: {{ ULONG src = srcreg; ! 6890: { CPTR dsta = nextilong(); ! 6891: WORD dst = get_word(dsta); ! 6892: { ULONG newv = dst - src; ! 6893: { bool flgs = ((WORD)(src)) < 0; ! 6894: bool flgo = ((WORD)(dst)) < 0; ! 6895: bool flgn = ((WORD)(newv)) < 0; ! 6896: regs.z = ((WORD)(newv)) == 0; ! 6897: regs.v = (flgs != flgo) && (flgn != flgo); ! 6898: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 6899: regs.n = flgn != 0; ! 6900: put_word(dsta,newv); ! 6901: }}}}}} ! 6902: void op_5d80(UWORD opcode) ! 6903: { ! 6904: ULONG srcreg = 6; ! 6905: ULONG dstreg = (opcode & 7) >> 0; ! 6906: {{ ULONG src = srcreg; ! 6907: { LONG dst = regs.d[dstreg]; ! 6908: { ULONG newv = dst - src; ! 6909: { bool flgs = ((LONG)(src)) < 0; ! 6910: bool flgo = ((LONG)(dst)) < 0; ! 6911: bool flgn = ((LONG)(newv)) < 0; ! 6912: regs.z = ((LONG)(newv)) == 0; ! 6913: regs.v = (flgs != flgo) && (flgn != flgo); ! 6914: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 6915: regs.n = flgn != 0; ! 6916: regs.d[dstreg] = (newv); ! 6917: }}}}}} ! 6918: void op_5d88(UWORD opcode) ! 6919: { ! 6920: ULONG srcreg = 6; ! 6921: ULONG dstreg = (opcode & 7) >> 0; ! 6922: {{ ULONG src = srcreg; ! 6923: { LONG dst = regs.a[dstreg]; ! 6924: { ULONG newv = dst - src; ! 6925: regs.a[dstreg] = (newv); ! 6926: }}}}} ! 6927: void op_5d90(UWORD opcode) ! 6928: { ! 6929: ULONG srcreg = 6; ! 6930: ULONG dstreg = (opcode & 7) >> 0; ! 6931: {{ ULONG src = srcreg; ! 6932: { CPTR dsta = regs.a[dstreg]; ! 6933: LONG dst = get_long(dsta); ! 6934: { ULONG newv = dst - src; ! 6935: { bool flgs = ((LONG)(src)) < 0; ! 6936: bool flgo = ((LONG)(dst)) < 0; ! 6937: bool flgn = ((LONG)(newv)) < 0; ! 6938: regs.z = ((LONG)(newv)) == 0; ! 6939: regs.v = (flgs != flgo) && (flgn != flgo); ! 6940: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 6941: regs.n = flgn != 0; ! 6942: put_long(dsta,newv); ! 6943: }}}}}} ! 6944: void op_5d98(UWORD opcode) ! 6945: { ! 6946: ULONG srcreg = 6; ! 6947: ULONG dstreg = (opcode & 7) >> 0; ! 6948: {{ ULONG src = srcreg; ! 6949: { CPTR dsta = regs.a[dstreg]; ! 6950: LONG dst = get_long(dsta); ! 6951: { regs.a[dstreg] += 4; ! 6952: { ULONG newv = dst - src; ! 6953: { bool flgs = ((LONG)(src)) < 0; ! 6954: bool flgo = ((LONG)(dst)) < 0; ! 6955: bool flgn = ((LONG)(newv)) < 0; ! 6956: regs.z = ((LONG)(newv)) == 0; ! 6957: regs.v = (flgs != flgo) && (flgn != flgo); ! 6958: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 6959: regs.n = flgn != 0; ! 6960: put_long(dsta,newv); ! 6961: }}}}}}} ! 6962: void op_5da0(UWORD opcode) ! 6963: { ! 6964: ULONG srcreg = 6; ! 6965: ULONG dstreg = (opcode & 7) >> 0; ! 6966: {{ ULONG src = srcreg; ! 6967: { regs.a[dstreg] -= 4; ! 6968: { CPTR dsta = regs.a[dstreg]; ! 6969: LONG dst = get_long(dsta); ! 6970: { ULONG newv = dst - src; ! 6971: { bool flgs = ((LONG)(src)) < 0; ! 6972: bool flgo = ((LONG)(dst)) < 0; ! 6973: bool flgn = ((LONG)(newv)) < 0; ! 6974: regs.z = ((LONG)(newv)) == 0; ! 6975: regs.v = (flgs != flgo) && (flgn != flgo); ! 6976: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 6977: regs.n = flgn != 0; ! 6978: put_long(dsta,newv); ! 6979: }}}}}}} ! 6980: void op_5da8(UWORD opcode) ! 6981: { ! 6982: ULONG srcreg = 6; ! 6983: ULONG dstreg = (opcode & 7) >> 0; ! 6984: {{ ULONG src = srcreg; ! 6985: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 6986: LONG dst = get_long(dsta); ! 6987: { ULONG newv = dst - src; ! 6988: { bool flgs = ((LONG)(src)) < 0; ! 6989: bool flgo = ((LONG)(dst)) < 0; ! 6990: bool flgn = ((LONG)(newv)) < 0; ! 6991: regs.z = ((LONG)(newv)) == 0; ! 6992: regs.v = (flgs != flgo) && (flgn != flgo); ! 6993: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 6994: regs.n = flgn != 0; ! 6995: put_long(dsta,newv); ! 6996: }}}}}} ! 6997: void op_5db0(UWORD opcode) ! 6998: { ! 6999: ULONG srcreg = 6; ! 7000: ULONG dstreg = (opcode & 7) >> 0; ! 7001: {{ ULONG src = srcreg; ! 7002: { CPTR dsta = regs.a[dstreg]; ! 7003: UWORD dstdp = nextiword(); ! 7004: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 7005: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 7006: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 7007: dsta += dstdpr; ! 7008: { LONG dst = get_long(dsta); ! 7009: { ULONG newv = dst - src; ! 7010: { bool flgs = ((LONG)(src)) < 0; ! 7011: bool flgo = ((LONG)(dst)) < 0; ! 7012: bool flgn = ((LONG)(newv)) < 0; ! 7013: regs.z = ((LONG)(newv)) == 0; ! 7014: regs.v = (flgs != flgo) && (flgn != flgo); ! 7015: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 7016: regs.n = flgn != 0; ! 7017: put_long(dsta,newv); ! 7018: }}}}}}}} ! 7019: void op_5db8(UWORD opcode) ! 7020: { ! 7021: ULONG srcreg = 6; ! 7022: {{ ULONG src = srcreg; ! 7023: { CPTR dsta = (LONG)(WORD)nextiword(); ! 7024: LONG dst = get_long(dsta); ! 7025: { ULONG newv = dst - src; ! 7026: { bool flgs = ((LONG)(src)) < 0; ! 7027: bool flgo = ((LONG)(dst)) < 0; ! 7028: bool flgn = ((LONG)(newv)) < 0; ! 7029: regs.z = ((LONG)(newv)) == 0; ! 7030: regs.v = (flgs != flgo) && (flgn != flgo); ! 7031: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 7032: regs.n = flgn != 0; ! 7033: put_long(dsta,newv); ! 7034: }}}}}} ! 7035: void op_5db9(UWORD opcode) ! 7036: { ! 7037: ULONG srcreg = 6; ! 7038: {{ ULONG src = srcreg; ! 7039: { CPTR dsta = nextilong(); ! 7040: LONG dst = get_long(dsta); ! 7041: { ULONG newv = dst - src; ! 7042: { bool flgs = ((LONG)(src)) < 0; ! 7043: bool flgo = ((LONG)(dst)) < 0; ! 7044: bool flgn = ((LONG)(newv)) < 0; ! 7045: regs.z = ((LONG)(newv)) == 0; ! 7046: regs.v = (flgs != flgo) && (flgn != flgo); ! 7047: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 7048: regs.n = flgn != 0; ! 7049: put_long(dsta,newv); ! 7050: }}}}}} ! 7051: void op_5dc0(UWORD opcode) ! 7052: { ! 7053: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7054: {{{ int val = cctrue(13) ? 0xff : 0; ! 7055: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 7056: }}}} ! 7057: void op_5dc8(UWORD opcode) ! 7058: { ! 7059: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7060: {{ WORD src = regs.d[srcreg]; ! 7061: { WORD offs = nextiword(); ! 7062: if (!cctrue(13)) { ! 7063: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 7064: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 7065: } ! 7066: }}}} ! 7067: void op_5dd0(UWORD opcode) ! 7068: { ! 7069: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7070: {{ CPTR srca = regs.a[srcreg]; ! 7071: { int val = cctrue(13) ? 0xff : 0; ! 7072: put_byte(srca,val); ! 7073: }}}} ! 7074: void op_5dd8(UWORD opcode) ! 7075: { ! 7076: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7077: {{ CPTR srca = regs.a[srcreg]; ! 7078: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 7079: { int val = cctrue(13) ? 0xff : 0; ! 7080: put_byte(srca,val); ! 7081: }}}}} ! 7082: void op_5de0(UWORD opcode) ! 7083: { ! 7084: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7085: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 7086: { CPTR srca = regs.a[srcreg]; ! 7087: { int val = cctrue(13) ? 0xff : 0; ! 7088: put_byte(srca,val); ! 7089: }}}}} ! 7090: void op_5de8(UWORD opcode) ! 7091: { ! 7092: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7093: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 7094: { int val = cctrue(13) ? 0xff : 0; ! 7095: put_byte(srca,val); ! 7096: }}}} ! 7097: void op_5df0(UWORD opcode) ! 7098: { ! 7099: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7100: {{ CPTR srca = regs.a[srcreg]; ! 7101: UWORD srcdp = nextiword(); ! 7102: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 7103: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 7104: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 7105: srca += srcdpr; ! 7106: { int val = cctrue(13) ? 0xff : 0; ! 7107: put_byte(srca,val); ! 7108: }}}}} ! 7109: void op_5df8(UWORD opcode) ! 7110: { ! 7111: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 7112: { int val = cctrue(13) ? 0xff : 0; ! 7113: put_byte(srca,val); ! 7114: }}}} ! 7115: void op_5df9(UWORD opcode) ! 7116: { ! 7117: {{ CPTR srca = nextilong(); ! 7118: { int val = cctrue(13) ? 0xff : 0; ! 7119: put_byte(srca,val); ! 7120: }}}} ! 7121: void op_5e00(UWORD opcode) ! 7122: { ! 7123: ULONG srcreg = 7; ! 7124: ULONG dstreg = (opcode & 7) >> 0; ! 7125: {{ ULONG src = srcreg; ! 7126: { BYTE dst = regs.d[dstreg]; ! 7127: { ULONG newv = dst + src; ! 7128: { bool flgs = ((BYTE)(src)) < 0; ! 7129: bool flgo = ((BYTE)(dst)) < 0; ! 7130: bool flgn = ((BYTE)(newv)) < 0; ! 7131: regs.z = ((BYTE)(newv)) == 0; ! 7132: regs.v = (flgs == flgo) && (flgn != flgo); ! 7133: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 7134: regs.n = flgn != 0; ! 7135: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 7136: }}}}}} ! 7137: void op_5e10(UWORD opcode) ! 7138: { ! 7139: ULONG srcreg = 7; ! 7140: ULONG dstreg = (opcode & 7) >> 0; ! 7141: {{ ULONG src = srcreg; ! 7142: { CPTR dsta = regs.a[dstreg]; ! 7143: BYTE dst = get_byte(dsta); ! 7144: { ULONG newv = dst + src; ! 7145: { bool flgs = ((BYTE)(src)) < 0; ! 7146: bool flgo = ((BYTE)(dst)) < 0; ! 7147: bool flgn = ((BYTE)(newv)) < 0; ! 7148: regs.z = ((BYTE)(newv)) == 0; ! 7149: regs.v = (flgs == flgo) && (flgn != flgo); ! 7150: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 7151: regs.n = flgn != 0; ! 7152: put_byte(dsta,newv); ! 7153: }}}}}} ! 7154: void op_5e18(UWORD opcode) ! 7155: { ! 7156: ULONG srcreg = 7; ! 7157: ULONG dstreg = (opcode & 7) >> 0; ! 7158: {{ ULONG src = srcreg; ! 7159: { CPTR dsta = regs.a[dstreg]; ! 7160: BYTE dst = get_byte(dsta); ! 7161: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 7162: { ULONG newv = dst + src; ! 7163: { bool flgs = ((BYTE)(src)) < 0; ! 7164: bool flgo = ((BYTE)(dst)) < 0; ! 7165: bool flgn = ((BYTE)(newv)) < 0; ! 7166: regs.z = ((BYTE)(newv)) == 0; ! 7167: regs.v = (flgs == flgo) && (flgn != flgo); ! 7168: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 7169: regs.n = flgn != 0; ! 7170: put_byte(dsta,newv); ! 7171: }}}}}}} ! 7172: void op_5e20(UWORD opcode) ! 7173: { ! 7174: ULONG srcreg = 7; ! 7175: ULONG dstreg = (opcode & 7) >> 0; ! 7176: {{ ULONG src = srcreg; ! 7177: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 7178: { CPTR dsta = regs.a[dstreg]; ! 7179: BYTE dst = get_byte(dsta); ! 7180: { ULONG newv = dst + src; ! 7181: { bool flgs = ((BYTE)(src)) < 0; ! 7182: bool flgo = ((BYTE)(dst)) < 0; ! 7183: bool flgn = ((BYTE)(newv)) < 0; ! 7184: regs.z = ((BYTE)(newv)) == 0; ! 7185: regs.v = (flgs == flgo) && (flgn != flgo); ! 7186: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 7187: regs.n = flgn != 0; ! 7188: put_byte(dsta,newv); ! 7189: }}}}}}} ! 7190: void op_5e28(UWORD opcode) ! 7191: { ! 7192: ULONG srcreg = 7; ! 7193: ULONG dstreg = (opcode & 7) >> 0; ! 7194: {{ ULONG src = srcreg; ! 7195: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 7196: BYTE dst = get_byte(dsta); ! 7197: { ULONG newv = dst + src; ! 7198: { bool flgs = ((BYTE)(src)) < 0; ! 7199: bool flgo = ((BYTE)(dst)) < 0; ! 7200: bool flgn = ((BYTE)(newv)) < 0; ! 7201: regs.z = ((BYTE)(newv)) == 0; ! 7202: regs.v = (flgs == flgo) && (flgn != flgo); ! 7203: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 7204: regs.n = flgn != 0; ! 7205: put_byte(dsta,newv); ! 7206: }}}}}} ! 7207: void op_5e30(UWORD opcode) ! 7208: { ! 7209: ULONG srcreg = 7; ! 7210: ULONG dstreg = (opcode & 7) >> 0; ! 7211: {{ ULONG src = srcreg; ! 7212: { CPTR dsta = regs.a[dstreg]; ! 7213: UWORD dstdp = nextiword(); ! 7214: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 7215: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 7216: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 7217: dsta += dstdpr; ! 7218: { BYTE dst = get_byte(dsta); ! 7219: { ULONG newv = dst + src; ! 7220: { bool flgs = ((BYTE)(src)) < 0; ! 7221: bool flgo = ((BYTE)(dst)) < 0; ! 7222: bool flgn = ((BYTE)(newv)) < 0; ! 7223: regs.z = ((BYTE)(newv)) == 0; ! 7224: regs.v = (flgs == flgo) && (flgn != flgo); ! 7225: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 7226: regs.n = flgn != 0; ! 7227: put_byte(dsta,newv); ! 7228: }}}}}}}} ! 7229: void op_5e38(UWORD opcode) ! 7230: { ! 7231: ULONG srcreg = 7; ! 7232: {{ ULONG src = srcreg; ! 7233: { CPTR dsta = (LONG)(WORD)nextiword(); ! 7234: BYTE dst = get_byte(dsta); ! 7235: { ULONG newv = dst + src; ! 7236: { bool flgs = ((BYTE)(src)) < 0; ! 7237: bool flgo = ((BYTE)(dst)) < 0; ! 7238: bool flgn = ((BYTE)(newv)) < 0; ! 7239: regs.z = ((BYTE)(newv)) == 0; ! 7240: regs.v = (flgs == flgo) && (flgn != flgo); ! 7241: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 7242: regs.n = flgn != 0; ! 7243: put_byte(dsta,newv); ! 7244: }}}}}} ! 7245: void op_5e39(UWORD opcode) ! 7246: { ! 7247: ULONG srcreg = 7; ! 7248: {{ ULONG src = srcreg; ! 7249: { CPTR dsta = nextilong(); ! 7250: BYTE dst = get_byte(dsta); ! 7251: { ULONG newv = dst + src; ! 7252: { bool flgs = ((BYTE)(src)) < 0; ! 7253: bool flgo = ((BYTE)(dst)) < 0; ! 7254: bool flgn = ((BYTE)(newv)) < 0; ! 7255: regs.z = ((BYTE)(newv)) == 0; ! 7256: regs.v = (flgs == flgo) && (flgn != flgo); ! 7257: regs.c = regs.x = ((UBYTE)(~dst)) < ((UBYTE)(src)); ! 7258: regs.n = flgn != 0; ! 7259: put_byte(dsta,newv); ! 7260: }}}}}} ! 7261: void op_5e40(UWORD opcode) ! 7262: { ! 7263: ULONG srcreg = 7; ! 7264: ULONG dstreg = (opcode & 7) >> 0; ! 7265: {{ ULONG src = srcreg; ! 7266: { WORD dst = regs.d[dstreg]; ! 7267: { ULONG newv = dst + src; ! 7268: { bool flgs = ((WORD)(src)) < 0; ! 7269: bool flgo = ((WORD)(dst)) < 0; ! 7270: bool flgn = ((WORD)(newv)) < 0; ! 7271: regs.z = ((WORD)(newv)) == 0; ! 7272: regs.v = (flgs == flgo) && (flgn != flgo); ! 7273: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 7274: regs.n = flgn != 0; ! 7275: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 7276: }}}}}} ! 7277: void op_5e48(UWORD opcode) ! 7278: { ! 7279: ULONG srcreg = 7; ! 7280: ULONG dstreg = (opcode & 7) >> 0; ! 7281: {{ ULONG src = srcreg; ! 7282: { LONG dst = regs.a[dstreg]; ! 7283: { ULONG newv = dst + src; ! 7284: regs.a[dstreg] = (newv); ! 7285: }}}}} ! 7286: void op_5e50(UWORD opcode) ! 7287: { ! 7288: ULONG srcreg = 7; ! 7289: ULONG dstreg = (opcode & 7) >> 0; ! 7290: {{ ULONG src = srcreg; ! 7291: { CPTR dsta = regs.a[dstreg]; ! 7292: WORD dst = get_word(dsta); ! 7293: { ULONG newv = dst + src; ! 7294: { bool flgs = ((WORD)(src)) < 0; ! 7295: bool flgo = ((WORD)(dst)) < 0; ! 7296: bool flgn = ((WORD)(newv)) < 0; ! 7297: regs.z = ((WORD)(newv)) == 0; ! 7298: regs.v = (flgs == flgo) && (flgn != flgo); ! 7299: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 7300: regs.n = flgn != 0; ! 7301: put_word(dsta,newv); ! 7302: }}}}}} ! 7303: void op_5e58(UWORD opcode) ! 7304: { ! 7305: ULONG srcreg = 7; ! 7306: ULONG dstreg = (opcode & 7) >> 0; ! 7307: {{ ULONG src = srcreg; ! 7308: { CPTR dsta = regs.a[dstreg]; ! 7309: WORD dst = get_word(dsta); ! 7310: { regs.a[dstreg] += 2; ! 7311: { ULONG newv = dst + src; ! 7312: { bool flgs = ((WORD)(src)) < 0; ! 7313: bool flgo = ((WORD)(dst)) < 0; ! 7314: bool flgn = ((WORD)(newv)) < 0; ! 7315: regs.z = ((WORD)(newv)) == 0; ! 7316: regs.v = (flgs == flgo) && (flgn != flgo); ! 7317: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 7318: regs.n = flgn != 0; ! 7319: put_word(dsta,newv); ! 7320: }}}}}}} ! 7321: void op_5e60(UWORD opcode) ! 7322: { ! 7323: ULONG srcreg = 7; ! 7324: ULONG dstreg = (opcode & 7) >> 0; ! 7325: {{ ULONG src = srcreg; ! 7326: { regs.a[dstreg] -= 2; ! 7327: { CPTR dsta = regs.a[dstreg]; ! 7328: WORD dst = get_word(dsta); ! 7329: { ULONG newv = dst + src; ! 7330: { bool flgs = ((WORD)(src)) < 0; ! 7331: bool flgo = ((WORD)(dst)) < 0; ! 7332: bool flgn = ((WORD)(newv)) < 0; ! 7333: regs.z = ((WORD)(newv)) == 0; ! 7334: regs.v = (flgs == flgo) && (flgn != flgo); ! 7335: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 7336: regs.n = flgn != 0; ! 7337: put_word(dsta,newv); ! 7338: }}}}}}} ! 7339: void op_5e68(UWORD opcode) ! 7340: { ! 7341: ULONG srcreg = 7; ! 7342: ULONG dstreg = (opcode & 7) >> 0; ! 7343: {{ ULONG src = srcreg; ! 7344: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 7345: WORD dst = get_word(dsta); ! 7346: { ULONG newv = dst + src; ! 7347: { bool flgs = ((WORD)(src)) < 0; ! 7348: bool flgo = ((WORD)(dst)) < 0; ! 7349: bool flgn = ((WORD)(newv)) < 0; ! 7350: regs.z = ((WORD)(newv)) == 0; ! 7351: regs.v = (flgs == flgo) && (flgn != flgo); ! 7352: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 7353: regs.n = flgn != 0; ! 7354: put_word(dsta,newv); ! 7355: }}}}}} ! 7356: void op_5e70(UWORD opcode) ! 7357: { ! 7358: ULONG srcreg = 7; ! 7359: ULONG dstreg = (opcode & 7) >> 0; ! 7360: {{ ULONG src = srcreg; ! 7361: { CPTR dsta = regs.a[dstreg]; ! 7362: UWORD dstdp = nextiword(); ! 7363: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 7364: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 7365: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 7366: dsta += dstdpr; ! 7367: { WORD dst = get_word(dsta); ! 7368: { ULONG newv = dst + src; ! 7369: { bool flgs = ((WORD)(src)) < 0; ! 7370: bool flgo = ((WORD)(dst)) < 0; ! 7371: bool flgn = ((WORD)(newv)) < 0; ! 7372: regs.z = ((WORD)(newv)) == 0; ! 7373: regs.v = (flgs == flgo) && (flgn != flgo); ! 7374: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 7375: regs.n = flgn != 0; ! 7376: put_word(dsta,newv); ! 7377: }}}}}}}} ! 7378: void op_5e78(UWORD opcode) ! 7379: { ! 7380: ULONG srcreg = 7; ! 7381: {{ ULONG src = srcreg; ! 7382: { CPTR dsta = (LONG)(WORD)nextiword(); ! 7383: WORD dst = get_word(dsta); ! 7384: { ULONG newv = dst + src; ! 7385: { bool flgs = ((WORD)(src)) < 0; ! 7386: bool flgo = ((WORD)(dst)) < 0; ! 7387: bool flgn = ((WORD)(newv)) < 0; ! 7388: regs.z = ((WORD)(newv)) == 0; ! 7389: regs.v = (flgs == flgo) && (flgn != flgo); ! 7390: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 7391: regs.n = flgn != 0; ! 7392: put_word(dsta,newv); ! 7393: }}}}}} ! 7394: void op_5e79(UWORD opcode) ! 7395: { ! 7396: ULONG srcreg = 7; ! 7397: {{ ULONG src = srcreg; ! 7398: { CPTR dsta = nextilong(); ! 7399: WORD dst = get_word(dsta); ! 7400: { ULONG newv = dst + src; ! 7401: { bool flgs = ((WORD)(src)) < 0; ! 7402: bool flgo = ((WORD)(dst)) < 0; ! 7403: bool flgn = ((WORD)(newv)) < 0; ! 7404: regs.z = ((WORD)(newv)) == 0; ! 7405: regs.v = (flgs == flgo) && (flgn != flgo); ! 7406: regs.c = regs.x = ((UWORD)(~dst)) < ((UWORD)(src)); ! 7407: regs.n = flgn != 0; ! 7408: put_word(dsta,newv); ! 7409: }}}}}} ! 7410: void op_5e80(UWORD opcode) ! 7411: { ! 7412: ULONG srcreg = 7; ! 7413: ULONG dstreg = (opcode & 7) >> 0; ! 7414: {{ ULONG src = srcreg; ! 7415: { LONG dst = regs.d[dstreg]; ! 7416: { ULONG newv = dst + src; ! 7417: { bool flgs = ((LONG)(src)) < 0; ! 7418: bool flgo = ((LONG)(dst)) < 0; ! 7419: bool flgn = ((LONG)(newv)) < 0; ! 7420: regs.z = ((LONG)(newv)) == 0; ! 7421: regs.v = (flgs == flgo) && (flgn != flgo); ! 7422: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 7423: regs.n = flgn != 0; ! 7424: regs.d[dstreg] = (newv); ! 7425: }}}}}} ! 7426: void op_5e88(UWORD opcode) ! 7427: { ! 7428: ULONG srcreg = 7; ! 7429: ULONG dstreg = (opcode & 7) >> 0; ! 7430: {{ ULONG src = srcreg; ! 7431: { LONG dst = regs.a[dstreg]; ! 7432: { ULONG newv = dst + src; ! 7433: regs.a[dstreg] = (newv); ! 7434: }}}}} ! 7435: void op_5e90(UWORD opcode) ! 7436: { ! 7437: ULONG srcreg = 7; ! 7438: ULONG dstreg = (opcode & 7) >> 0; ! 7439: {{ ULONG src = srcreg; ! 7440: { CPTR dsta = regs.a[dstreg]; ! 7441: LONG dst = get_long(dsta); ! 7442: { ULONG newv = dst + src; ! 7443: { bool flgs = ((LONG)(src)) < 0; ! 7444: bool flgo = ((LONG)(dst)) < 0; ! 7445: bool flgn = ((LONG)(newv)) < 0; ! 7446: regs.z = ((LONG)(newv)) == 0; ! 7447: regs.v = (flgs == flgo) && (flgn != flgo); ! 7448: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 7449: regs.n = flgn != 0; ! 7450: put_long(dsta,newv); ! 7451: }}}}}} ! 7452: void op_5e98(UWORD opcode) ! 7453: { ! 7454: ULONG srcreg = 7; ! 7455: ULONG dstreg = (opcode & 7) >> 0; ! 7456: {{ ULONG src = srcreg; ! 7457: { CPTR dsta = regs.a[dstreg]; ! 7458: LONG dst = get_long(dsta); ! 7459: { regs.a[dstreg] += 4; ! 7460: { ULONG newv = dst + src; ! 7461: { bool flgs = ((LONG)(src)) < 0; ! 7462: bool flgo = ((LONG)(dst)) < 0; ! 7463: bool flgn = ((LONG)(newv)) < 0; ! 7464: regs.z = ((LONG)(newv)) == 0; ! 7465: regs.v = (flgs == flgo) && (flgn != flgo); ! 7466: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 7467: regs.n = flgn != 0; ! 7468: put_long(dsta,newv); ! 7469: }}}}}}} ! 7470: void op_5ea0(UWORD opcode) ! 7471: { ! 7472: ULONG srcreg = 7; ! 7473: ULONG dstreg = (opcode & 7) >> 0; ! 7474: {{ ULONG src = srcreg; ! 7475: { regs.a[dstreg] -= 4; ! 7476: { CPTR dsta = regs.a[dstreg]; ! 7477: LONG dst = get_long(dsta); ! 7478: { ULONG newv = dst + src; ! 7479: { bool flgs = ((LONG)(src)) < 0; ! 7480: bool flgo = ((LONG)(dst)) < 0; ! 7481: bool flgn = ((LONG)(newv)) < 0; ! 7482: regs.z = ((LONG)(newv)) == 0; ! 7483: regs.v = (flgs == flgo) && (flgn != flgo); ! 7484: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 7485: regs.n = flgn != 0; ! 7486: put_long(dsta,newv); ! 7487: }}}}}}} ! 7488: void op_5ea8(UWORD opcode) ! 7489: { ! 7490: ULONG srcreg = 7; ! 7491: ULONG dstreg = (opcode & 7) >> 0; ! 7492: {{ ULONG src = srcreg; ! 7493: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 7494: LONG dst = get_long(dsta); ! 7495: { ULONG newv = dst + src; ! 7496: { bool flgs = ((LONG)(src)) < 0; ! 7497: bool flgo = ((LONG)(dst)) < 0; ! 7498: bool flgn = ((LONG)(newv)) < 0; ! 7499: regs.z = ((LONG)(newv)) == 0; ! 7500: regs.v = (flgs == flgo) && (flgn != flgo); ! 7501: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 7502: regs.n = flgn != 0; ! 7503: put_long(dsta,newv); ! 7504: }}}}}} ! 7505: void op_5eb0(UWORD opcode) ! 7506: { ! 7507: ULONG srcreg = 7; ! 7508: ULONG dstreg = (opcode & 7) >> 0; ! 7509: {{ ULONG src = srcreg; ! 7510: { CPTR dsta = regs.a[dstreg]; ! 7511: UWORD dstdp = nextiword(); ! 7512: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 7513: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 7514: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 7515: dsta += dstdpr; ! 7516: { LONG dst = get_long(dsta); ! 7517: { ULONG newv = dst + src; ! 7518: { bool flgs = ((LONG)(src)) < 0; ! 7519: bool flgo = ((LONG)(dst)) < 0; ! 7520: bool flgn = ((LONG)(newv)) < 0; ! 7521: regs.z = ((LONG)(newv)) == 0; ! 7522: regs.v = (flgs == flgo) && (flgn != flgo); ! 7523: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 7524: regs.n = flgn != 0; ! 7525: put_long(dsta,newv); ! 7526: }}}}}}}} ! 7527: void op_5eb8(UWORD opcode) ! 7528: { ! 7529: ULONG srcreg = 7; ! 7530: {{ ULONG src = srcreg; ! 7531: { CPTR dsta = (LONG)(WORD)nextiword(); ! 7532: LONG dst = get_long(dsta); ! 7533: { ULONG newv = dst + src; ! 7534: { bool flgs = ((LONG)(src)) < 0; ! 7535: bool flgo = ((LONG)(dst)) < 0; ! 7536: bool flgn = ((LONG)(newv)) < 0; ! 7537: regs.z = ((LONG)(newv)) == 0; ! 7538: regs.v = (flgs == flgo) && (flgn != flgo); ! 7539: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 7540: regs.n = flgn != 0; ! 7541: put_long(dsta,newv); ! 7542: }}}}}} ! 7543: void op_5eb9(UWORD opcode) ! 7544: { ! 7545: ULONG srcreg = 7; ! 7546: {{ ULONG src = srcreg; ! 7547: { CPTR dsta = nextilong(); ! 7548: LONG dst = get_long(dsta); ! 7549: { ULONG newv = dst + src; ! 7550: { bool flgs = ((LONG)(src)) < 0; ! 7551: bool flgo = ((LONG)(dst)) < 0; ! 7552: bool flgn = ((LONG)(newv)) < 0; ! 7553: regs.z = ((LONG)(newv)) == 0; ! 7554: regs.v = (flgs == flgo) && (flgn != flgo); ! 7555: regs.c = regs.x = ((ULONG)(~dst)) < ((ULONG)(src)); ! 7556: regs.n = flgn != 0; ! 7557: put_long(dsta,newv); ! 7558: }}}}}} ! 7559: void op_5ec0(UWORD opcode) ! 7560: { ! 7561: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7562: {{{ int val = cctrue(14) ? 0xff : 0; ! 7563: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 7564: }}}} ! 7565: void op_5ec8(UWORD opcode) ! 7566: { ! 7567: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7568: {{ WORD src = regs.d[srcreg]; ! 7569: { WORD offs = nextiword(); ! 7570: if (!cctrue(14)) { ! 7571: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 7572: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 7573: } ! 7574: }}}} ! 7575: void op_5ed0(UWORD opcode) ! 7576: { ! 7577: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7578: {{ CPTR srca = regs.a[srcreg]; ! 7579: { int val = cctrue(14) ? 0xff : 0; ! 7580: put_byte(srca,val); ! 7581: }}}} ! 7582: void op_5ed8(UWORD opcode) ! 7583: { ! 7584: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7585: {{ CPTR srca = regs.a[srcreg]; ! 7586: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 7587: { int val = cctrue(14) ? 0xff : 0; ! 7588: put_byte(srca,val); ! 7589: }}}}} ! 7590: void op_5ee0(UWORD opcode) ! 7591: { ! 7592: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7593: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 7594: { CPTR srca = regs.a[srcreg]; ! 7595: { int val = cctrue(14) ? 0xff : 0; ! 7596: put_byte(srca,val); ! 7597: }}}}} ! 7598: void op_5ee8(UWORD opcode) ! 7599: { ! 7600: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7601: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 7602: { int val = cctrue(14) ? 0xff : 0; ! 7603: put_byte(srca,val); ! 7604: }}}} ! 7605: void op_5ef0(UWORD opcode) ! 7606: { ! 7607: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 7608: {{ CPTR srca = regs.a[srcreg]; ! 7609: UWORD srcdp = nextiword(); ! 7610: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 7611: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 7612: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 7613: srca += srcdpr; ! 7614: { int val = cctrue(14) ? 0xff : 0; ! 7615: put_byte(srca,val); ! 7616: }}}}} ! 7617: void op_5ef8(UWORD opcode) ! 7618: { ! 7619: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 7620: { int val = cctrue(14) ? 0xff : 0; ! 7621: put_byte(srca,val); ! 7622: }}}} ! 7623: void op_5ef9(UWORD opcode) ! 7624: { ! 7625: {{ CPTR srca = nextilong(); ! 7626: { int val = cctrue(14) ? 0xff : 0; ! 7627: put_byte(srca,val); ! 7628: }}}} ! 7629: void op_5f00(UWORD opcode) ! 7630: { ! 7631: ULONG srcreg = 7; ! 7632: ULONG dstreg = (opcode & 7) >> 0; ! 7633: {{ ULONG src = srcreg; ! 7634: { BYTE dst = regs.d[dstreg]; ! 7635: { ULONG newv = dst - src; ! 7636: { bool flgs = ((BYTE)(src)) < 0; ! 7637: bool flgo = ((BYTE)(dst)) < 0; ! 7638: bool flgn = ((BYTE)(newv)) < 0; ! 7639: regs.z = ((BYTE)(newv)) == 0; ! 7640: regs.v = (flgs != flgo) && (flgn != flgo); ! 7641: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 7642: regs.n = flgn != 0; ! 7643: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (newv) & 0xff; ! 7644: }}}}}} ! 7645: void op_5f10(UWORD opcode) ! 7646: { ! 7647: ULONG srcreg = 7; ! 7648: ULONG dstreg = (opcode & 7) >> 0; ! 7649: {{ ULONG src = srcreg; ! 7650: { CPTR dsta = regs.a[dstreg]; ! 7651: BYTE dst = get_byte(dsta); ! 7652: { ULONG newv = dst - src; ! 7653: { bool flgs = ((BYTE)(src)) < 0; ! 7654: bool flgo = ((BYTE)(dst)) < 0; ! 7655: bool flgn = ((BYTE)(newv)) < 0; ! 7656: regs.z = ((BYTE)(newv)) == 0; ! 7657: regs.v = (flgs != flgo) && (flgn != flgo); ! 7658: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 7659: regs.n = flgn != 0; ! 7660: put_byte(dsta,newv); ! 7661: }}}}}} ! 7662: void op_5f18(UWORD opcode) ! 7663: { ! 7664: ULONG srcreg = 7; ! 7665: ULONG dstreg = (opcode & 7) >> 0; ! 7666: {{ ULONG src = srcreg; ! 7667: { CPTR dsta = regs.a[dstreg]; ! 7668: BYTE dst = get_byte(dsta); ! 7669: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 7670: { ULONG newv = dst - src; ! 7671: { bool flgs = ((BYTE)(src)) < 0; ! 7672: bool flgo = ((BYTE)(dst)) < 0; ! 7673: bool flgn = ((BYTE)(newv)) < 0; ! 7674: regs.z = ((BYTE)(newv)) == 0; ! 7675: regs.v = (flgs != flgo) && (flgn != flgo); ! 7676: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 7677: regs.n = flgn != 0; ! 7678: put_byte(dsta,newv); ! 7679: }}}}}}} ! 7680: void op_5f20(UWORD opcode) ! 7681: { ! 7682: ULONG srcreg = 7; ! 7683: ULONG dstreg = (opcode & 7) >> 0; ! 7684: {{ ULONG src = srcreg; ! 7685: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 7686: { CPTR dsta = regs.a[dstreg]; ! 7687: BYTE dst = get_byte(dsta); ! 7688: { ULONG newv = dst - src; ! 7689: { bool flgs = ((BYTE)(src)) < 0; ! 7690: bool flgo = ((BYTE)(dst)) < 0; ! 7691: bool flgn = ((BYTE)(newv)) < 0; ! 7692: regs.z = ((BYTE)(newv)) == 0; ! 7693: regs.v = (flgs != flgo) && (flgn != flgo); ! 7694: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 7695: regs.n = flgn != 0; ! 7696: put_byte(dsta,newv); ! 7697: }}}}}}} ! 7698: void op_5f28(UWORD opcode) ! 7699: { ! 7700: ULONG srcreg = 7; ! 7701: ULONG dstreg = (opcode & 7) >> 0; ! 7702: {{ ULONG src = srcreg; ! 7703: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 7704: BYTE dst = get_byte(dsta); ! 7705: { ULONG newv = dst - src; ! 7706: { bool flgs = ((BYTE)(src)) < 0; ! 7707: bool flgo = ((BYTE)(dst)) < 0; ! 7708: bool flgn = ((BYTE)(newv)) < 0; ! 7709: regs.z = ((BYTE)(newv)) == 0; ! 7710: regs.v = (flgs != flgo) && (flgn != flgo); ! 7711: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 7712: regs.n = flgn != 0; ! 7713: put_byte(dsta,newv); ! 7714: }}}}}} ! 7715: void op_5f30(UWORD opcode) ! 7716: { ! 7717: ULONG srcreg = 7; ! 7718: ULONG dstreg = (opcode & 7) >> 0; ! 7719: {{ ULONG src = srcreg; ! 7720: { CPTR dsta = regs.a[dstreg]; ! 7721: UWORD dstdp = nextiword(); ! 7722: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 7723: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 7724: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 7725: dsta += dstdpr; ! 7726: { BYTE dst = get_byte(dsta); ! 7727: { ULONG newv = dst - src; ! 7728: { bool flgs = ((BYTE)(src)) < 0; ! 7729: bool flgo = ((BYTE)(dst)) < 0; ! 7730: bool flgn = ((BYTE)(newv)) < 0; ! 7731: regs.z = ((BYTE)(newv)) == 0; ! 7732: regs.v = (flgs != flgo) && (flgn != flgo); ! 7733: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 7734: regs.n = flgn != 0; ! 7735: put_byte(dsta,newv); ! 7736: }}}}}}}} ! 7737: void op_5f38(UWORD opcode) ! 7738: { ! 7739: ULONG srcreg = 7; ! 7740: {{ ULONG src = srcreg; ! 7741: { CPTR dsta = (LONG)(WORD)nextiword(); ! 7742: BYTE dst = get_byte(dsta); ! 7743: { ULONG newv = dst - src; ! 7744: { bool flgs = ((BYTE)(src)) < 0; ! 7745: bool flgo = ((BYTE)(dst)) < 0; ! 7746: bool flgn = ((BYTE)(newv)) < 0; ! 7747: regs.z = ((BYTE)(newv)) == 0; ! 7748: regs.v = (flgs != flgo) && (flgn != flgo); ! 7749: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 7750: regs.n = flgn != 0; ! 7751: put_byte(dsta,newv); ! 7752: }}}}}} ! 7753: void op_5f39(UWORD opcode) ! 7754: { ! 7755: ULONG srcreg = 7; ! 7756: {{ ULONG src = srcreg; ! 7757: { CPTR dsta = nextilong(); ! 7758: BYTE dst = get_byte(dsta); ! 7759: { ULONG newv = dst - src; ! 7760: { bool flgs = ((BYTE)(src)) < 0; ! 7761: bool flgo = ((BYTE)(dst)) < 0; ! 7762: bool flgn = ((BYTE)(newv)) < 0; ! 7763: regs.z = ((BYTE)(newv)) == 0; ! 7764: regs.v = (flgs != flgo) && (flgn != flgo); ! 7765: regs.c = regs.x = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 7766: regs.n = flgn != 0; ! 7767: put_byte(dsta,newv); ! 7768: }}}}}} ! 7769: void op_5f40(UWORD opcode) ! 7770: { ! 7771: ULONG srcreg = 7; ! 7772: ULONG dstreg = (opcode & 7) >> 0; ! 7773: {{ ULONG src = srcreg; ! 7774: { WORD dst = regs.d[dstreg]; ! 7775: { ULONG newv = dst - src; ! 7776: { bool flgs = ((WORD)(src)) < 0; ! 7777: bool flgo = ((WORD)(dst)) < 0; ! 7778: bool flgn = ((WORD)(newv)) < 0; ! 7779: regs.z = ((WORD)(newv)) == 0; ! 7780: regs.v = (flgs != flgo) && (flgn != flgo); ! 7781: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 7782: regs.n = flgn != 0; ! 7783: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (newv) & 0xffff; ! 7784: }}}}}} ! 7785: void op_5f48(UWORD opcode) ! 7786: { ! 7787: ULONG srcreg = 7; ! 7788: ULONG dstreg = (opcode & 7) >> 0; ! 7789: {{ ULONG src = srcreg; ! 7790: { LONG dst = regs.a[dstreg]; ! 7791: { ULONG newv = dst - src; ! 7792: regs.a[dstreg] = (newv); ! 7793: }}}}} ! 7794: void op_5f50(UWORD opcode) ! 7795: { ! 7796: ULONG srcreg = 7; ! 7797: ULONG dstreg = (opcode & 7) >> 0; ! 7798: {{ ULONG src = srcreg; ! 7799: { CPTR dsta = regs.a[dstreg]; ! 7800: WORD dst = get_word(dsta); ! 7801: { ULONG newv = dst - src; ! 7802: { bool flgs = ((WORD)(src)) < 0; ! 7803: bool flgo = ((WORD)(dst)) < 0; ! 7804: bool flgn = ((WORD)(newv)) < 0; ! 7805: regs.z = ((WORD)(newv)) == 0; ! 7806: regs.v = (flgs != flgo) && (flgn != flgo); ! 7807: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 7808: regs.n = flgn != 0; ! 7809: put_word(dsta,newv); ! 7810: }}}}}} ! 7811: void op_5f58(UWORD opcode) ! 7812: { ! 7813: ULONG srcreg = 7; ! 7814: ULONG dstreg = (opcode & 7) >> 0; ! 7815: {{ ULONG src = srcreg; ! 7816: { CPTR dsta = regs.a[dstreg]; ! 7817: WORD dst = get_word(dsta); ! 7818: { regs.a[dstreg] += 2; ! 7819: { ULONG newv = dst - src; ! 7820: { bool flgs = ((WORD)(src)) < 0; ! 7821: bool flgo = ((WORD)(dst)) < 0; ! 7822: bool flgn = ((WORD)(newv)) < 0; ! 7823: regs.z = ((WORD)(newv)) == 0; ! 7824: regs.v = (flgs != flgo) && (flgn != flgo); ! 7825: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 7826: regs.n = flgn != 0; ! 7827: put_word(dsta,newv); ! 7828: }}}}}}} ! 7829: void op_5f60(UWORD opcode) ! 7830: { ! 7831: ULONG srcreg = 7; ! 7832: ULONG dstreg = (opcode & 7) >> 0; ! 7833: {{ ULONG src = srcreg; ! 7834: { regs.a[dstreg] -= 2; ! 7835: { CPTR dsta = regs.a[dstreg]; ! 7836: WORD dst = get_word(dsta); ! 7837: { ULONG newv = dst - src; ! 7838: { bool flgs = ((WORD)(src)) < 0; ! 7839: bool flgo = ((WORD)(dst)) < 0; ! 7840: bool flgn = ((WORD)(newv)) < 0; ! 7841: regs.z = ((WORD)(newv)) == 0; ! 7842: regs.v = (flgs != flgo) && (flgn != flgo); ! 7843: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 7844: regs.n = flgn != 0; ! 7845: put_word(dsta,newv); ! 7846: }}}}}}} ! 7847: void op_5f68(UWORD opcode) ! 7848: { ! 7849: ULONG srcreg = 7; ! 7850: ULONG dstreg = (opcode & 7) >> 0; ! 7851: {{ ULONG src = srcreg; ! 7852: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 7853: WORD dst = get_word(dsta); ! 7854: { ULONG newv = dst - src; ! 7855: { bool flgs = ((WORD)(src)) < 0; ! 7856: bool flgo = ((WORD)(dst)) < 0; ! 7857: bool flgn = ((WORD)(newv)) < 0; ! 7858: regs.z = ((WORD)(newv)) == 0; ! 7859: regs.v = (flgs != flgo) && (flgn != flgo); ! 7860: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 7861: regs.n = flgn != 0; ! 7862: put_word(dsta,newv); ! 7863: }}}}}} ! 7864: void op_5f70(UWORD opcode) ! 7865: { ! 7866: ULONG srcreg = 7; ! 7867: ULONG dstreg = (opcode & 7) >> 0; ! 7868: {{ ULONG src = srcreg; ! 7869: { CPTR dsta = regs.a[dstreg]; ! 7870: UWORD dstdp = nextiword(); ! 7871: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 7872: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 7873: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 7874: dsta += dstdpr; ! 7875: { WORD dst = get_word(dsta); ! 7876: { ULONG newv = dst - src; ! 7877: { bool flgs = ((WORD)(src)) < 0; ! 7878: bool flgo = ((WORD)(dst)) < 0; ! 7879: bool flgn = ((WORD)(newv)) < 0; ! 7880: regs.z = ((WORD)(newv)) == 0; ! 7881: regs.v = (flgs != flgo) && (flgn != flgo); ! 7882: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 7883: regs.n = flgn != 0; ! 7884: put_word(dsta,newv); ! 7885: }}}}}}}} ! 7886: void op_5f78(UWORD opcode) ! 7887: { ! 7888: ULONG srcreg = 7; ! 7889: {{ ULONG src = srcreg; ! 7890: { CPTR dsta = (LONG)(WORD)nextiword(); ! 7891: WORD dst = get_word(dsta); ! 7892: { ULONG newv = dst - src; ! 7893: { bool flgs = ((WORD)(src)) < 0; ! 7894: bool flgo = ((WORD)(dst)) < 0; ! 7895: bool flgn = ((WORD)(newv)) < 0; ! 7896: regs.z = ((WORD)(newv)) == 0; ! 7897: regs.v = (flgs != flgo) && (flgn != flgo); ! 7898: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 7899: regs.n = flgn != 0; ! 7900: put_word(dsta,newv); ! 7901: }}}}}} ! 7902: void op_5f79(UWORD opcode) ! 7903: { ! 7904: ULONG srcreg = 7; ! 7905: {{ ULONG src = srcreg; ! 7906: { CPTR dsta = nextilong(); ! 7907: WORD dst = get_word(dsta); ! 7908: { ULONG newv = dst - src; ! 7909: { bool flgs = ((WORD)(src)) < 0; ! 7910: bool flgo = ((WORD)(dst)) < 0; ! 7911: bool flgn = ((WORD)(newv)) < 0; ! 7912: regs.z = ((WORD)(newv)) == 0; ! 7913: regs.v = (flgs != flgo) && (flgn != flgo); ! 7914: regs.c = regs.x = ((UWORD)(src)) > ((UWORD)(dst)); ! 7915: regs.n = flgn != 0; ! 7916: put_word(dsta,newv); ! 7917: }}}}}} ! 7918: void op_5f80(UWORD opcode) ! 7919: { ! 7920: ULONG srcreg = 7; ! 7921: ULONG dstreg = (opcode & 7) >> 0; ! 7922: {{ ULONG src = srcreg; ! 7923: { LONG dst = regs.d[dstreg]; ! 7924: { ULONG newv = dst - src; ! 7925: { bool flgs = ((LONG)(src)) < 0; ! 7926: bool flgo = ((LONG)(dst)) < 0; ! 7927: bool flgn = ((LONG)(newv)) < 0; ! 7928: regs.z = ((LONG)(newv)) == 0; ! 7929: regs.v = (flgs != flgo) && (flgn != flgo); ! 7930: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 7931: regs.n = flgn != 0; ! 7932: regs.d[dstreg] = (newv); ! 7933: }}}}}} ! 7934: void op_5f88(UWORD opcode) ! 7935: { ! 7936: ULONG srcreg = 7; ! 7937: ULONG dstreg = (opcode & 7) >> 0; ! 7938: {{ ULONG src = srcreg; ! 7939: { LONG dst = regs.a[dstreg]; ! 7940: { ULONG newv = dst - src; ! 7941: regs.a[dstreg] = (newv); ! 7942: }}}}} ! 7943: void op_5f90(UWORD opcode) ! 7944: { ! 7945: ULONG srcreg = 7; ! 7946: ULONG dstreg = (opcode & 7) >> 0; ! 7947: {{ ULONG src = srcreg; ! 7948: { CPTR dsta = regs.a[dstreg]; ! 7949: LONG dst = get_long(dsta); ! 7950: { ULONG newv = dst - src; ! 7951: { bool flgs = ((LONG)(src)) < 0; ! 7952: bool flgo = ((LONG)(dst)) < 0; ! 7953: bool flgn = ((LONG)(newv)) < 0; ! 7954: regs.z = ((LONG)(newv)) == 0; ! 7955: regs.v = (flgs != flgo) && (flgn != flgo); ! 7956: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 7957: regs.n = flgn != 0; ! 7958: put_long(dsta,newv); ! 7959: }}}}}} ! 7960: void op_5f98(UWORD opcode) ! 7961: { ! 7962: ULONG srcreg = 7; ! 7963: ULONG dstreg = (opcode & 7) >> 0; ! 7964: {{ ULONG src = srcreg; ! 7965: { CPTR dsta = regs.a[dstreg]; ! 7966: LONG dst = get_long(dsta); ! 7967: { regs.a[dstreg] += 4; ! 7968: { ULONG newv = dst - src; ! 7969: { bool flgs = ((LONG)(src)) < 0; ! 7970: bool flgo = ((LONG)(dst)) < 0; ! 7971: bool flgn = ((LONG)(newv)) < 0; ! 7972: regs.z = ((LONG)(newv)) == 0; ! 7973: regs.v = (flgs != flgo) && (flgn != flgo); ! 7974: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 7975: regs.n = flgn != 0; ! 7976: put_long(dsta,newv); ! 7977: }}}}}}} ! 7978: void op_5fa0(UWORD opcode) ! 7979: { ! 7980: ULONG srcreg = 7; ! 7981: ULONG dstreg = (opcode & 7) >> 0; ! 7982: {{ ULONG src = srcreg; ! 7983: { regs.a[dstreg] -= 4; ! 7984: { CPTR dsta = regs.a[dstreg]; ! 7985: LONG dst = get_long(dsta); ! 7986: { ULONG newv = dst - src; ! 7987: { bool flgs = ((LONG)(src)) < 0; ! 7988: bool flgo = ((LONG)(dst)) < 0; ! 7989: bool flgn = ((LONG)(newv)) < 0; ! 7990: regs.z = ((LONG)(newv)) == 0; ! 7991: regs.v = (flgs != flgo) && (flgn != flgo); ! 7992: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 7993: regs.n = flgn != 0; ! 7994: put_long(dsta,newv); ! 7995: }}}}}}} ! 7996: void op_5fa8(UWORD opcode) ! 7997: { ! 7998: ULONG srcreg = 7; ! 7999: ULONG dstreg = (opcode & 7) >> 0; ! 8000: {{ ULONG src = srcreg; ! 8001: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 8002: LONG dst = get_long(dsta); ! 8003: { ULONG newv = dst - src; ! 8004: { bool flgs = ((LONG)(src)) < 0; ! 8005: bool flgo = ((LONG)(dst)) < 0; ! 8006: bool flgn = ((LONG)(newv)) < 0; ! 8007: regs.z = ((LONG)(newv)) == 0; ! 8008: regs.v = (flgs != flgo) && (flgn != flgo); ! 8009: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 8010: regs.n = flgn != 0; ! 8011: put_long(dsta,newv); ! 8012: }}}}}} ! 8013: void op_5fb0(UWORD opcode) ! 8014: { ! 8015: ULONG srcreg = 7; ! 8016: ULONG dstreg = (opcode & 7) >> 0; ! 8017: {{ ULONG src = srcreg; ! 8018: { CPTR dsta = regs.a[dstreg]; ! 8019: UWORD dstdp = nextiword(); ! 8020: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 8021: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 8022: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 8023: dsta += dstdpr; ! 8024: { LONG dst = get_long(dsta); ! 8025: { ULONG newv = dst - src; ! 8026: { bool flgs = ((LONG)(src)) < 0; ! 8027: bool flgo = ((LONG)(dst)) < 0; ! 8028: bool flgn = ((LONG)(newv)) < 0; ! 8029: regs.z = ((LONG)(newv)) == 0; ! 8030: regs.v = (flgs != flgo) && (flgn != flgo); ! 8031: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 8032: regs.n = flgn != 0; ! 8033: put_long(dsta,newv); ! 8034: }}}}}}}} ! 8035: void op_5fb8(UWORD opcode) ! 8036: { ! 8037: ULONG srcreg = 7; ! 8038: {{ ULONG src = srcreg; ! 8039: { CPTR dsta = (LONG)(WORD)nextiword(); ! 8040: LONG dst = get_long(dsta); ! 8041: { ULONG newv = dst - src; ! 8042: { bool flgs = ((LONG)(src)) < 0; ! 8043: bool flgo = ((LONG)(dst)) < 0; ! 8044: bool flgn = ((LONG)(newv)) < 0; ! 8045: regs.z = ((LONG)(newv)) == 0; ! 8046: regs.v = (flgs != flgo) && (flgn != flgo); ! 8047: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 8048: regs.n = flgn != 0; ! 8049: put_long(dsta,newv); ! 8050: }}}}}} ! 8051: void op_5fb9(UWORD opcode) ! 8052: { ! 8053: ULONG srcreg = 7; ! 8054: {{ ULONG src = srcreg; ! 8055: { CPTR dsta = nextilong(); ! 8056: LONG dst = get_long(dsta); ! 8057: { ULONG newv = dst - src; ! 8058: { bool flgs = ((LONG)(src)) < 0; ! 8059: bool flgo = ((LONG)(dst)) < 0; ! 8060: bool flgn = ((LONG)(newv)) < 0; ! 8061: regs.z = ((LONG)(newv)) == 0; ! 8062: regs.v = (flgs != flgo) && (flgn != flgo); ! 8063: regs.c = regs.x = ((ULONG)(src)) > ((ULONG)(dst)); ! 8064: regs.n = flgn != 0; ! 8065: put_long(dsta,newv); ! 8066: }}}}}} ! 8067: void op_5fc0(UWORD opcode) ! 8068: { ! 8069: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 8070: {{{ int val = cctrue(15) ? 0xff : 0; ! 8071: regs.d[srcreg] &= ~0xff; regs.d[srcreg] |= (val) & 0xff; ! 8072: }}}} ! 8073: void op_5fc8(UWORD opcode) ! 8074: { ! 8075: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 8076: {{ WORD src = regs.d[srcreg]; ! 8077: { WORD offs = nextiword(); ! 8078: if (!cctrue(15)) { ! 8079: if (src--) regs.pc_p = (UWORD *)((char *)regs.pc_p + offs - 2); ! 8080: regs.d[srcreg] &= ~0xffff; regs.d[srcreg] |= (src) & 0xffff; ! 8081: } ! 8082: }}}} ! 8083: void op_5fd0(UWORD opcode) ! 8084: { ! 8085: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 8086: {{ CPTR srca = regs.a[srcreg]; ! 8087: { int val = cctrue(15) ? 0xff : 0; ! 8088: put_byte(srca,val); ! 8089: }}}} ! 8090: void op_5fd8(UWORD opcode) ! 8091: { ! 8092: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 8093: {{ CPTR srca = regs.a[srcreg]; ! 8094: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 8095: { int val = cctrue(15) ? 0xff : 0; ! 8096: put_byte(srca,val); ! 8097: }}}}} ! 8098: void op_5fe0(UWORD opcode) ! 8099: { ! 8100: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 8101: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 8102: { CPTR srca = regs.a[srcreg]; ! 8103: { int val = cctrue(15) ? 0xff : 0; ! 8104: put_byte(srca,val); ! 8105: }}}}} ! 8106: void op_5fe8(UWORD opcode) ! 8107: { ! 8108: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 8109: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 8110: { int val = cctrue(15) ? 0xff : 0; ! 8111: put_byte(srca,val); ! 8112: }}}} ! 8113: void op_5ff0(UWORD opcode) ! 8114: { ! 8115: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 8116: {{ CPTR srca = regs.a[srcreg]; ! 8117: UWORD srcdp = nextiword(); ! 8118: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 8119: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 8120: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 8121: srca += srcdpr; ! 8122: { int val = cctrue(15) ? 0xff : 0; ! 8123: put_byte(srca,val); ! 8124: }}}}} ! 8125: void op_5ff8(UWORD opcode) ! 8126: { ! 8127: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 8128: { int val = cctrue(15) ? 0xff : 0; ! 8129: put_byte(srca,val); ! 8130: }}}} ! 8131: void op_5ff9(UWORD opcode) ! 8132: { ! 8133: {{ CPTR srca = nextilong(); ! 8134: { int val = cctrue(15) ? 0xff : 0; ! 8135: put_byte(srca,val); ! 8136: }}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.