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