|
|
1.1 ! root 1: #include "config.h" ! 2: #include "amiga.h" ! 3: #include "options.h" ! 4: #include <stdlib.h> ! 5: #include "memory.h" ! 6: #include "custom.h" ! 7: #include "newcpu.h" ! 8: #include "cputbl.h" ! 9: void op_b000(UWORD opcode) ! 10: { ! 11: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 12: ULONG dstreg = (opcode & 3584) >> 9; ! 13: {{ BYTE src = regs.d[srcreg]; ! 14: { BYTE dst = regs.d[dstreg]; ! 15: { ULONG newv = dst - src; ! 16: { bool flgs = ((BYTE)(src)) < 0; ! 17: bool flgo = ((BYTE)(dst)) < 0; ! 18: bool flgn = ((BYTE)(newv)) < 0; ! 19: regs.z = ((BYTE)(newv)) == 0; ! 20: regs.v = (flgs != flgo) && (flgn != flgo); ! 21: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 22: regs.n = flgn != 0; ! 23: }}}}}} ! 24: void op_b010(UWORD opcode) ! 25: { ! 26: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 27: ULONG dstreg = (opcode & 3584) >> 9; ! 28: {{ CPTR srca = regs.a[srcreg]; ! 29: BYTE src = get_byte(srca); ! 30: { BYTE dst = regs.d[dstreg]; ! 31: { ULONG newv = dst - src; ! 32: { bool flgs = ((BYTE)(src)) < 0; ! 33: bool flgo = ((BYTE)(dst)) < 0; ! 34: bool flgn = ((BYTE)(newv)) < 0; ! 35: regs.z = ((BYTE)(newv)) == 0; ! 36: regs.v = (flgs != flgo) && (flgn != flgo); ! 37: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 38: regs.n = flgn != 0; ! 39: }}}}}} ! 40: void op_b018(UWORD opcode) ! 41: { ! 42: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 43: ULONG dstreg = (opcode & 3584) >> 9; ! 44: {{ CPTR srca = regs.a[srcreg]; ! 45: BYTE src = get_byte(srca); ! 46: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 47: { BYTE dst = regs.d[dstreg]; ! 48: { ULONG newv = dst - src; ! 49: { bool flgs = ((BYTE)(src)) < 0; ! 50: bool flgo = ((BYTE)(dst)) < 0; ! 51: bool flgn = ((BYTE)(newv)) < 0; ! 52: regs.z = ((BYTE)(newv)) == 0; ! 53: regs.v = (flgs != flgo) && (flgn != flgo); ! 54: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 55: regs.n = flgn != 0; ! 56: }}}}}}} ! 57: void op_b020(UWORD opcode) ! 58: { ! 59: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 60: ULONG dstreg = (opcode & 3584) >> 9; ! 61: {{ regs.a[srcreg] -= (srcreg == 7) ? 2 : 1; ! 62: { CPTR srca = regs.a[srcreg]; ! 63: BYTE src = get_byte(srca); ! 64: { BYTE dst = regs.d[dstreg]; ! 65: { ULONG newv = dst - src; ! 66: { bool flgs = ((BYTE)(src)) < 0; ! 67: bool flgo = ((BYTE)(dst)) < 0; ! 68: bool flgn = ((BYTE)(newv)) < 0; ! 69: regs.z = ((BYTE)(newv)) == 0; ! 70: regs.v = (flgs != flgo) && (flgn != flgo); ! 71: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 72: regs.n = flgn != 0; ! 73: }}}}}}} ! 74: void op_b028(UWORD opcode) ! 75: { ! 76: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 77: ULONG dstreg = (opcode & 3584) >> 9; ! 78: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 79: BYTE src = get_byte(srca); ! 80: { BYTE dst = regs.d[dstreg]; ! 81: { ULONG newv = dst - src; ! 82: { bool flgs = ((BYTE)(src)) < 0; ! 83: bool flgo = ((BYTE)(dst)) < 0; ! 84: bool flgn = ((BYTE)(newv)) < 0; ! 85: regs.z = ((BYTE)(newv)) == 0; ! 86: regs.v = (flgs != flgo) && (flgn != flgo); ! 87: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 88: regs.n = flgn != 0; ! 89: }}}}}} ! 90: void op_b030(UWORD opcode) ! 91: { ! 92: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 93: ULONG dstreg = (opcode & 3584) >> 9; ! 94: {{ CPTR srca = regs.a[srcreg]; ! 95: UWORD srcdp = nextiword(); ! 96: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 97: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 98: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 99: srca += srcdpr; ! 100: { BYTE src = get_byte(srca); ! 101: { BYTE dst = regs.d[dstreg]; ! 102: { ULONG newv = dst - src; ! 103: { bool flgs = ((BYTE)(src)) < 0; ! 104: bool flgo = ((BYTE)(dst)) < 0; ! 105: bool flgn = ((BYTE)(newv)) < 0; ! 106: regs.z = ((BYTE)(newv)) == 0; ! 107: regs.v = (flgs != flgo) && (flgn != flgo); ! 108: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 109: regs.n = flgn != 0; ! 110: }}}}}}}} ! 111: void op_b038(UWORD opcode) ! 112: { ! 113: ULONG dstreg = (opcode & 3584) >> 9; ! 114: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 115: BYTE src = get_byte(srca); ! 116: { BYTE dst = regs.d[dstreg]; ! 117: { ULONG newv = dst - src; ! 118: { bool flgs = ((BYTE)(src)) < 0; ! 119: bool flgo = ((BYTE)(dst)) < 0; ! 120: bool flgn = ((BYTE)(newv)) < 0; ! 121: regs.z = ((BYTE)(newv)) == 0; ! 122: regs.v = (flgs != flgo) && (flgn != flgo); ! 123: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 124: regs.n = flgn != 0; ! 125: }}}}}} ! 126: void op_b039(UWORD opcode) ! 127: { ! 128: ULONG dstreg = (opcode & 3584) >> 9; ! 129: {{ CPTR srca = nextilong(); ! 130: BYTE src = get_byte(srca); ! 131: { BYTE dst = regs.d[dstreg]; ! 132: { ULONG newv = dst - src; ! 133: { bool flgs = ((BYTE)(src)) < 0; ! 134: bool flgo = ((BYTE)(dst)) < 0; ! 135: bool flgn = ((BYTE)(newv)) < 0; ! 136: regs.z = ((BYTE)(newv)) == 0; ! 137: regs.v = (flgs != flgo) && (flgn != flgo); ! 138: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 139: regs.n = flgn != 0; ! 140: }}}}}} ! 141: void op_b03a(UWORD opcode) ! 142: { ! 143: ULONG dstreg = (opcode & 3584) >> 9; ! 144: {{ CPTR srca = m68k_getpc(); ! 145: srca += (LONG)(WORD)nextiword(); ! 146: { BYTE src = get_byte(srca); ! 147: { BYTE dst = regs.d[dstreg]; ! 148: { ULONG newv = dst - src; ! 149: { bool flgs = ((BYTE)(src)) < 0; ! 150: bool flgo = ((BYTE)(dst)) < 0; ! 151: bool flgn = ((BYTE)(newv)) < 0; ! 152: regs.z = ((BYTE)(newv)) == 0; ! 153: regs.v = (flgs != flgo) && (flgn != flgo); ! 154: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 155: regs.n = flgn != 0; ! 156: }}}}}}} ! 157: void op_b03b(UWORD opcode) ! 158: { ! 159: ULONG dstreg = (opcode & 3584) >> 9; ! 160: {{ CPTR srca = m68k_getpc(); ! 161: UWORD srcdp = nextiword(); ! 162: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 163: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 164: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 165: srca += srcdpr; ! 166: { BYTE src = get_byte(srca); ! 167: { BYTE dst = regs.d[dstreg]; ! 168: { ULONG newv = dst - src; ! 169: { bool flgs = ((BYTE)(src)) < 0; ! 170: bool flgo = ((BYTE)(dst)) < 0; ! 171: bool flgn = ((BYTE)(newv)) < 0; ! 172: regs.z = ((BYTE)(newv)) == 0; ! 173: regs.v = (flgs != flgo) && (flgn != flgo); ! 174: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 175: regs.n = flgn != 0; ! 176: }}}}}}}} ! 177: void op_b03c(UWORD opcode) ! 178: { ! 179: ULONG dstreg = (opcode & 3584) >> 9; ! 180: {{ BYTE src = nextiword(); ! 181: { BYTE dst = regs.d[dstreg]; ! 182: { ULONG newv = dst - src; ! 183: { bool flgs = ((BYTE)(src)) < 0; ! 184: bool flgo = ((BYTE)(dst)) < 0; ! 185: bool flgn = ((BYTE)(newv)) < 0; ! 186: regs.z = ((BYTE)(newv)) == 0; ! 187: regs.v = (flgs != flgo) && (flgn != flgo); ! 188: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 189: regs.n = flgn != 0; ! 190: }}}}}} ! 191: void op_b040(UWORD opcode) ! 192: { ! 193: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 194: ULONG dstreg = (opcode & 3584) >> 9; ! 195: {{ WORD src = regs.d[srcreg]; ! 196: { WORD dst = regs.d[dstreg]; ! 197: { ULONG newv = dst - src; ! 198: { bool flgs = ((WORD)(src)) < 0; ! 199: bool flgo = ((WORD)(dst)) < 0; ! 200: bool flgn = ((WORD)(newv)) < 0; ! 201: regs.z = ((WORD)(newv)) == 0; ! 202: regs.v = (flgs != flgo) && (flgn != flgo); ! 203: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 204: regs.n = flgn != 0; ! 205: }}}}}} ! 206: void op_b048(UWORD opcode) ! 207: { ! 208: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 209: ULONG dstreg = (opcode & 3584) >> 9; ! 210: {{ WORD src = regs.a[srcreg]; ! 211: { WORD dst = regs.d[dstreg]; ! 212: { ULONG newv = dst - src; ! 213: { bool flgs = ((WORD)(src)) < 0; ! 214: bool flgo = ((WORD)(dst)) < 0; ! 215: bool flgn = ((WORD)(newv)) < 0; ! 216: regs.z = ((WORD)(newv)) == 0; ! 217: regs.v = (flgs != flgo) && (flgn != flgo); ! 218: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 219: regs.n = flgn != 0; ! 220: }}}}}} ! 221: void op_b050(UWORD opcode) ! 222: { ! 223: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 224: ULONG dstreg = (opcode & 3584) >> 9; ! 225: {{ CPTR srca = regs.a[srcreg]; ! 226: WORD src = get_word(srca); ! 227: { WORD dst = regs.d[dstreg]; ! 228: { ULONG newv = dst - src; ! 229: { bool flgs = ((WORD)(src)) < 0; ! 230: bool flgo = ((WORD)(dst)) < 0; ! 231: bool flgn = ((WORD)(newv)) < 0; ! 232: regs.z = ((WORD)(newv)) == 0; ! 233: regs.v = (flgs != flgo) && (flgn != flgo); ! 234: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 235: regs.n = flgn != 0; ! 236: }}}}}} ! 237: void op_b058(UWORD opcode) ! 238: { ! 239: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 240: ULONG dstreg = (opcode & 3584) >> 9; ! 241: {{ CPTR srca = regs.a[srcreg]; ! 242: WORD src = get_word(srca); ! 243: { regs.a[srcreg] += 2; ! 244: { WORD dst = regs.d[dstreg]; ! 245: { ULONG newv = dst - src; ! 246: { bool flgs = ((WORD)(src)) < 0; ! 247: bool flgo = ((WORD)(dst)) < 0; ! 248: bool flgn = ((WORD)(newv)) < 0; ! 249: regs.z = ((WORD)(newv)) == 0; ! 250: regs.v = (flgs != flgo) && (flgn != flgo); ! 251: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 252: regs.n = flgn != 0; ! 253: }}}}}}} ! 254: void op_b060(UWORD opcode) ! 255: { ! 256: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 257: ULONG dstreg = (opcode & 3584) >> 9; ! 258: {{ regs.a[srcreg] -= 2; ! 259: { CPTR srca = regs.a[srcreg]; ! 260: WORD src = get_word(srca); ! 261: { WORD dst = regs.d[dstreg]; ! 262: { ULONG newv = dst - src; ! 263: { bool flgs = ((WORD)(src)) < 0; ! 264: bool flgo = ((WORD)(dst)) < 0; ! 265: bool flgn = ((WORD)(newv)) < 0; ! 266: regs.z = ((WORD)(newv)) == 0; ! 267: regs.v = (flgs != flgo) && (flgn != flgo); ! 268: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 269: regs.n = flgn != 0; ! 270: }}}}}}} ! 271: void op_b068(UWORD opcode) ! 272: { ! 273: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 274: ULONG dstreg = (opcode & 3584) >> 9; ! 275: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 276: WORD src = get_word(srca); ! 277: { WORD dst = regs.d[dstreg]; ! 278: { ULONG newv = dst - src; ! 279: { bool flgs = ((WORD)(src)) < 0; ! 280: bool flgo = ((WORD)(dst)) < 0; ! 281: bool flgn = ((WORD)(newv)) < 0; ! 282: regs.z = ((WORD)(newv)) == 0; ! 283: regs.v = (flgs != flgo) && (flgn != flgo); ! 284: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 285: regs.n = flgn != 0; ! 286: }}}}}} ! 287: void op_b070(UWORD opcode) ! 288: { ! 289: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 290: ULONG dstreg = (opcode & 3584) >> 9; ! 291: {{ CPTR srca = regs.a[srcreg]; ! 292: UWORD srcdp = nextiword(); ! 293: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 294: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 295: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 296: srca += srcdpr; ! 297: { WORD src = get_word(srca); ! 298: { WORD dst = regs.d[dstreg]; ! 299: { ULONG newv = dst - src; ! 300: { bool flgs = ((WORD)(src)) < 0; ! 301: bool flgo = ((WORD)(dst)) < 0; ! 302: bool flgn = ((WORD)(newv)) < 0; ! 303: regs.z = ((WORD)(newv)) == 0; ! 304: regs.v = (flgs != flgo) && (flgn != flgo); ! 305: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 306: regs.n = flgn != 0; ! 307: }}}}}}}} ! 308: void op_b078(UWORD opcode) ! 309: { ! 310: ULONG dstreg = (opcode & 3584) >> 9; ! 311: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 312: WORD src = get_word(srca); ! 313: { WORD dst = regs.d[dstreg]; ! 314: { ULONG newv = dst - src; ! 315: { bool flgs = ((WORD)(src)) < 0; ! 316: bool flgo = ((WORD)(dst)) < 0; ! 317: bool flgn = ((WORD)(newv)) < 0; ! 318: regs.z = ((WORD)(newv)) == 0; ! 319: regs.v = (flgs != flgo) && (flgn != flgo); ! 320: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 321: regs.n = flgn != 0; ! 322: }}}}}} ! 323: void op_b079(UWORD opcode) ! 324: { ! 325: ULONG dstreg = (opcode & 3584) >> 9; ! 326: {{ CPTR srca = nextilong(); ! 327: WORD src = get_word(srca); ! 328: { WORD dst = regs.d[dstreg]; ! 329: { ULONG newv = dst - src; ! 330: { bool flgs = ((WORD)(src)) < 0; ! 331: bool flgo = ((WORD)(dst)) < 0; ! 332: bool flgn = ((WORD)(newv)) < 0; ! 333: regs.z = ((WORD)(newv)) == 0; ! 334: regs.v = (flgs != flgo) && (flgn != flgo); ! 335: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 336: regs.n = flgn != 0; ! 337: }}}}}} ! 338: void op_b07a(UWORD opcode) ! 339: { ! 340: ULONG dstreg = (opcode & 3584) >> 9; ! 341: {{ CPTR srca = m68k_getpc(); ! 342: srca += (LONG)(WORD)nextiword(); ! 343: { WORD src = get_word(srca); ! 344: { WORD dst = regs.d[dstreg]; ! 345: { ULONG newv = dst - src; ! 346: { bool flgs = ((WORD)(src)) < 0; ! 347: bool flgo = ((WORD)(dst)) < 0; ! 348: bool flgn = ((WORD)(newv)) < 0; ! 349: regs.z = ((WORD)(newv)) == 0; ! 350: regs.v = (flgs != flgo) && (flgn != flgo); ! 351: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 352: regs.n = flgn != 0; ! 353: }}}}}}} ! 354: void op_b07b(UWORD opcode) ! 355: { ! 356: ULONG dstreg = (opcode & 3584) >> 9; ! 357: {{ CPTR srca = m68k_getpc(); ! 358: UWORD srcdp = nextiword(); ! 359: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 360: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 361: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 362: srca += srcdpr; ! 363: { WORD src = get_word(srca); ! 364: { WORD dst = regs.d[dstreg]; ! 365: { ULONG newv = dst - src; ! 366: { bool flgs = ((WORD)(src)) < 0; ! 367: bool flgo = ((WORD)(dst)) < 0; ! 368: bool flgn = ((WORD)(newv)) < 0; ! 369: regs.z = ((WORD)(newv)) == 0; ! 370: regs.v = (flgs != flgo) && (flgn != flgo); ! 371: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 372: regs.n = flgn != 0; ! 373: }}}}}}}} ! 374: void op_b07c(UWORD opcode) ! 375: { ! 376: ULONG dstreg = (opcode & 3584) >> 9; ! 377: {{ WORD src = nextiword(); ! 378: { WORD dst = regs.d[dstreg]; ! 379: { ULONG newv = dst - src; ! 380: { bool flgs = ((WORD)(src)) < 0; ! 381: bool flgo = ((WORD)(dst)) < 0; ! 382: bool flgn = ((WORD)(newv)) < 0; ! 383: regs.z = ((WORD)(newv)) == 0; ! 384: regs.v = (flgs != flgo) && (flgn != flgo); ! 385: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 386: regs.n = flgn != 0; ! 387: }}}}}} ! 388: void op_b080(UWORD opcode) ! 389: { ! 390: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 391: ULONG dstreg = (opcode & 3584) >> 9; ! 392: {{ LONG src = regs.d[srcreg]; ! 393: { LONG dst = regs.d[dstreg]; ! 394: { ULONG newv = dst - src; ! 395: { bool flgs = ((LONG)(src)) < 0; ! 396: bool flgo = ((LONG)(dst)) < 0; ! 397: bool flgn = ((LONG)(newv)) < 0; ! 398: regs.z = ((LONG)(newv)) == 0; ! 399: regs.v = (flgs != flgo) && (flgn != flgo); ! 400: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 401: regs.n = flgn != 0; ! 402: }}}}}} ! 403: void op_b088(UWORD opcode) ! 404: { ! 405: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 406: ULONG dstreg = (opcode & 3584) >> 9; ! 407: {{ LONG src = regs.a[srcreg]; ! 408: { LONG dst = regs.d[dstreg]; ! 409: { ULONG newv = dst - src; ! 410: { bool flgs = ((LONG)(src)) < 0; ! 411: bool flgo = ((LONG)(dst)) < 0; ! 412: bool flgn = ((LONG)(newv)) < 0; ! 413: regs.z = ((LONG)(newv)) == 0; ! 414: regs.v = (flgs != flgo) && (flgn != flgo); ! 415: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 416: regs.n = flgn != 0; ! 417: }}}}}} ! 418: void op_b090(UWORD opcode) ! 419: { ! 420: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 421: ULONG dstreg = (opcode & 3584) >> 9; ! 422: {{ CPTR srca = regs.a[srcreg]; ! 423: LONG src = get_long(srca); ! 424: { LONG dst = regs.d[dstreg]; ! 425: { ULONG newv = dst - src; ! 426: { bool flgs = ((LONG)(src)) < 0; ! 427: bool flgo = ((LONG)(dst)) < 0; ! 428: bool flgn = ((LONG)(newv)) < 0; ! 429: regs.z = ((LONG)(newv)) == 0; ! 430: regs.v = (flgs != flgo) && (flgn != flgo); ! 431: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 432: regs.n = flgn != 0; ! 433: }}}}}} ! 434: void op_b098(UWORD opcode) ! 435: { ! 436: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 437: ULONG dstreg = (opcode & 3584) >> 9; ! 438: {{ CPTR srca = regs.a[srcreg]; ! 439: LONG src = get_long(srca); ! 440: { regs.a[srcreg] += 4; ! 441: { LONG dst = regs.d[dstreg]; ! 442: { ULONG newv = dst - src; ! 443: { bool flgs = ((LONG)(src)) < 0; ! 444: bool flgo = ((LONG)(dst)) < 0; ! 445: bool flgn = ((LONG)(newv)) < 0; ! 446: regs.z = ((LONG)(newv)) == 0; ! 447: regs.v = (flgs != flgo) && (flgn != flgo); ! 448: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 449: regs.n = flgn != 0; ! 450: }}}}}}} ! 451: void op_b0a0(UWORD opcode) ! 452: { ! 453: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 454: ULONG dstreg = (opcode & 3584) >> 9; ! 455: {{ regs.a[srcreg] -= 4; ! 456: { CPTR srca = regs.a[srcreg]; ! 457: LONG src = get_long(srca); ! 458: { LONG dst = regs.d[dstreg]; ! 459: { ULONG newv = dst - src; ! 460: { bool flgs = ((LONG)(src)) < 0; ! 461: bool flgo = ((LONG)(dst)) < 0; ! 462: bool flgn = ((LONG)(newv)) < 0; ! 463: regs.z = ((LONG)(newv)) == 0; ! 464: regs.v = (flgs != flgo) && (flgn != flgo); ! 465: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 466: regs.n = flgn != 0; ! 467: }}}}}}} ! 468: void op_b0a8(UWORD opcode) ! 469: { ! 470: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 471: ULONG dstreg = (opcode & 3584) >> 9; ! 472: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 473: LONG src = get_long(srca); ! 474: { LONG dst = regs.d[dstreg]; ! 475: { ULONG newv = dst - src; ! 476: { bool flgs = ((LONG)(src)) < 0; ! 477: bool flgo = ((LONG)(dst)) < 0; ! 478: bool flgn = ((LONG)(newv)) < 0; ! 479: regs.z = ((LONG)(newv)) == 0; ! 480: regs.v = (flgs != flgo) && (flgn != flgo); ! 481: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 482: regs.n = flgn != 0; ! 483: }}}}}} ! 484: void op_b0b0(UWORD opcode) ! 485: { ! 486: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 487: ULONG dstreg = (opcode & 3584) >> 9; ! 488: {{ CPTR srca = regs.a[srcreg]; ! 489: UWORD srcdp = nextiword(); ! 490: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 491: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 492: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 493: srca += srcdpr; ! 494: { LONG src = get_long(srca); ! 495: { LONG dst = regs.d[dstreg]; ! 496: { ULONG newv = dst - src; ! 497: { bool flgs = ((LONG)(src)) < 0; ! 498: bool flgo = ((LONG)(dst)) < 0; ! 499: bool flgn = ((LONG)(newv)) < 0; ! 500: regs.z = ((LONG)(newv)) == 0; ! 501: regs.v = (flgs != flgo) && (flgn != flgo); ! 502: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 503: regs.n = flgn != 0; ! 504: }}}}}}}} ! 505: void op_b0b8(UWORD opcode) ! 506: { ! 507: ULONG dstreg = (opcode & 3584) >> 9; ! 508: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 509: LONG src = get_long(srca); ! 510: { LONG dst = regs.d[dstreg]; ! 511: { ULONG newv = dst - src; ! 512: { bool flgs = ((LONG)(src)) < 0; ! 513: bool flgo = ((LONG)(dst)) < 0; ! 514: bool flgn = ((LONG)(newv)) < 0; ! 515: regs.z = ((LONG)(newv)) == 0; ! 516: regs.v = (flgs != flgo) && (flgn != flgo); ! 517: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 518: regs.n = flgn != 0; ! 519: }}}}}} ! 520: void op_b0b9(UWORD opcode) ! 521: { ! 522: ULONG dstreg = (opcode & 3584) >> 9; ! 523: {{ CPTR srca = nextilong(); ! 524: LONG src = get_long(srca); ! 525: { LONG dst = regs.d[dstreg]; ! 526: { ULONG newv = dst - src; ! 527: { bool flgs = ((LONG)(src)) < 0; ! 528: bool flgo = ((LONG)(dst)) < 0; ! 529: bool flgn = ((LONG)(newv)) < 0; ! 530: regs.z = ((LONG)(newv)) == 0; ! 531: regs.v = (flgs != flgo) && (flgn != flgo); ! 532: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 533: regs.n = flgn != 0; ! 534: }}}}}} ! 535: void op_b0ba(UWORD opcode) ! 536: { ! 537: ULONG dstreg = (opcode & 3584) >> 9; ! 538: {{ CPTR srca = m68k_getpc(); ! 539: srca += (LONG)(WORD)nextiword(); ! 540: { LONG src = get_long(srca); ! 541: { LONG dst = regs.d[dstreg]; ! 542: { ULONG newv = dst - src; ! 543: { bool flgs = ((LONG)(src)) < 0; ! 544: bool flgo = ((LONG)(dst)) < 0; ! 545: bool flgn = ((LONG)(newv)) < 0; ! 546: regs.z = ((LONG)(newv)) == 0; ! 547: regs.v = (flgs != flgo) && (flgn != flgo); ! 548: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 549: regs.n = flgn != 0; ! 550: }}}}}}} ! 551: void op_b0bb(UWORD opcode) ! 552: { ! 553: ULONG dstreg = (opcode & 3584) >> 9; ! 554: {{ CPTR srca = m68k_getpc(); ! 555: UWORD srcdp = nextiword(); ! 556: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 557: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 558: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 559: srca += srcdpr; ! 560: { LONG src = get_long(srca); ! 561: { LONG dst = regs.d[dstreg]; ! 562: { ULONG newv = dst - src; ! 563: { bool flgs = ((LONG)(src)) < 0; ! 564: bool flgo = ((LONG)(dst)) < 0; ! 565: bool flgn = ((LONG)(newv)) < 0; ! 566: regs.z = ((LONG)(newv)) == 0; ! 567: regs.v = (flgs != flgo) && (flgn != flgo); ! 568: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 569: regs.n = flgn != 0; ! 570: }}}}}}}} ! 571: void op_b0bc(UWORD opcode) ! 572: { ! 573: ULONG dstreg = (opcode & 3584) >> 9; ! 574: {{ LONG src = nextilong(); ! 575: { LONG dst = regs.d[dstreg]; ! 576: { ULONG newv = dst - src; ! 577: { bool flgs = ((LONG)(src)) < 0; ! 578: bool flgo = ((LONG)(dst)) < 0; ! 579: bool flgn = ((LONG)(newv)) < 0; ! 580: regs.z = ((LONG)(newv)) == 0; ! 581: regs.v = (flgs != flgo) && (flgn != flgo); ! 582: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 583: regs.n = flgn != 0; ! 584: }}}}}} ! 585: void op_b0c0(UWORD opcode) ! 586: { ! 587: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 588: ULONG dstreg = (opcode & 3584) >> 9; ! 589: {{ WORD src = regs.d[srcreg]; ! 590: { LONG dst = regs.a[dstreg]; ! 591: { ULONG newv = dst - src; ! 592: { bool flgs = ((LONG)(src)) < 0; ! 593: bool flgo = ((LONG)(dst)) < 0; ! 594: bool flgn = ((LONG)(newv)) < 0; ! 595: regs.z = ((LONG)(newv)) == 0; ! 596: regs.v = (flgs != flgo) && (flgn != flgo); ! 597: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 598: regs.n = flgn != 0; ! 599: }}}}}} ! 600: void op_b0c8(UWORD opcode) ! 601: { ! 602: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 603: ULONG dstreg = (opcode & 3584) >> 9; ! 604: {{ WORD src = regs.a[srcreg]; ! 605: { LONG dst = regs.a[dstreg]; ! 606: { ULONG newv = dst - src; ! 607: { bool flgs = ((LONG)(src)) < 0; ! 608: bool flgo = ((LONG)(dst)) < 0; ! 609: bool flgn = ((LONG)(newv)) < 0; ! 610: regs.z = ((LONG)(newv)) == 0; ! 611: regs.v = (flgs != flgo) && (flgn != flgo); ! 612: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 613: regs.n = flgn != 0; ! 614: }}}}}} ! 615: void op_b0d0(UWORD opcode) ! 616: { ! 617: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 618: ULONG dstreg = (opcode & 3584) >> 9; ! 619: {{ CPTR srca = regs.a[srcreg]; ! 620: WORD src = get_word(srca); ! 621: { LONG dst = regs.a[dstreg]; ! 622: { ULONG newv = dst - src; ! 623: { bool flgs = ((LONG)(src)) < 0; ! 624: bool flgo = ((LONG)(dst)) < 0; ! 625: bool flgn = ((LONG)(newv)) < 0; ! 626: regs.z = ((LONG)(newv)) == 0; ! 627: regs.v = (flgs != flgo) && (flgn != flgo); ! 628: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 629: regs.n = flgn != 0; ! 630: }}}}}} ! 631: void op_b0d8(UWORD opcode) ! 632: { ! 633: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 634: ULONG dstreg = (opcode & 3584) >> 9; ! 635: {{ CPTR srca = regs.a[srcreg]; ! 636: WORD src = get_word(srca); ! 637: { regs.a[srcreg] += 2; ! 638: { LONG dst = regs.a[dstreg]; ! 639: { ULONG newv = dst - src; ! 640: { bool flgs = ((LONG)(src)) < 0; ! 641: bool flgo = ((LONG)(dst)) < 0; ! 642: bool flgn = ((LONG)(newv)) < 0; ! 643: regs.z = ((LONG)(newv)) == 0; ! 644: regs.v = (flgs != flgo) && (flgn != flgo); ! 645: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 646: regs.n = flgn != 0; ! 647: }}}}}}} ! 648: void op_b0e0(UWORD opcode) ! 649: { ! 650: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 651: ULONG dstreg = (opcode & 3584) >> 9; ! 652: {{ regs.a[srcreg] -= 2; ! 653: { CPTR srca = regs.a[srcreg]; ! 654: WORD src = get_word(srca); ! 655: { LONG dst = regs.a[dstreg]; ! 656: { ULONG newv = dst - src; ! 657: { bool flgs = ((LONG)(src)) < 0; ! 658: bool flgo = ((LONG)(dst)) < 0; ! 659: bool flgn = ((LONG)(newv)) < 0; ! 660: regs.z = ((LONG)(newv)) == 0; ! 661: regs.v = (flgs != flgo) && (flgn != flgo); ! 662: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 663: regs.n = flgn != 0; ! 664: }}}}}}} ! 665: void op_b0e8(UWORD opcode) ! 666: { ! 667: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 668: ULONG dstreg = (opcode & 3584) >> 9; ! 669: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 670: WORD src = get_word(srca); ! 671: { LONG dst = regs.a[dstreg]; ! 672: { ULONG newv = dst - src; ! 673: { bool flgs = ((LONG)(src)) < 0; ! 674: bool flgo = ((LONG)(dst)) < 0; ! 675: bool flgn = ((LONG)(newv)) < 0; ! 676: regs.z = ((LONG)(newv)) == 0; ! 677: regs.v = (flgs != flgo) && (flgn != flgo); ! 678: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 679: regs.n = flgn != 0; ! 680: }}}}}} ! 681: void op_b0f0(UWORD opcode) ! 682: { ! 683: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 684: ULONG dstreg = (opcode & 3584) >> 9; ! 685: {{ CPTR srca = regs.a[srcreg]; ! 686: UWORD srcdp = nextiword(); ! 687: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 688: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 689: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 690: srca += srcdpr; ! 691: { WORD src = get_word(srca); ! 692: { LONG dst = regs.a[dstreg]; ! 693: { ULONG newv = dst - src; ! 694: { bool flgs = ((LONG)(src)) < 0; ! 695: bool flgo = ((LONG)(dst)) < 0; ! 696: bool flgn = ((LONG)(newv)) < 0; ! 697: regs.z = ((LONG)(newv)) == 0; ! 698: regs.v = (flgs != flgo) && (flgn != flgo); ! 699: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 700: regs.n = flgn != 0; ! 701: }}}}}}}} ! 702: void op_b0f8(UWORD opcode) ! 703: { ! 704: ULONG dstreg = (opcode & 3584) >> 9; ! 705: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 706: WORD src = get_word(srca); ! 707: { LONG dst = regs.a[dstreg]; ! 708: { ULONG newv = dst - src; ! 709: { bool flgs = ((LONG)(src)) < 0; ! 710: bool flgo = ((LONG)(dst)) < 0; ! 711: bool flgn = ((LONG)(newv)) < 0; ! 712: regs.z = ((LONG)(newv)) == 0; ! 713: regs.v = (flgs != flgo) && (flgn != flgo); ! 714: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 715: regs.n = flgn != 0; ! 716: }}}}}} ! 717: void op_b0f9(UWORD opcode) ! 718: { ! 719: ULONG dstreg = (opcode & 3584) >> 9; ! 720: {{ CPTR srca = nextilong(); ! 721: WORD src = get_word(srca); ! 722: { LONG dst = regs.a[dstreg]; ! 723: { ULONG newv = dst - src; ! 724: { bool flgs = ((LONG)(src)) < 0; ! 725: bool flgo = ((LONG)(dst)) < 0; ! 726: bool flgn = ((LONG)(newv)) < 0; ! 727: regs.z = ((LONG)(newv)) == 0; ! 728: regs.v = (flgs != flgo) && (flgn != flgo); ! 729: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 730: regs.n = flgn != 0; ! 731: }}}}}} ! 732: void op_b0fa(UWORD opcode) ! 733: { ! 734: ULONG dstreg = (opcode & 3584) >> 9; ! 735: {{ CPTR srca = m68k_getpc(); ! 736: srca += (LONG)(WORD)nextiword(); ! 737: { WORD src = get_word(srca); ! 738: { LONG dst = regs.a[dstreg]; ! 739: { ULONG newv = dst - src; ! 740: { bool flgs = ((LONG)(src)) < 0; ! 741: bool flgo = ((LONG)(dst)) < 0; ! 742: bool flgn = ((LONG)(newv)) < 0; ! 743: regs.z = ((LONG)(newv)) == 0; ! 744: regs.v = (flgs != flgo) && (flgn != flgo); ! 745: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 746: regs.n = flgn != 0; ! 747: }}}}}}} ! 748: void op_b0fb(UWORD opcode) ! 749: { ! 750: ULONG dstreg = (opcode & 3584) >> 9; ! 751: {{ CPTR srca = m68k_getpc(); ! 752: UWORD srcdp = nextiword(); ! 753: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 754: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 755: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 756: srca += srcdpr; ! 757: { WORD src = get_word(srca); ! 758: { LONG dst = regs.a[dstreg]; ! 759: { ULONG newv = dst - src; ! 760: { bool flgs = ((LONG)(src)) < 0; ! 761: bool flgo = ((LONG)(dst)) < 0; ! 762: bool flgn = ((LONG)(newv)) < 0; ! 763: regs.z = ((LONG)(newv)) == 0; ! 764: regs.v = (flgs != flgo) && (flgn != flgo); ! 765: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 766: regs.n = flgn != 0; ! 767: }}}}}}}} ! 768: void op_b0fc(UWORD opcode) ! 769: { ! 770: ULONG dstreg = (opcode & 3584) >> 9; ! 771: {{ WORD src = nextiword(); ! 772: { LONG dst = regs.a[dstreg]; ! 773: { ULONG newv = dst - src; ! 774: { bool flgs = ((LONG)(src)) < 0; ! 775: bool flgo = ((LONG)(dst)) < 0; ! 776: bool flgn = ((LONG)(newv)) < 0; ! 777: regs.z = ((LONG)(newv)) == 0; ! 778: regs.v = (flgs != flgo) && (flgn != flgo); ! 779: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 780: regs.n = flgn != 0; ! 781: }}}}}} ! 782: void op_b100(UWORD opcode) ! 783: { ! 784: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 785: ULONG dstreg = (opcode & 7) >> 0; ! 786: {{ BYTE src = regs.d[srcreg]; ! 787: { BYTE dst = regs.d[dstreg]; ! 788: src ^= dst; ! 789: regs.v = regs.c = 0; ! 790: regs.z = ((BYTE)(src)) == 0; ! 791: regs.n = ((BYTE)(src)) < 0; ! 792: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (src) & 0xff; ! 793: }}}} ! 794: void op_b108(UWORD opcode) ! 795: { ! 796: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 797: ULONG dstreg = (opcode & 3584) >> 9; ! 798: {{ CPTR srca = regs.a[srcreg]; ! 799: BYTE src = get_byte(srca); ! 800: { regs.a[srcreg] += (srcreg == 7) ? 2 : 1; ! 801: { CPTR dsta = regs.a[dstreg]; ! 802: BYTE dst = get_byte(dsta); ! 803: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 804: { ULONG newv = dst - src; ! 805: { bool flgs = ((BYTE)(src)) < 0; ! 806: bool flgo = ((BYTE)(dst)) < 0; ! 807: bool flgn = ((BYTE)(newv)) < 0; ! 808: regs.z = ((BYTE)(newv)) == 0; ! 809: regs.v = (flgs != flgo) && (flgn != flgo); ! 810: regs.c = ((UBYTE)(src)) > ((UBYTE)(dst)); ! 811: regs.n = flgn != 0; ! 812: }}}}}}}} ! 813: void op_b110(UWORD opcode) ! 814: { ! 815: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 816: ULONG dstreg = (opcode & 7) >> 0; ! 817: {{ BYTE src = regs.d[srcreg]; ! 818: { CPTR dsta = regs.a[dstreg]; ! 819: BYTE dst = get_byte(dsta); ! 820: src ^= dst; ! 821: regs.v = regs.c = 0; ! 822: regs.z = ((BYTE)(src)) == 0; ! 823: regs.n = ((BYTE)(src)) < 0; ! 824: put_byte(dsta,src); ! 825: }}}} ! 826: void op_b118(UWORD opcode) ! 827: { ! 828: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 829: ULONG dstreg = (opcode & 7) >> 0; ! 830: {{ BYTE src = regs.d[srcreg]; ! 831: { CPTR dsta = regs.a[dstreg]; ! 832: BYTE dst = get_byte(dsta); ! 833: { regs.a[dstreg] += (dstreg == 7) ? 2 : 1; ! 834: src ^= dst; ! 835: regs.v = regs.c = 0; ! 836: regs.z = ((BYTE)(src)) == 0; ! 837: regs.n = ((BYTE)(src)) < 0; ! 838: put_byte(dsta,src); ! 839: }}}}} ! 840: void op_b120(UWORD opcode) ! 841: { ! 842: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 843: ULONG dstreg = (opcode & 7) >> 0; ! 844: {{ BYTE src = regs.d[srcreg]; ! 845: { regs.a[dstreg] -= (dstreg == 7) ? 2 : 1; ! 846: { CPTR dsta = regs.a[dstreg]; ! 847: BYTE dst = get_byte(dsta); ! 848: src ^= dst; ! 849: regs.v = regs.c = 0; ! 850: regs.z = ((BYTE)(src)) == 0; ! 851: regs.n = ((BYTE)(src)) < 0; ! 852: put_byte(dsta,src); ! 853: }}}}} ! 854: void op_b128(UWORD opcode) ! 855: { ! 856: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 857: ULONG dstreg = (opcode & 7) >> 0; ! 858: {{ BYTE src = regs.d[srcreg]; ! 859: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 860: BYTE dst = get_byte(dsta); ! 861: src ^= dst; ! 862: regs.v = regs.c = 0; ! 863: regs.z = ((BYTE)(src)) == 0; ! 864: regs.n = ((BYTE)(src)) < 0; ! 865: put_byte(dsta,src); ! 866: }}}} ! 867: void op_b130(UWORD opcode) ! 868: { ! 869: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 870: ULONG dstreg = (opcode & 7) >> 0; ! 871: {{ BYTE src = regs.d[srcreg]; ! 872: { CPTR dsta = regs.a[dstreg]; ! 873: UWORD dstdp = nextiword(); ! 874: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 875: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 876: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 877: dsta += dstdpr; ! 878: { BYTE dst = get_byte(dsta); ! 879: src ^= dst; ! 880: regs.v = regs.c = 0; ! 881: regs.z = ((BYTE)(src)) == 0; ! 882: regs.n = ((BYTE)(src)) < 0; ! 883: put_byte(dsta,src); ! 884: }}}}}} ! 885: void op_b138(UWORD opcode) ! 886: { ! 887: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 888: {{ BYTE src = regs.d[srcreg]; ! 889: { CPTR dsta = (LONG)(WORD)nextiword(); ! 890: BYTE dst = get_byte(dsta); ! 891: src ^= dst; ! 892: regs.v = regs.c = 0; ! 893: regs.z = ((BYTE)(src)) == 0; ! 894: regs.n = ((BYTE)(src)) < 0; ! 895: put_byte(dsta,src); ! 896: }}}} ! 897: void op_b139(UWORD opcode) ! 898: { ! 899: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 900: {{ BYTE src = regs.d[srcreg]; ! 901: { CPTR dsta = nextilong(); ! 902: BYTE dst = get_byte(dsta); ! 903: src ^= dst; ! 904: regs.v = regs.c = 0; ! 905: regs.z = ((BYTE)(src)) == 0; ! 906: regs.n = ((BYTE)(src)) < 0; ! 907: put_byte(dsta,src); ! 908: }}}} ! 909: void op_b140(UWORD opcode) ! 910: { ! 911: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 912: ULONG dstreg = (opcode & 7) >> 0; ! 913: {{ WORD src = regs.d[srcreg]; ! 914: { WORD dst = regs.d[dstreg]; ! 915: src ^= dst; ! 916: regs.v = regs.c = 0; ! 917: regs.z = ((WORD)(src)) == 0; ! 918: regs.n = ((WORD)(src)) < 0; ! 919: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (src) & 0xffff; ! 920: }}}} ! 921: void op_b148(UWORD opcode) ! 922: { ! 923: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 924: ULONG dstreg = (opcode & 3584) >> 9; ! 925: {{ CPTR srca = regs.a[srcreg]; ! 926: WORD src = get_word(srca); ! 927: { regs.a[srcreg] += 2; ! 928: { CPTR dsta = regs.a[dstreg]; ! 929: WORD dst = get_word(dsta); ! 930: { regs.a[dstreg] += 2; ! 931: { ULONG newv = dst - src; ! 932: { bool flgs = ((WORD)(src)) < 0; ! 933: bool flgo = ((WORD)(dst)) < 0; ! 934: bool flgn = ((WORD)(newv)) < 0; ! 935: regs.z = ((WORD)(newv)) == 0; ! 936: regs.v = (flgs != flgo) && (flgn != flgo); ! 937: regs.c = ((UWORD)(src)) > ((UWORD)(dst)); ! 938: regs.n = flgn != 0; ! 939: }}}}}}}} ! 940: void op_b150(UWORD opcode) ! 941: { ! 942: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 943: ULONG dstreg = (opcode & 7) >> 0; ! 944: {{ WORD src = regs.d[srcreg]; ! 945: { CPTR dsta = regs.a[dstreg]; ! 946: WORD dst = get_word(dsta); ! 947: src ^= dst; ! 948: regs.v = regs.c = 0; ! 949: regs.z = ((WORD)(src)) == 0; ! 950: regs.n = ((WORD)(src)) < 0; ! 951: put_word(dsta,src); ! 952: }}}} ! 953: void op_b158(UWORD opcode) ! 954: { ! 955: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 956: ULONG dstreg = (opcode & 7) >> 0; ! 957: {{ WORD src = regs.d[srcreg]; ! 958: { CPTR dsta = regs.a[dstreg]; ! 959: WORD dst = get_word(dsta); ! 960: { regs.a[dstreg] += 2; ! 961: src ^= dst; ! 962: regs.v = regs.c = 0; ! 963: regs.z = ((WORD)(src)) == 0; ! 964: regs.n = ((WORD)(src)) < 0; ! 965: put_word(dsta,src); ! 966: }}}}} ! 967: void op_b160(UWORD opcode) ! 968: { ! 969: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 970: ULONG dstreg = (opcode & 7) >> 0; ! 971: {{ WORD src = regs.d[srcreg]; ! 972: { regs.a[dstreg] -= 2; ! 973: { CPTR dsta = regs.a[dstreg]; ! 974: WORD dst = get_word(dsta); ! 975: src ^= dst; ! 976: regs.v = regs.c = 0; ! 977: regs.z = ((WORD)(src)) == 0; ! 978: regs.n = ((WORD)(src)) < 0; ! 979: put_word(dsta,src); ! 980: }}}}} ! 981: void op_b168(UWORD opcode) ! 982: { ! 983: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 984: ULONG dstreg = (opcode & 7) >> 0; ! 985: {{ WORD src = regs.d[srcreg]; ! 986: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 987: WORD dst = get_word(dsta); ! 988: src ^= dst; ! 989: regs.v = regs.c = 0; ! 990: regs.z = ((WORD)(src)) == 0; ! 991: regs.n = ((WORD)(src)) < 0; ! 992: put_word(dsta,src); ! 993: }}}} ! 994: void op_b170(UWORD opcode) ! 995: { ! 996: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 997: ULONG dstreg = (opcode & 7) >> 0; ! 998: {{ WORD src = regs.d[srcreg]; ! 999: { CPTR dsta = regs.a[dstreg]; ! 1000: UWORD dstdp = nextiword(); ! 1001: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 1002: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 1003: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 1004: dsta += dstdpr; ! 1005: { WORD dst = get_word(dsta); ! 1006: src ^= dst; ! 1007: regs.v = regs.c = 0; ! 1008: regs.z = ((WORD)(src)) == 0; ! 1009: regs.n = ((WORD)(src)) < 0; ! 1010: put_word(dsta,src); ! 1011: }}}}}} ! 1012: void op_b178(UWORD opcode) ! 1013: { ! 1014: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1015: {{ WORD src = regs.d[srcreg]; ! 1016: { CPTR dsta = (LONG)(WORD)nextiword(); ! 1017: WORD dst = get_word(dsta); ! 1018: src ^= dst; ! 1019: regs.v = regs.c = 0; ! 1020: regs.z = ((WORD)(src)) == 0; ! 1021: regs.n = ((WORD)(src)) < 0; ! 1022: put_word(dsta,src); ! 1023: }}}} ! 1024: void op_b179(UWORD opcode) ! 1025: { ! 1026: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1027: {{ WORD src = regs.d[srcreg]; ! 1028: { CPTR dsta = nextilong(); ! 1029: WORD dst = get_word(dsta); ! 1030: src ^= dst; ! 1031: regs.v = regs.c = 0; ! 1032: regs.z = ((WORD)(src)) == 0; ! 1033: regs.n = ((WORD)(src)) < 0; ! 1034: put_word(dsta,src); ! 1035: }}}} ! 1036: void op_b180(UWORD opcode) ! 1037: { ! 1038: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1039: ULONG dstreg = (opcode & 7) >> 0; ! 1040: {{ LONG src = regs.d[srcreg]; ! 1041: { LONG dst = regs.d[dstreg]; ! 1042: src ^= dst; ! 1043: regs.v = regs.c = 0; ! 1044: regs.z = ((LONG)(src)) == 0; ! 1045: regs.n = ((LONG)(src)) < 0; ! 1046: regs.d[dstreg] = (src); ! 1047: }}}} ! 1048: void op_b188(UWORD opcode) ! 1049: { ! 1050: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1051: ULONG dstreg = (opcode & 3584) >> 9; ! 1052: {{ CPTR srca = regs.a[srcreg]; ! 1053: LONG src = get_long(srca); ! 1054: { regs.a[srcreg] += 4; ! 1055: { CPTR dsta = regs.a[dstreg]; ! 1056: LONG dst = get_long(dsta); ! 1057: { regs.a[dstreg] += 4; ! 1058: { ULONG newv = dst - src; ! 1059: { bool flgs = ((LONG)(src)) < 0; ! 1060: bool flgo = ((LONG)(dst)) < 0; ! 1061: bool flgn = ((LONG)(newv)) < 0; ! 1062: regs.z = ((LONG)(newv)) == 0; ! 1063: regs.v = (flgs != flgo) && (flgn != flgo); ! 1064: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1065: regs.n = flgn != 0; ! 1066: }}}}}}}} ! 1067: void op_b190(UWORD opcode) ! 1068: { ! 1069: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1070: ULONG dstreg = (opcode & 7) >> 0; ! 1071: {{ LONG src = regs.d[srcreg]; ! 1072: { CPTR dsta = regs.a[dstreg]; ! 1073: LONG dst = get_long(dsta); ! 1074: src ^= dst; ! 1075: regs.v = regs.c = 0; ! 1076: regs.z = ((LONG)(src)) == 0; ! 1077: regs.n = ((LONG)(src)) < 0; ! 1078: put_long(dsta,src); ! 1079: }}}} ! 1080: void op_b198(UWORD opcode) ! 1081: { ! 1082: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1083: ULONG dstreg = (opcode & 7) >> 0; ! 1084: {{ LONG src = regs.d[srcreg]; ! 1085: { CPTR dsta = regs.a[dstreg]; ! 1086: LONG dst = get_long(dsta); ! 1087: { regs.a[dstreg] += 4; ! 1088: src ^= dst; ! 1089: regs.v = regs.c = 0; ! 1090: regs.z = ((LONG)(src)) == 0; ! 1091: regs.n = ((LONG)(src)) < 0; ! 1092: put_long(dsta,src); ! 1093: }}}}} ! 1094: void op_b1a0(UWORD opcode) ! 1095: { ! 1096: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1097: ULONG dstreg = (opcode & 7) >> 0; ! 1098: {{ LONG src = regs.d[srcreg]; ! 1099: { regs.a[dstreg] -= 4; ! 1100: { CPTR dsta = regs.a[dstreg]; ! 1101: LONG dst = get_long(dsta); ! 1102: src ^= dst; ! 1103: regs.v = regs.c = 0; ! 1104: regs.z = ((LONG)(src)) == 0; ! 1105: regs.n = ((LONG)(src)) < 0; ! 1106: put_long(dsta,src); ! 1107: }}}}} ! 1108: void op_b1a8(UWORD opcode) ! 1109: { ! 1110: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1111: ULONG dstreg = (opcode & 7) >> 0; ! 1112: {{ LONG src = regs.d[srcreg]; ! 1113: { CPTR dsta = regs.a[dstreg] + (LONG)(WORD)nextiword(); ! 1114: LONG dst = get_long(dsta); ! 1115: src ^= dst; ! 1116: regs.v = regs.c = 0; ! 1117: regs.z = ((LONG)(src)) == 0; ! 1118: regs.n = ((LONG)(src)) < 0; ! 1119: put_long(dsta,src); ! 1120: }}}} ! 1121: void op_b1b0(UWORD opcode) ! 1122: { ! 1123: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1124: ULONG dstreg = (opcode & 7) >> 0; ! 1125: {{ LONG src = regs.d[srcreg]; ! 1126: { CPTR dsta = regs.a[dstreg]; ! 1127: UWORD dstdp = nextiword(); ! 1128: dsta += (LONG)(BYTE)(dstdp & 0xFF); ! 1129: { ULONG dstdpr = dstdp & 0x8000 ? regs.a[(dstdp & 0x7000) >> 12] : regs.d[(dstdp & 0x7000) >> 12]; ! 1130: if (!(dstdp & 0x800)) dstdpr = (LONG)(WORD)dstdpr; ! 1131: dsta += dstdpr; ! 1132: { LONG dst = get_long(dsta); ! 1133: src ^= dst; ! 1134: regs.v = regs.c = 0; ! 1135: regs.z = ((LONG)(src)) == 0; ! 1136: regs.n = ((LONG)(src)) < 0; ! 1137: put_long(dsta,src); ! 1138: }}}}}} ! 1139: void op_b1b8(UWORD opcode) ! 1140: { ! 1141: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1142: {{ LONG src = regs.d[srcreg]; ! 1143: { CPTR dsta = (LONG)(WORD)nextiword(); ! 1144: LONG dst = get_long(dsta); ! 1145: src ^= dst; ! 1146: regs.v = regs.c = 0; ! 1147: regs.z = ((LONG)(src)) == 0; ! 1148: regs.n = ((LONG)(src)) < 0; ! 1149: put_long(dsta,src); ! 1150: }}}} ! 1151: void op_b1b9(UWORD opcode) ! 1152: { ! 1153: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1154: {{ LONG src = regs.d[srcreg]; ! 1155: { CPTR dsta = nextilong(); ! 1156: LONG dst = get_long(dsta); ! 1157: src ^= dst; ! 1158: regs.v = regs.c = 0; ! 1159: regs.z = ((LONG)(src)) == 0; ! 1160: regs.n = ((LONG)(src)) < 0; ! 1161: put_long(dsta,src); ! 1162: }}}} ! 1163: void op_b1c0(UWORD opcode) ! 1164: { ! 1165: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1166: ULONG dstreg = (opcode & 3584) >> 9; ! 1167: {{ LONG src = regs.d[srcreg]; ! 1168: { LONG dst = regs.a[dstreg]; ! 1169: { ULONG newv = dst - src; ! 1170: { bool flgs = ((LONG)(src)) < 0; ! 1171: bool flgo = ((LONG)(dst)) < 0; ! 1172: bool flgn = ((LONG)(newv)) < 0; ! 1173: regs.z = ((LONG)(newv)) == 0; ! 1174: regs.v = (flgs != flgo) && (flgn != flgo); ! 1175: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1176: regs.n = flgn != 0; ! 1177: }}}}}} ! 1178: void op_b1c8(UWORD opcode) ! 1179: { ! 1180: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1181: ULONG dstreg = (opcode & 3584) >> 9; ! 1182: {{ LONG src = regs.a[srcreg]; ! 1183: { LONG dst = regs.a[dstreg]; ! 1184: { ULONG newv = dst - src; ! 1185: { bool flgs = ((LONG)(src)) < 0; ! 1186: bool flgo = ((LONG)(dst)) < 0; ! 1187: bool flgn = ((LONG)(newv)) < 0; ! 1188: regs.z = ((LONG)(newv)) == 0; ! 1189: regs.v = (flgs != flgo) && (flgn != flgo); ! 1190: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1191: regs.n = flgn != 0; ! 1192: }}}}}} ! 1193: void op_b1d0(UWORD opcode) ! 1194: { ! 1195: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1196: ULONG dstreg = (opcode & 3584) >> 9; ! 1197: {{ CPTR srca = regs.a[srcreg]; ! 1198: LONG src = get_long(srca); ! 1199: { LONG dst = regs.a[dstreg]; ! 1200: { ULONG newv = dst - src; ! 1201: { bool flgs = ((LONG)(src)) < 0; ! 1202: bool flgo = ((LONG)(dst)) < 0; ! 1203: bool flgn = ((LONG)(newv)) < 0; ! 1204: regs.z = ((LONG)(newv)) == 0; ! 1205: regs.v = (flgs != flgo) && (flgn != flgo); ! 1206: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1207: regs.n = flgn != 0; ! 1208: }}}}}} ! 1209: void op_b1d8(UWORD opcode) ! 1210: { ! 1211: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1212: ULONG dstreg = (opcode & 3584) >> 9; ! 1213: {{ CPTR srca = regs.a[srcreg]; ! 1214: LONG src = get_long(srca); ! 1215: { regs.a[srcreg] += 4; ! 1216: { LONG dst = regs.a[dstreg]; ! 1217: { ULONG newv = dst - src; ! 1218: { bool flgs = ((LONG)(src)) < 0; ! 1219: bool flgo = ((LONG)(dst)) < 0; ! 1220: bool flgn = ((LONG)(newv)) < 0; ! 1221: regs.z = ((LONG)(newv)) == 0; ! 1222: regs.v = (flgs != flgo) && (flgn != flgo); ! 1223: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1224: regs.n = flgn != 0; ! 1225: }}}}}}} ! 1226: void op_b1e0(UWORD opcode) ! 1227: { ! 1228: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1229: ULONG dstreg = (opcode & 3584) >> 9; ! 1230: {{ regs.a[srcreg] -= 4; ! 1231: { CPTR srca = regs.a[srcreg]; ! 1232: LONG src = get_long(srca); ! 1233: { LONG dst = regs.a[dstreg]; ! 1234: { ULONG newv = dst - src; ! 1235: { bool flgs = ((LONG)(src)) < 0; ! 1236: bool flgo = ((LONG)(dst)) < 0; ! 1237: bool flgn = ((LONG)(newv)) < 0; ! 1238: regs.z = ((LONG)(newv)) == 0; ! 1239: regs.v = (flgs != flgo) && (flgn != flgo); ! 1240: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1241: regs.n = flgn != 0; ! 1242: }}}}}}} ! 1243: void op_b1e8(UWORD opcode) ! 1244: { ! 1245: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1246: ULONG dstreg = (opcode & 3584) >> 9; ! 1247: {{ CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 1248: LONG src = get_long(srca); ! 1249: { LONG dst = regs.a[dstreg]; ! 1250: { ULONG newv = dst - src; ! 1251: { bool flgs = ((LONG)(src)) < 0; ! 1252: bool flgo = ((LONG)(dst)) < 0; ! 1253: bool flgn = ((LONG)(newv)) < 0; ! 1254: regs.z = ((LONG)(newv)) == 0; ! 1255: regs.v = (flgs != flgo) && (flgn != flgo); ! 1256: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1257: regs.n = flgn != 0; ! 1258: }}}}}} ! 1259: void op_b1f0(UWORD opcode) ! 1260: { ! 1261: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1262: ULONG dstreg = (opcode & 3584) >> 9; ! 1263: {{ CPTR srca = regs.a[srcreg]; ! 1264: UWORD srcdp = nextiword(); ! 1265: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 1266: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 1267: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 1268: srca += srcdpr; ! 1269: { LONG src = get_long(srca); ! 1270: { LONG dst = regs.a[dstreg]; ! 1271: { ULONG newv = dst - src; ! 1272: { bool flgs = ((LONG)(src)) < 0; ! 1273: bool flgo = ((LONG)(dst)) < 0; ! 1274: bool flgn = ((LONG)(newv)) < 0; ! 1275: regs.z = ((LONG)(newv)) == 0; ! 1276: regs.v = (flgs != flgo) && (flgn != flgo); ! 1277: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1278: regs.n = flgn != 0; ! 1279: }}}}}}}} ! 1280: void op_b1f8(UWORD opcode) ! 1281: { ! 1282: ULONG dstreg = (opcode & 3584) >> 9; ! 1283: {{ CPTR srca = (LONG)(WORD)nextiword(); ! 1284: LONG src = get_long(srca); ! 1285: { LONG dst = regs.a[dstreg]; ! 1286: { ULONG newv = dst - src; ! 1287: { bool flgs = ((LONG)(src)) < 0; ! 1288: bool flgo = ((LONG)(dst)) < 0; ! 1289: bool flgn = ((LONG)(newv)) < 0; ! 1290: regs.z = ((LONG)(newv)) == 0; ! 1291: regs.v = (flgs != flgo) && (flgn != flgo); ! 1292: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1293: regs.n = flgn != 0; ! 1294: }}}}}} ! 1295: void op_b1f9(UWORD opcode) ! 1296: { ! 1297: ULONG dstreg = (opcode & 3584) >> 9; ! 1298: {{ CPTR srca = nextilong(); ! 1299: LONG src = get_long(srca); ! 1300: { LONG dst = regs.a[dstreg]; ! 1301: { ULONG newv = dst - src; ! 1302: { bool flgs = ((LONG)(src)) < 0; ! 1303: bool flgo = ((LONG)(dst)) < 0; ! 1304: bool flgn = ((LONG)(newv)) < 0; ! 1305: regs.z = ((LONG)(newv)) == 0; ! 1306: regs.v = (flgs != flgo) && (flgn != flgo); ! 1307: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1308: regs.n = flgn != 0; ! 1309: }}}}}} ! 1310: void op_b1fa(UWORD opcode) ! 1311: { ! 1312: ULONG dstreg = (opcode & 3584) >> 9; ! 1313: {{ CPTR srca = m68k_getpc(); ! 1314: srca += (LONG)(WORD)nextiword(); ! 1315: { LONG src = get_long(srca); ! 1316: { LONG dst = regs.a[dstreg]; ! 1317: { ULONG newv = dst - src; ! 1318: { bool flgs = ((LONG)(src)) < 0; ! 1319: bool flgo = ((LONG)(dst)) < 0; ! 1320: bool flgn = ((LONG)(newv)) < 0; ! 1321: regs.z = ((LONG)(newv)) == 0; ! 1322: regs.v = (flgs != flgo) && (flgn != flgo); ! 1323: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1324: regs.n = flgn != 0; ! 1325: }}}}}}} ! 1326: void op_b1fb(UWORD opcode) ! 1327: { ! 1328: ULONG dstreg = (opcode & 3584) >> 9; ! 1329: {{ CPTR srca = m68k_getpc(); ! 1330: UWORD srcdp = nextiword(); ! 1331: srca += (LONG)(BYTE)(srcdp & 0xFF); ! 1332: { ULONG srcdpr = srcdp & 0x8000 ? regs.a[(srcdp & 0x7000) >> 12] : regs.d[(srcdp & 0x7000) >> 12]; ! 1333: if (!(srcdp & 0x800)) srcdpr = (LONG)(WORD)srcdpr; ! 1334: srca += srcdpr; ! 1335: { LONG src = get_long(srca); ! 1336: { LONG dst = regs.a[dstreg]; ! 1337: { ULONG newv = dst - src; ! 1338: { bool flgs = ((LONG)(src)) < 0; ! 1339: bool flgo = ((LONG)(dst)) < 0; ! 1340: bool flgn = ((LONG)(newv)) < 0; ! 1341: regs.z = ((LONG)(newv)) == 0; ! 1342: regs.v = (flgs != flgo) && (flgn != flgo); ! 1343: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1344: regs.n = flgn != 0; ! 1345: }}}}}}}} ! 1346: void op_b1fc(UWORD opcode) ! 1347: { ! 1348: ULONG dstreg = (opcode & 3584) >> 9; ! 1349: {{ LONG src = nextilong(); ! 1350: { LONG dst = regs.a[dstreg]; ! 1351: { ULONG newv = dst - src; ! 1352: { bool flgs = ((LONG)(src)) < 0; ! 1353: bool flgo = ((LONG)(dst)) < 0; ! 1354: bool flgn = ((LONG)(newv)) < 0; ! 1355: regs.z = ((LONG)(newv)) == 0; ! 1356: regs.v = (flgs != flgo) && (flgn != flgo); ! 1357: regs.c = ((ULONG)(src)) > ((ULONG)(dst)); ! 1358: regs.n = flgn != 0; ! 1359: }}}}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.