|
|
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_e000(UWORD opcode) ! 10: { ! 11: ULONG srcreg = 8; ! 12: ULONG dstreg = (opcode & 7) >> 0; ! 13: {{ ULONG cnt = srcreg; ! 14: { BYTE data = regs.d[dstreg]; ! 15: { UBYTE val = data; ! 16: cnt &= 63; ! 17: regs.v = 0; ! 18: { ULONG cmask = 0x80; ! 19: ULONG sign = cmask & val; ! 20: for(;cnt;--cnt){ ! 21: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 22: } ! 23: regs.n = sign != 0; ! 24: regs.z = val == 0; ! 25: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 26: }}}}}} ! 27: void op_e008(UWORD opcode) ! 28: { ! 29: ULONG srcreg = 8; ! 30: ULONG dstreg = (opcode & 7) >> 0; ! 31: {{ ULONG cnt = srcreg; ! 32: { BYTE data = regs.d[dstreg]; ! 33: { UBYTE val = data; ! 34: cnt &= 63; ! 35: { int carry = 0; ! 36: for(;cnt;--cnt){ ! 37: carry=val&1; val >>= 1; ! 38: } ! 39: regs.v = regs.c = 0; ! 40: regs.z = ((BYTE)(val)) == 0; ! 41: regs.n = ((BYTE)(val)) < 0; ! 42: regs.c = regs.x = carry!=0; ! 43: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 44: }}}}}} ! 45: void op_e010(UWORD opcode) ! 46: { ! 47: ULONG srcreg = 8; ! 48: ULONG dstreg = (opcode & 7) >> 0; ! 49: {{ ULONG cnt = srcreg; ! 50: { BYTE data = regs.d[dstreg]; ! 51: { UBYTE val = data; ! 52: cnt &= 63; ! 53: { int carry = 0; ! 54: ULONG cmask = 0x80; ! 55: for(;cnt;--cnt){ ! 56: carry=val&1; val >>= 1; ! 57: if(regs.x) val |= cmask; ! 58: regs.x = carry != 0; ! 59: } ! 60: regs.v = regs.c = 0; ! 61: regs.z = ((BYTE)(val)) == 0; ! 62: regs.n = ((BYTE)(val)) < 0; ! 63: regs.x = regs.c = carry!=0; ! 64: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 65: }}}}}} ! 66: void op_e018(UWORD opcode) ! 67: { ! 68: ULONG srcreg = 8; ! 69: ULONG dstreg = (opcode & 7) >> 0; ! 70: {{ ULONG cnt = srcreg; ! 71: { BYTE data = regs.d[dstreg]; ! 72: { UBYTE val = data; ! 73: cnt &= 63; ! 74: { int carry = 0; ! 75: ULONG cmask = 0x80; ! 76: for(;cnt;--cnt){ ! 77: carry=val&1; val = (ULONG)val >> 1; ! 78: if(carry) val |= cmask; ! 79: } ! 80: regs.v = regs.c = 0; ! 81: regs.z = ((BYTE)(val)) == 0; ! 82: regs.n = ((BYTE)(val)) < 0; ! 83: regs.c = carry!=0; ! 84: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 85: }}}}}} ! 86: void op_e020(UWORD opcode) ! 87: { ! 88: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 89: ULONG dstreg = (opcode & 7) >> 0; ! 90: {{ BYTE cnt = regs.d[srcreg]; ! 91: { BYTE data = regs.d[dstreg]; ! 92: { UBYTE val = data; ! 93: cnt &= 63; ! 94: regs.v = 0; ! 95: { ULONG cmask = 0x80; ! 96: ULONG sign = cmask & val; ! 97: for(;cnt;--cnt){ ! 98: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 99: } ! 100: regs.n = sign != 0; ! 101: regs.z = val == 0; ! 102: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 103: }}}}}} ! 104: void op_e028(UWORD opcode) ! 105: { ! 106: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 107: ULONG dstreg = (opcode & 7) >> 0; ! 108: {{ BYTE cnt = regs.d[srcreg]; ! 109: { BYTE data = regs.d[dstreg]; ! 110: { UBYTE val = data; ! 111: cnt &= 63; ! 112: { int carry = 0; ! 113: for(;cnt;--cnt){ ! 114: carry=val&1; val >>= 1; ! 115: } ! 116: regs.v = regs.c = 0; ! 117: regs.z = ((BYTE)(val)) == 0; ! 118: regs.n = ((BYTE)(val)) < 0; ! 119: regs.c = regs.x = carry!=0; ! 120: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 121: }}}}}} ! 122: void op_e030(UWORD opcode) ! 123: { ! 124: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 125: ULONG dstreg = (opcode & 7) >> 0; ! 126: {{ BYTE cnt = regs.d[srcreg]; ! 127: { BYTE data = regs.d[dstreg]; ! 128: { UBYTE val = data; ! 129: cnt &= 63; ! 130: { int carry = 0; ! 131: ULONG cmask = 0x80; ! 132: for(;cnt;--cnt){ ! 133: carry=val&1; val >>= 1; ! 134: if(regs.x) val |= cmask; ! 135: regs.x = carry != 0; ! 136: } ! 137: regs.v = regs.c = 0; ! 138: regs.z = ((BYTE)(val)) == 0; ! 139: regs.n = ((BYTE)(val)) < 0; ! 140: regs.x = regs.c = carry!=0; ! 141: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 142: }}}}}} ! 143: void op_e038(UWORD opcode) ! 144: { ! 145: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 146: ULONG dstreg = (opcode & 7) >> 0; ! 147: {{ BYTE cnt = regs.d[srcreg]; ! 148: { BYTE data = regs.d[dstreg]; ! 149: { UBYTE val = data; ! 150: cnt &= 63; ! 151: { int carry = 0; ! 152: ULONG cmask = 0x80; ! 153: for(;cnt;--cnt){ ! 154: carry=val&1; val = (ULONG)val >> 1; ! 155: if(carry) val |= cmask; ! 156: } ! 157: regs.v = regs.c = 0; ! 158: regs.z = ((BYTE)(val)) == 0; ! 159: regs.n = ((BYTE)(val)) < 0; ! 160: regs.c = carry!=0; ! 161: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 162: }}}}}} ! 163: void op_e040(UWORD opcode) ! 164: { ! 165: ULONG srcreg = 8; ! 166: ULONG dstreg = (opcode & 7) >> 0; ! 167: {{ ULONG cnt = srcreg; ! 168: { WORD data = regs.d[dstreg]; ! 169: { UWORD val = data; ! 170: cnt &= 63; ! 171: regs.v = 0; ! 172: { ULONG cmask = 0x8000; ! 173: ULONG sign = cmask & val; ! 174: for(;cnt;--cnt){ ! 175: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 176: } ! 177: regs.n = sign != 0; ! 178: regs.z = val == 0; ! 179: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 180: }}}}}} ! 181: void op_e048(UWORD opcode) ! 182: { ! 183: ULONG srcreg = 8; ! 184: ULONG dstreg = (opcode & 7) >> 0; ! 185: {{ ULONG cnt = srcreg; ! 186: { WORD data = regs.d[dstreg]; ! 187: { UWORD val = data; ! 188: cnt &= 63; ! 189: { int carry = 0; ! 190: for(;cnt;--cnt){ ! 191: carry=val&1; val >>= 1; ! 192: } ! 193: regs.v = regs.c = 0; ! 194: regs.z = ((WORD)(val)) == 0; ! 195: regs.n = ((WORD)(val)) < 0; ! 196: regs.c = regs.x = carry!=0; ! 197: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 198: }}}}}} ! 199: void op_e050(UWORD opcode) ! 200: { ! 201: ULONG srcreg = 8; ! 202: ULONG dstreg = (opcode & 7) >> 0; ! 203: {{ ULONG cnt = srcreg; ! 204: { WORD data = regs.d[dstreg]; ! 205: { UWORD val = data; ! 206: cnt &= 63; ! 207: { int carry = 0; ! 208: ULONG cmask = 0x8000; ! 209: for(;cnt;--cnt){ ! 210: carry=val&1; val >>= 1; ! 211: if(regs.x) val |= cmask; ! 212: regs.x = carry != 0; ! 213: } ! 214: regs.v = regs.c = 0; ! 215: regs.z = ((WORD)(val)) == 0; ! 216: regs.n = ((WORD)(val)) < 0; ! 217: regs.x = regs.c = carry!=0; ! 218: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 219: }}}}}} ! 220: void op_e058(UWORD opcode) ! 221: { ! 222: ULONG srcreg = 8; ! 223: ULONG dstreg = (opcode & 7) >> 0; ! 224: {{ ULONG cnt = srcreg; ! 225: { WORD data = regs.d[dstreg]; ! 226: { UWORD val = data; ! 227: cnt &= 63; ! 228: { int carry = 0; ! 229: ULONG cmask = 0x8000; ! 230: for(;cnt;--cnt){ ! 231: carry=val&1; val = (ULONG)val >> 1; ! 232: if(carry) val |= cmask; ! 233: } ! 234: regs.v = regs.c = 0; ! 235: regs.z = ((WORD)(val)) == 0; ! 236: regs.n = ((WORD)(val)) < 0; ! 237: regs.c = carry!=0; ! 238: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 239: }}}}}} ! 240: void op_e060(UWORD opcode) ! 241: { ! 242: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 243: ULONG dstreg = (opcode & 7) >> 0; ! 244: {{ WORD cnt = regs.d[srcreg]; ! 245: { WORD data = regs.d[dstreg]; ! 246: { UWORD val = data; ! 247: cnt &= 63; ! 248: regs.v = 0; ! 249: { ULONG cmask = 0x8000; ! 250: ULONG sign = cmask & val; ! 251: for(;cnt;--cnt){ ! 252: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 253: } ! 254: regs.n = sign != 0; ! 255: regs.z = val == 0; ! 256: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 257: }}}}}} ! 258: void op_e068(UWORD opcode) ! 259: { ! 260: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 261: ULONG dstreg = (opcode & 7) >> 0; ! 262: {{ WORD cnt = regs.d[srcreg]; ! 263: { WORD data = regs.d[dstreg]; ! 264: { UWORD val = data; ! 265: cnt &= 63; ! 266: { int carry = 0; ! 267: for(;cnt;--cnt){ ! 268: carry=val&1; val >>= 1; ! 269: } ! 270: regs.v = regs.c = 0; ! 271: regs.z = ((WORD)(val)) == 0; ! 272: regs.n = ((WORD)(val)) < 0; ! 273: regs.c = regs.x = carry!=0; ! 274: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 275: }}}}}} ! 276: void op_e070(UWORD opcode) ! 277: { ! 278: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 279: ULONG dstreg = (opcode & 7) >> 0; ! 280: {{ WORD cnt = regs.d[srcreg]; ! 281: { WORD data = regs.d[dstreg]; ! 282: { UWORD val = data; ! 283: cnt &= 63; ! 284: { int carry = 0; ! 285: ULONG cmask = 0x8000; ! 286: for(;cnt;--cnt){ ! 287: carry=val&1; val >>= 1; ! 288: if(regs.x) val |= cmask; ! 289: regs.x = carry != 0; ! 290: } ! 291: regs.v = regs.c = 0; ! 292: regs.z = ((WORD)(val)) == 0; ! 293: regs.n = ((WORD)(val)) < 0; ! 294: regs.x = regs.c = carry!=0; ! 295: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 296: }}}}}} ! 297: void op_e078(UWORD opcode) ! 298: { ! 299: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 300: ULONG dstreg = (opcode & 7) >> 0; ! 301: {{ WORD cnt = regs.d[srcreg]; ! 302: { WORD data = regs.d[dstreg]; ! 303: { UWORD val = data; ! 304: cnt &= 63; ! 305: { int carry = 0; ! 306: ULONG cmask = 0x8000; ! 307: for(;cnt;--cnt){ ! 308: carry=val&1; val = (ULONG)val >> 1; ! 309: if(carry) val |= cmask; ! 310: } ! 311: regs.v = regs.c = 0; ! 312: regs.z = ((WORD)(val)) == 0; ! 313: regs.n = ((WORD)(val)) < 0; ! 314: regs.c = carry!=0; ! 315: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 316: }}}}}} ! 317: void op_e080(UWORD opcode) ! 318: { ! 319: ULONG srcreg = 8; ! 320: ULONG dstreg = (opcode & 7) >> 0; ! 321: {{ ULONG cnt = srcreg; ! 322: { LONG data = regs.d[dstreg]; ! 323: { ULONG val = data; ! 324: cnt &= 63; ! 325: regs.v = 0; ! 326: { ULONG cmask = 0x80000000; ! 327: ULONG sign = cmask & val; ! 328: for(;cnt;--cnt){ ! 329: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 330: } ! 331: regs.n = sign != 0; ! 332: regs.z = val == 0; ! 333: regs.d[dstreg] = (val); ! 334: }}}}}} ! 335: void op_e088(UWORD opcode) ! 336: { ! 337: ULONG srcreg = 8; ! 338: ULONG dstreg = (opcode & 7) >> 0; ! 339: {{ ULONG cnt = srcreg; ! 340: { LONG data = regs.d[dstreg]; ! 341: { ULONG val = data; ! 342: cnt &= 63; ! 343: { int carry = 0; ! 344: for(;cnt;--cnt){ ! 345: carry=val&1; val >>= 1; ! 346: } ! 347: regs.v = regs.c = 0; ! 348: regs.z = ((LONG)(val)) == 0; ! 349: regs.n = ((LONG)(val)) < 0; ! 350: regs.c = regs.x = carry!=0; ! 351: regs.d[dstreg] = (val); ! 352: }}}}}} ! 353: void op_e090(UWORD opcode) ! 354: { ! 355: ULONG srcreg = 8; ! 356: ULONG dstreg = (opcode & 7) >> 0; ! 357: {{ ULONG cnt = srcreg; ! 358: { LONG data = regs.d[dstreg]; ! 359: { ULONG val = data; ! 360: cnt &= 63; ! 361: { int carry = 0; ! 362: ULONG cmask = 0x80000000; ! 363: for(;cnt;--cnt){ ! 364: carry=val&1; val >>= 1; ! 365: if(regs.x) val |= cmask; ! 366: regs.x = carry != 0; ! 367: } ! 368: regs.v = regs.c = 0; ! 369: regs.z = ((LONG)(val)) == 0; ! 370: regs.n = ((LONG)(val)) < 0; ! 371: regs.x = regs.c = carry!=0; ! 372: regs.d[dstreg] = (val); ! 373: }}}}}} ! 374: void op_e098(UWORD opcode) ! 375: { ! 376: ULONG srcreg = 8; ! 377: ULONG dstreg = (opcode & 7) >> 0; ! 378: {{ ULONG cnt = srcreg; ! 379: { LONG data = regs.d[dstreg]; ! 380: { ULONG val = data; ! 381: cnt &= 63; ! 382: { int carry = 0; ! 383: ULONG cmask = 0x80000000; ! 384: for(;cnt;--cnt){ ! 385: carry=val&1; val = (ULONG)val >> 1; ! 386: if(carry) val |= cmask; ! 387: } ! 388: regs.v = regs.c = 0; ! 389: regs.z = ((LONG)(val)) == 0; ! 390: regs.n = ((LONG)(val)) < 0; ! 391: regs.c = carry!=0; ! 392: regs.d[dstreg] = (val); ! 393: }}}}}} ! 394: void op_e0a0(UWORD opcode) ! 395: { ! 396: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 397: ULONG dstreg = (opcode & 7) >> 0; ! 398: {{ LONG cnt = regs.d[srcreg]; ! 399: { LONG data = regs.d[dstreg]; ! 400: { ULONG val = data; ! 401: cnt &= 63; ! 402: regs.v = 0; ! 403: { ULONG cmask = 0x80000000; ! 404: ULONG sign = cmask & val; ! 405: for(;cnt;--cnt){ ! 406: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 407: } ! 408: regs.n = sign != 0; ! 409: regs.z = val == 0; ! 410: regs.d[dstreg] = (val); ! 411: }}}}}} ! 412: void op_e0a8(UWORD opcode) ! 413: { ! 414: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 415: ULONG dstreg = (opcode & 7) >> 0; ! 416: {{ LONG cnt = regs.d[srcreg]; ! 417: { LONG data = regs.d[dstreg]; ! 418: { ULONG val = data; ! 419: cnt &= 63; ! 420: { int carry = 0; ! 421: for(;cnt;--cnt){ ! 422: carry=val&1; val >>= 1; ! 423: } ! 424: regs.v = regs.c = 0; ! 425: regs.z = ((LONG)(val)) == 0; ! 426: regs.n = ((LONG)(val)) < 0; ! 427: regs.c = regs.x = carry!=0; ! 428: regs.d[dstreg] = (val); ! 429: }}}}}} ! 430: void op_e0b0(UWORD opcode) ! 431: { ! 432: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 433: ULONG dstreg = (opcode & 7) >> 0; ! 434: {{ LONG cnt = regs.d[srcreg]; ! 435: { LONG data = regs.d[dstreg]; ! 436: { ULONG val = data; ! 437: cnt &= 63; ! 438: { int carry = 0; ! 439: ULONG cmask = 0x80000000; ! 440: for(;cnt;--cnt){ ! 441: carry=val&1; val >>= 1; ! 442: if(regs.x) val |= cmask; ! 443: regs.x = carry != 0; ! 444: } ! 445: regs.v = regs.c = 0; ! 446: regs.z = ((LONG)(val)) == 0; ! 447: regs.n = ((LONG)(val)) < 0; ! 448: regs.x = regs.c = carry!=0; ! 449: regs.d[dstreg] = (val); ! 450: }}}}}} ! 451: void op_e0b8(UWORD opcode) ! 452: { ! 453: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 454: ULONG dstreg = (opcode & 7) >> 0; ! 455: {{ LONG cnt = regs.d[srcreg]; ! 456: { LONG data = regs.d[dstreg]; ! 457: { ULONG val = data; ! 458: cnt &= 63; ! 459: { int carry = 0; ! 460: ULONG cmask = 0x80000000; ! 461: for(;cnt;--cnt){ ! 462: carry=val&1; val = (ULONG)val >> 1; ! 463: if(carry) val |= cmask; ! 464: } ! 465: regs.v = regs.c = 0; ! 466: regs.z = ((LONG)(val)) == 0; ! 467: regs.n = ((LONG)(val)) < 0; ! 468: regs.c = carry!=0; ! 469: regs.d[dstreg] = (val); ! 470: }}}}}} ! 471: void op_e0d0(UWORD opcode) ! 472: { ! 473: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 474: {{ CPTR dataa = regs.a[srcreg]; ! 475: WORD data = get_word(dataa); ! 476: regs.v = 0; ! 477: { UWORD val = data; ! 478: ULONG cmask = 0x8000; ! 479: ULONG sign = cmask & val; ! 480: regs.c=regs.x=val&1; val = (val >> 1) | sign; ! 481: regs.n = sign != 0; ! 482: regs.z = val == 0; ! 483: put_word(dataa,val); ! 484: }}}} ! 485: void op_e0d8(UWORD opcode) ! 486: { ! 487: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 488: {{ CPTR dataa = regs.a[srcreg]; ! 489: WORD data = get_word(dataa); ! 490: { regs.a[srcreg] += 2; ! 491: regs.v = 0; ! 492: { UWORD val = data; ! 493: ULONG cmask = 0x8000; ! 494: ULONG sign = cmask & val; ! 495: regs.c=regs.x=val&1; val = (val >> 1) | sign; ! 496: regs.n = sign != 0; ! 497: regs.z = val == 0; ! 498: put_word(dataa,val); ! 499: }}}}} ! 500: void op_e0e0(UWORD opcode) ! 501: { ! 502: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 503: {{ regs.a[srcreg] -= 2; ! 504: { CPTR dataa = regs.a[srcreg]; ! 505: WORD data = get_word(dataa); ! 506: regs.v = 0; ! 507: { UWORD val = data; ! 508: ULONG cmask = 0x8000; ! 509: ULONG sign = cmask & val; ! 510: regs.c=regs.x=val&1; val = (val >> 1) | sign; ! 511: regs.n = sign != 0; ! 512: regs.z = val == 0; ! 513: put_word(dataa,val); ! 514: }}}}} ! 515: void op_e0e8(UWORD opcode) ! 516: { ! 517: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 518: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 519: WORD data = get_word(dataa); ! 520: regs.v = 0; ! 521: { UWORD val = data; ! 522: ULONG cmask = 0x8000; ! 523: ULONG sign = cmask & val; ! 524: regs.c=regs.x=val&1; val = (val >> 1) | sign; ! 525: regs.n = sign != 0; ! 526: regs.z = val == 0; ! 527: put_word(dataa,val); ! 528: }}}} ! 529: void op_e0f0(UWORD opcode) ! 530: { ! 531: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 532: {{ CPTR dataa = regs.a[srcreg]; ! 533: UWORD datadp = nextiword(); ! 534: dataa += (LONG)(BYTE)(datadp & 0xFF); ! 535: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12]; ! 536: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr; ! 537: dataa += datadpr; ! 538: { WORD data = get_word(dataa); ! 539: regs.v = 0; ! 540: { UWORD val = data; ! 541: ULONG cmask = 0x8000; ! 542: ULONG sign = cmask & val; ! 543: regs.c=regs.x=val&1; val = (val >> 1) | sign; ! 544: regs.n = sign != 0; ! 545: regs.z = val == 0; ! 546: put_word(dataa,val); ! 547: }}}}}} ! 548: void op_e0f8(UWORD opcode) ! 549: { ! 550: {{ CPTR dataa = (LONG)(WORD)nextiword(); ! 551: WORD data = get_word(dataa); ! 552: regs.v = 0; ! 553: { UWORD val = data; ! 554: ULONG cmask = 0x8000; ! 555: ULONG sign = cmask & val; ! 556: regs.c=regs.x=val&1; val = (val >> 1) | sign; ! 557: regs.n = sign != 0; ! 558: regs.z = val == 0; ! 559: put_word(dataa,val); ! 560: }}}} ! 561: void op_e0f9(UWORD opcode) ! 562: { ! 563: {{ CPTR dataa = nextilong(); ! 564: WORD data = get_word(dataa); ! 565: regs.v = 0; ! 566: { UWORD val = data; ! 567: ULONG cmask = 0x8000; ! 568: ULONG sign = cmask & val; ! 569: regs.c=regs.x=val&1; val = (val >> 1) | sign; ! 570: regs.n = sign != 0; ! 571: regs.z = val == 0; ! 572: put_word(dataa,val); ! 573: }}}} ! 574: void op_e100(UWORD opcode) ! 575: { ! 576: ULONG srcreg = 8; ! 577: ULONG dstreg = (opcode & 7) >> 0; ! 578: {{ ULONG cnt = srcreg; ! 579: { BYTE data = regs.d[dstreg]; ! 580: { UBYTE val = data; ! 581: cnt &= 63; ! 582: regs.v = 0; ! 583: { ULONG cmask = 0x80; ! 584: ULONG sign = cmask & val; ! 585: for(;cnt;--cnt){ ! 586: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 587: if ((val&cmask)!=sign)regs.v=1; ! 588: } ! 589: regs.n = (val&cmask) != 0; ! 590: regs.z = val == 0; ! 591: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 592: }}}}}} ! 593: void op_e108(UWORD opcode) ! 594: { ! 595: ULONG srcreg = 8; ! 596: ULONG dstreg = (opcode & 7) >> 0; ! 597: {{ ULONG cnt = srcreg; ! 598: { BYTE data = regs.d[dstreg]; ! 599: { UBYTE val = data; ! 600: cnt &= 63; ! 601: { int carry = 0; ! 602: ULONG cmask = 0x80; ! 603: for(;cnt;--cnt){ ! 604: carry=val&cmask; val <<= 1; ! 605: } ! 606: regs.v = regs.c = 0; ! 607: regs.z = ((BYTE)(val)) == 0; ! 608: regs.n = ((BYTE)(val)) < 0; ! 609: regs.c = regs.x = carry!=0; ! 610: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 611: }}}}}} ! 612: void op_e110(UWORD opcode) ! 613: { ! 614: ULONG srcreg = 8; ! 615: ULONG dstreg = (opcode & 7) >> 0; ! 616: {{ ULONG cnt = srcreg; ! 617: { BYTE data = regs.d[dstreg]; ! 618: { UBYTE val = data; ! 619: cnt &= 63; ! 620: { int carry = 0; ! 621: ULONG cmask = 0x80; ! 622: for(;cnt;--cnt){ ! 623: carry=val&cmask; val <<= 1; ! 624: if(regs.x) val |= 1; ! 625: regs.x = carry != 0; ! 626: } ! 627: regs.v = regs.c = 0; ! 628: regs.z = ((BYTE)(val)) == 0; ! 629: regs.n = ((BYTE)(val)) < 0; ! 630: regs.x = regs.c = carry!=0; ! 631: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 632: }}}}}} ! 633: void op_e118(UWORD opcode) ! 634: { ! 635: ULONG srcreg = 8; ! 636: ULONG dstreg = (opcode & 7) >> 0; ! 637: {{ ULONG cnt = srcreg; ! 638: { BYTE data = regs.d[dstreg]; ! 639: { UBYTE val = data; ! 640: cnt &= 63; ! 641: { int carry = 0; ! 642: ULONG cmask = 0x80; ! 643: for(;cnt;--cnt){ ! 644: carry=val&cmask; val <<= 1; ! 645: if(carry) val |= 1; ! 646: } ! 647: regs.v = regs.c = 0; ! 648: regs.z = ((BYTE)(val)) == 0; ! 649: regs.n = ((BYTE)(val)) < 0; ! 650: regs.c = carry!=0; ! 651: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 652: }}}}}} ! 653: void op_e120(UWORD opcode) ! 654: { ! 655: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 656: ULONG dstreg = (opcode & 7) >> 0; ! 657: {{ BYTE cnt = regs.d[srcreg]; ! 658: { BYTE data = regs.d[dstreg]; ! 659: { UBYTE val = data; ! 660: cnt &= 63; ! 661: regs.v = 0; ! 662: { ULONG cmask = 0x80; ! 663: ULONG sign = cmask & val; ! 664: for(;cnt;--cnt){ ! 665: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 666: if ((val&cmask)!=sign)regs.v=1; ! 667: } ! 668: regs.n = (val&cmask) != 0; ! 669: regs.z = val == 0; ! 670: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 671: }}}}}} ! 672: void op_e128(UWORD opcode) ! 673: { ! 674: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 675: ULONG dstreg = (opcode & 7) >> 0; ! 676: {{ BYTE cnt = regs.d[srcreg]; ! 677: { BYTE data = regs.d[dstreg]; ! 678: { UBYTE val = data; ! 679: cnt &= 63; ! 680: { int carry = 0; ! 681: ULONG cmask = 0x80; ! 682: for(;cnt;--cnt){ ! 683: carry=val&cmask; val <<= 1; ! 684: } ! 685: regs.v = regs.c = 0; ! 686: regs.z = ((BYTE)(val)) == 0; ! 687: regs.n = ((BYTE)(val)) < 0; ! 688: regs.c = regs.x = carry!=0; ! 689: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 690: }}}}}} ! 691: void op_e130(UWORD opcode) ! 692: { ! 693: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 694: ULONG dstreg = (opcode & 7) >> 0; ! 695: {{ BYTE cnt = regs.d[srcreg]; ! 696: { BYTE data = regs.d[dstreg]; ! 697: { UBYTE val = data; ! 698: cnt &= 63; ! 699: { int carry = 0; ! 700: ULONG cmask = 0x80; ! 701: for(;cnt;--cnt){ ! 702: carry=val&cmask; val <<= 1; ! 703: if(regs.x) val |= 1; ! 704: regs.x = carry != 0; ! 705: } ! 706: regs.v = regs.c = 0; ! 707: regs.z = ((BYTE)(val)) == 0; ! 708: regs.n = ((BYTE)(val)) < 0; ! 709: regs.x = regs.c = carry!=0; ! 710: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 711: }}}}}} ! 712: void op_e138(UWORD opcode) ! 713: { ! 714: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 715: ULONG dstreg = (opcode & 7) >> 0; ! 716: {{ BYTE cnt = regs.d[srcreg]; ! 717: { BYTE data = regs.d[dstreg]; ! 718: { UBYTE val = data; ! 719: cnt &= 63; ! 720: { int carry = 0; ! 721: ULONG cmask = 0x80; ! 722: for(;cnt;--cnt){ ! 723: carry=val&cmask; val <<= 1; ! 724: if(carry) val |= 1; ! 725: } ! 726: regs.v = regs.c = 0; ! 727: regs.z = ((BYTE)(val)) == 0; ! 728: regs.n = ((BYTE)(val)) < 0; ! 729: regs.c = carry!=0; ! 730: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 731: }}}}}} ! 732: void op_e140(UWORD opcode) ! 733: { ! 734: ULONG srcreg = 8; ! 735: ULONG dstreg = (opcode & 7) >> 0; ! 736: {{ ULONG cnt = srcreg; ! 737: { WORD data = regs.d[dstreg]; ! 738: { UWORD val = data; ! 739: cnt &= 63; ! 740: regs.v = 0; ! 741: { ULONG cmask = 0x8000; ! 742: ULONG sign = cmask & val; ! 743: for(;cnt;--cnt){ ! 744: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 745: if ((val&cmask)!=sign)regs.v=1; ! 746: } ! 747: regs.n = (val&cmask) != 0; ! 748: regs.z = val == 0; ! 749: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 750: }}}}}} ! 751: void op_e148(UWORD opcode) ! 752: { ! 753: ULONG srcreg = 8; ! 754: ULONG dstreg = (opcode & 7) >> 0; ! 755: {{ ULONG cnt = srcreg; ! 756: { WORD data = regs.d[dstreg]; ! 757: { UWORD val = data; ! 758: cnt &= 63; ! 759: { int carry = 0; ! 760: ULONG cmask = 0x8000; ! 761: for(;cnt;--cnt){ ! 762: carry=val&cmask; val <<= 1; ! 763: } ! 764: regs.v = regs.c = 0; ! 765: regs.z = ((WORD)(val)) == 0; ! 766: regs.n = ((WORD)(val)) < 0; ! 767: regs.c = regs.x = carry!=0; ! 768: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 769: }}}}}} ! 770: void op_e150(UWORD opcode) ! 771: { ! 772: ULONG srcreg = 8; ! 773: ULONG dstreg = (opcode & 7) >> 0; ! 774: {{ ULONG cnt = srcreg; ! 775: { WORD data = regs.d[dstreg]; ! 776: { UWORD val = data; ! 777: cnt &= 63; ! 778: { int carry = 0; ! 779: ULONG cmask = 0x8000; ! 780: for(;cnt;--cnt){ ! 781: carry=val&cmask; val <<= 1; ! 782: if(regs.x) val |= 1; ! 783: regs.x = carry != 0; ! 784: } ! 785: regs.v = regs.c = 0; ! 786: regs.z = ((WORD)(val)) == 0; ! 787: regs.n = ((WORD)(val)) < 0; ! 788: regs.x = regs.c = carry!=0; ! 789: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 790: }}}}}} ! 791: void op_e158(UWORD opcode) ! 792: { ! 793: ULONG srcreg = 8; ! 794: ULONG dstreg = (opcode & 7) >> 0; ! 795: {{ ULONG cnt = srcreg; ! 796: { WORD data = regs.d[dstreg]; ! 797: { UWORD val = data; ! 798: cnt &= 63; ! 799: { int carry = 0; ! 800: ULONG cmask = 0x8000; ! 801: for(;cnt;--cnt){ ! 802: carry=val&cmask; val <<= 1; ! 803: if(carry) val |= 1; ! 804: } ! 805: regs.v = regs.c = 0; ! 806: regs.z = ((WORD)(val)) == 0; ! 807: regs.n = ((WORD)(val)) < 0; ! 808: regs.c = carry!=0; ! 809: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 810: }}}}}} ! 811: void op_e160(UWORD opcode) ! 812: { ! 813: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 814: ULONG dstreg = (opcode & 7) >> 0; ! 815: {{ WORD cnt = regs.d[srcreg]; ! 816: { WORD data = regs.d[dstreg]; ! 817: { UWORD val = data; ! 818: cnt &= 63; ! 819: regs.v = 0; ! 820: { ULONG cmask = 0x8000; ! 821: ULONG sign = cmask & val; ! 822: for(;cnt;--cnt){ ! 823: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 824: if ((val&cmask)!=sign)regs.v=1; ! 825: } ! 826: regs.n = (val&cmask) != 0; ! 827: regs.z = val == 0; ! 828: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 829: }}}}}} ! 830: void op_e168(UWORD opcode) ! 831: { ! 832: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 833: ULONG dstreg = (opcode & 7) >> 0; ! 834: {{ WORD cnt = regs.d[srcreg]; ! 835: { WORD data = regs.d[dstreg]; ! 836: { UWORD val = data; ! 837: cnt &= 63; ! 838: { int carry = 0; ! 839: ULONG cmask = 0x8000; ! 840: for(;cnt;--cnt){ ! 841: carry=val&cmask; val <<= 1; ! 842: } ! 843: regs.v = regs.c = 0; ! 844: regs.z = ((WORD)(val)) == 0; ! 845: regs.n = ((WORD)(val)) < 0; ! 846: regs.c = regs.x = carry!=0; ! 847: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 848: }}}}}} ! 849: void op_e170(UWORD opcode) ! 850: { ! 851: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 852: ULONG dstreg = (opcode & 7) >> 0; ! 853: {{ WORD cnt = regs.d[srcreg]; ! 854: { WORD data = regs.d[dstreg]; ! 855: { UWORD val = data; ! 856: cnt &= 63; ! 857: { int carry = 0; ! 858: ULONG cmask = 0x8000; ! 859: for(;cnt;--cnt){ ! 860: carry=val&cmask; val <<= 1; ! 861: if(regs.x) val |= 1; ! 862: regs.x = carry != 0; ! 863: } ! 864: regs.v = regs.c = 0; ! 865: regs.z = ((WORD)(val)) == 0; ! 866: regs.n = ((WORD)(val)) < 0; ! 867: regs.x = regs.c = carry!=0; ! 868: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 869: }}}}}} ! 870: void op_e178(UWORD opcode) ! 871: { ! 872: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 873: ULONG dstreg = (opcode & 7) >> 0; ! 874: {{ WORD cnt = regs.d[srcreg]; ! 875: { WORD data = regs.d[dstreg]; ! 876: { UWORD val = data; ! 877: cnt &= 63; ! 878: { int carry = 0; ! 879: ULONG cmask = 0x8000; ! 880: for(;cnt;--cnt){ ! 881: carry=val&cmask; val <<= 1; ! 882: if(carry) val |= 1; ! 883: } ! 884: regs.v = regs.c = 0; ! 885: regs.z = ((WORD)(val)) == 0; ! 886: regs.n = ((WORD)(val)) < 0; ! 887: regs.c = carry!=0; ! 888: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 889: }}}}}} ! 890: void op_e180(UWORD opcode) ! 891: { ! 892: ULONG srcreg = 8; ! 893: ULONG dstreg = (opcode & 7) >> 0; ! 894: {{ ULONG cnt = srcreg; ! 895: { LONG data = regs.d[dstreg]; ! 896: { ULONG val = data; ! 897: cnt &= 63; ! 898: regs.v = 0; ! 899: { ULONG cmask = 0x80000000; ! 900: ULONG sign = cmask & val; ! 901: for(;cnt;--cnt){ ! 902: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 903: if ((val&cmask)!=sign)regs.v=1; ! 904: } ! 905: regs.n = (val&cmask) != 0; ! 906: regs.z = val == 0; ! 907: regs.d[dstreg] = (val); ! 908: }}}}}} ! 909: void op_e188(UWORD opcode) ! 910: { ! 911: ULONG srcreg = 8; ! 912: ULONG dstreg = (opcode & 7) >> 0; ! 913: {{ ULONG cnt = srcreg; ! 914: { LONG data = regs.d[dstreg]; ! 915: { ULONG val = data; ! 916: cnt &= 63; ! 917: { int carry = 0; ! 918: ULONG cmask = 0x80000000; ! 919: for(;cnt;--cnt){ ! 920: carry=val&cmask; val <<= 1; ! 921: } ! 922: regs.v = regs.c = 0; ! 923: regs.z = ((LONG)(val)) == 0; ! 924: regs.n = ((LONG)(val)) < 0; ! 925: regs.c = regs.x = carry!=0; ! 926: regs.d[dstreg] = (val); ! 927: }}}}}} ! 928: void op_e190(UWORD opcode) ! 929: { ! 930: ULONG srcreg = 8; ! 931: ULONG dstreg = (opcode & 7) >> 0; ! 932: {{ ULONG cnt = srcreg; ! 933: { LONG data = regs.d[dstreg]; ! 934: { ULONG val = data; ! 935: cnt &= 63; ! 936: { int carry = 0; ! 937: ULONG cmask = 0x80000000; ! 938: for(;cnt;--cnt){ ! 939: carry=val&cmask; val <<= 1; ! 940: if(regs.x) val |= 1; ! 941: regs.x = carry != 0; ! 942: } ! 943: regs.v = regs.c = 0; ! 944: regs.z = ((LONG)(val)) == 0; ! 945: regs.n = ((LONG)(val)) < 0; ! 946: regs.x = regs.c = carry!=0; ! 947: regs.d[dstreg] = (val); ! 948: }}}}}} ! 949: void op_e198(UWORD opcode) ! 950: { ! 951: ULONG srcreg = 8; ! 952: ULONG dstreg = (opcode & 7) >> 0; ! 953: {{ ULONG cnt = srcreg; ! 954: { LONG data = regs.d[dstreg]; ! 955: { ULONG val = data; ! 956: cnt &= 63; ! 957: { int carry = 0; ! 958: ULONG cmask = 0x80000000; ! 959: for(;cnt;--cnt){ ! 960: carry=val&cmask; val <<= 1; ! 961: if(carry) val |= 1; ! 962: } ! 963: regs.v = regs.c = 0; ! 964: regs.z = ((LONG)(val)) == 0; ! 965: regs.n = ((LONG)(val)) < 0; ! 966: regs.c = carry!=0; ! 967: regs.d[dstreg] = (val); ! 968: }}}}}} ! 969: void op_e1a0(UWORD opcode) ! 970: { ! 971: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 972: ULONG dstreg = (opcode & 7) >> 0; ! 973: {{ LONG cnt = regs.d[srcreg]; ! 974: { LONG data = regs.d[dstreg]; ! 975: { ULONG val = data; ! 976: cnt &= 63; ! 977: regs.v = 0; ! 978: { ULONG cmask = 0x80000000; ! 979: ULONG sign = cmask & val; ! 980: for(;cnt;--cnt){ ! 981: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 982: if ((val&cmask)!=sign)regs.v=1; ! 983: } ! 984: regs.n = (val&cmask) != 0; ! 985: regs.z = val == 0; ! 986: regs.d[dstreg] = (val); ! 987: }}}}}} ! 988: void op_e1a8(UWORD opcode) ! 989: { ! 990: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 991: ULONG dstreg = (opcode & 7) >> 0; ! 992: {{ LONG cnt = regs.d[srcreg]; ! 993: { LONG data = regs.d[dstreg]; ! 994: { ULONG val = data; ! 995: cnt &= 63; ! 996: { int carry = 0; ! 997: ULONG cmask = 0x80000000; ! 998: for(;cnt;--cnt){ ! 999: carry=val&cmask; val <<= 1; ! 1000: } ! 1001: regs.v = regs.c = 0; ! 1002: regs.z = ((LONG)(val)) == 0; ! 1003: regs.n = ((LONG)(val)) < 0; ! 1004: regs.c = regs.x = carry!=0; ! 1005: regs.d[dstreg] = (val); ! 1006: }}}}}} ! 1007: void op_e1b0(UWORD opcode) ! 1008: { ! 1009: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1010: ULONG dstreg = (opcode & 7) >> 0; ! 1011: {{ LONG cnt = regs.d[srcreg]; ! 1012: { LONG data = regs.d[dstreg]; ! 1013: { ULONG val = data; ! 1014: cnt &= 63; ! 1015: { int carry = 0; ! 1016: ULONG cmask = 0x80000000; ! 1017: for(;cnt;--cnt){ ! 1018: carry=val&cmask; val <<= 1; ! 1019: if(regs.x) val |= 1; ! 1020: regs.x = carry != 0; ! 1021: } ! 1022: regs.v = regs.c = 0; ! 1023: regs.z = ((LONG)(val)) == 0; ! 1024: regs.n = ((LONG)(val)) < 0; ! 1025: regs.x = regs.c = carry!=0; ! 1026: regs.d[dstreg] = (val); ! 1027: }}}}}} ! 1028: void op_e1b8(UWORD opcode) ! 1029: { ! 1030: ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ! 1031: ULONG dstreg = (opcode & 7) >> 0; ! 1032: {{ LONG cnt = regs.d[srcreg]; ! 1033: { LONG data = regs.d[dstreg]; ! 1034: { ULONG val = data; ! 1035: cnt &= 63; ! 1036: { int carry = 0; ! 1037: ULONG cmask = 0x80000000; ! 1038: for(;cnt;--cnt){ ! 1039: carry=val&cmask; val <<= 1; ! 1040: if(carry) val |= 1; ! 1041: } ! 1042: regs.v = regs.c = 0; ! 1043: regs.z = ((LONG)(val)) == 0; ! 1044: regs.n = ((LONG)(val)) < 0; ! 1045: regs.c = carry!=0; ! 1046: regs.d[dstreg] = (val); ! 1047: }}}}}} ! 1048: void op_e1d0(UWORD opcode) ! 1049: { ! 1050: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1051: {{ CPTR dataa = regs.a[srcreg]; ! 1052: WORD data = get_word(dataa); ! 1053: regs.v = 0; ! 1054: { UWORD val = data; ! 1055: ULONG cmask = 0x8000; ! 1056: ULONG sign = cmask & val; ! 1057: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1058: if ((val&cmask)!=sign)regs.v=1; ! 1059: regs.n = (val&cmask) != 0; ! 1060: regs.z = val == 0; ! 1061: put_word(dataa,val); ! 1062: }}}} ! 1063: void op_e1d8(UWORD opcode) ! 1064: { ! 1065: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1066: {{ CPTR dataa = regs.a[srcreg]; ! 1067: WORD data = get_word(dataa); ! 1068: { regs.a[srcreg] += 2; ! 1069: regs.v = 0; ! 1070: { UWORD val = data; ! 1071: ULONG cmask = 0x8000; ! 1072: ULONG sign = cmask & val; ! 1073: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1074: if ((val&cmask)!=sign)regs.v=1; ! 1075: regs.n = (val&cmask) != 0; ! 1076: regs.z = val == 0; ! 1077: put_word(dataa,val); ! 1078: }}}}} ! 1079: void op_e1e0(UWORD opcode) ! 1080: { ! 1081: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1082: {{ regs.a[srcreg] -= 2; ! 1083: { CPTR dataa = regs.a[srcreg]; ! 1084: WORD data = get_word(dataa); ! 1085: regs.v = 0; ! 1086: { UWORD val = data; ! 1087: ULONG cmask = 0x8000; ! 1088: ULONG sign = cmask & val; ! 1089: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1090: if ((val&cmask)!=sign)regs.v=1; ! 1091: regs.n = (val&cmask) != 0; ! 1092: regs.z = val == 0; ! 1093: put_word(dataa,val); ! 1094: }}}}} ! 1095: void op_e1e8(UWORD opcode) ! 1096: { ! 1097: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1098: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 1099: WORD data = get_word(dataa); ! 1100: regs.v = 0; ! 1101: { UWORD val = data; ! 1102: ULONG cmask = 0x8000; ! 1103: ULONG sign = cmask & val; ! 1104: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1105: if ((val&cmask)!=sign)regs.v=1; ! 1106: regs.n = (val&cmask) != 0; ! 1107: regs.z = val == 0; ! 1108: put_word(dataa,val); ! 1109: }}}} ! 1110: void op_e1f0(UWORD opcode) ! 1111: { ! 1112: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1113: {{ CPTR dataa = regs.a[srcreg]; ! 1114: UWORD datadp = nextiword(); ! 1115: dataa += (LONG)(BYTE)(datadp & 0xFF); ! 1116: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12]; ! 1117: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr; ! 1118: dataa += datadpr; ! 1119: { WORD data = get_word(dataa); ! 1120: regs.v = 0; ! 1121: { UWORD val = data; ! 1122: ULONG cmask = 0x8000; ! 1123: ULONG sign = cmask & val; ! 1124: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1125: if ((val&cmask)!=sign)regs.v=1; ! 1126: regs.n = (val&cmask) != 0; ! 1127: regs.z = val == 0; ! 1128: put_word(dataa,val); ! 1129: }}}}}} ! 1130: void op_e1f8(UWORD opcode) ! 1131: { ! 1132: {{ CPTR dataa = (LONG)(WORD)nextiword(); ! 1133: WORD data = get_word(dataa); ! 1134: regs.v = 0; ! 1135: { UWORD val = data; ! 1136: ULONG cmask = 0x8000; ! 1137: ULONG sign = cmask & val; ! 1138: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1139: if ((val&cmask)!=sign)regs.v=1; ! 1140: regs.n = (val&cmask) != 0; ! 1141: regs.z = val == 0; ! 1142: put_word(dataa,val); ! 1143: }}}} ! 1144: void op_e1f9(UWORD opcode) ! 1145: { ! 1146: {{ CPTR dataa = nextilong(); ! 1147: WORD data = get_word(dataa); ! 1148: regs.v = 0; ! 1149: { UWORD val = data; ! 1150: ULONG cmask = 0x8000; ! 1151: ULONG sign = cmask & val; ! 1152: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1153: if ((val&cmask)!=sign)regs.v=1; ! 1154: regs.n = (val&cmask) != 0; ! 1155: regs.z = val == 0; ! 1156: put_word(dataa,val); ! 1157: }}}} ! 1158: void op_e200(UWORD opcode) ! 1159: { ! 1160: ULONG srcreg = 1; ! 1161: ULONG dstreg = (opcode & 7) >> 0; ! 1162: {{ ULONG cnt = srcreg; ! 1163: { BYTE data = regs.d[dstreg]; ! 1164: { UBYTE val = data; ! 1165: cnt &= 63; ! 1166: regs.v = 0; ! 1167: { ULONG cmask = 0x80; ! 1168: ULONG sign = cmask & val; ! 1169: for(;cnt;--cnt){ ! 1170: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 1171: } ! 1172: regs.n = sign != 0; ! 1173: regs.z = val == 0; ! 1174: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1175: }}}}}} ! 1176: void op_e208(UWORD opcode) ! 1177: { ! 1178: ULONG srcreg = 1; ! 1179: ULONG dstreg = (opcode & 7) >> 0; ! 1180: {{ ULONG cnt = srcreg; ! 1181: { BYTE data = regs.d[dstreg]; ! 1182: { UBYTE val = data; ! 1183: cnt &= 63; ! 1184: { int carry = 0; ! 1185: for(;cnt;--cnt){ ! 1186: carry=val&1; val >>= 1; ! 1187: } ! 1188: regs.v = regs.c = 0; ! 1189: regs.z = ((BYTE)(val)) == 0; ! 1190: regs.n = ((BYTE)(val)) < 0; ! 1191: regs.c = regs.x = carry!=0; ! 1192: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1193: }}}}}} ! 1194: void op_e210(UWORD opcode) ! 1195: { ! 1196: ULONG srcreg = 1; ! 1197: ULONG dstreg = (opcode & 7) >> 0; ! 1198: {{ ULONG cnt = srcreg; ! 1199: { BYTE data = regs.d[dstreg]; ! 1200: { UBYTE val = data; ! 1201: cnt &= 63; ! 1202: { int carry = 0; ! 1203: ULONG cmask = 0x80; ! 1204: for(;cnt;--cnt){ ! 1205: carry=val&1; val >>= 1; ! 1206: if(regs.x) val |= cmask; ! 1207: regs.x = carry != 0; ! 1208: } ! 1209: regs.v = regs.c = 0; ! 1210: regs.z = ((BYTE)(val)) == 0; ! 1211: regs.n = ((BYTE)(val)) < 0; ! 1212: regs.x = regs.c = carry!=0; ! 1213: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1214: }}}}}} ! 1215: void op_e218(UWORD opcode) ! 1216: { ! 1217: ULONG srcreg = 1; ! 1218: ULONG dstreg = (opcode & 7) >> 0; ! 1219: {{ ULONG cnt = srcreg; ! 1220: { BYTE data = regs.d[dstreg]; ! 1221: { UBYTE val = data; ! 1222: cnt &= 63; ! 1223: { int carry = 0; ! 1224: ULONG cmask = 0x80; ! 1225: for(;cnt;--cnt){ ! 1226: carry=val&1; val = (ULONG)val >> 1; ! 1227: if(carry) val |= cmask; ! 1228: } ! 1229: regs.v = regs.c = 0; ! 1230: regs.z = ((BYTE)(val)) == 0; ! 1231: regs.n = ((BYTE)(val)) < 0; ! 1232: regs.c = carry!=0; ! 1233: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1234: }}}}}} ! 1235: void op_e240(UWORD opcode) ! 1236: { ! 1237: ULONG srcreg = 1; ! 1238: ULONG dstreg = (opcode & 7) >> 0; ! 1239: {{ ULONG cnt = srcreg; ! 1240: { WORD data = regs.d[dstreg]; ! 1241: { UWORD val = data; ! 1242: cnt &= 63; ! 1243: regs.v = 0; ! 1244: { ULONG cmask = 0x8000; ! 1245: ULONG sign = cmask & val; ! 1246: for(;cnt;--cnt){ ! 1247: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 1248: } ! 1249: regs.n = sign != 0; ! 1250: regs.z = val == 0; ! 1251: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1252: }}}}}} ! 1253: void op_e248(UWORD opcode) ! 1254: { ! 1255: ULONG srcreg = 1; ! 1256: ULONG dstreg = (opcode & 7) >> 0; ! 1257: {{ ULONG cnt = srcreg; ! 1258: { WORD data = regs.d[dstreg]; ! 1259: { UWORD val = data; ! 1260: cnt &= 63; ! 1261: { int carry = 0; ! 1262: for(;cnt;--cnt){ ! 1263: carry=val&1; val >>= 1; ! 1264: } ! 1265: regs.v = regs.c = 0; ! 1266: regs.z = ((WORD)(val)) == 0; ! 1267: regs.n = ((WORD)(val)) < 0; ! 1268: regs.c = regs.x = carry!=0; ! 1269: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1270: }}}}}} ! 1271: void op_e250(UWORD opcode) ! 1272: { ! 1273: ULONG srcreg = 1; ! 1274: ULONG dstreg = (opcode & 7) >> 0; ! 1275: {{ ULONG cnt = srcreg; ! 1276: { WORD data = regs.d[dstreg]; ! 1277: { UWORD val = data; ! 1278: cnt &= 63; ! 1279: { int carry = 0; ! 1280: ULONG cmask = 0x8000; ! 1281: for(;cnt;--cnt){ ! 1282: carry=val&1; val >>= 1; ! 1283: if(regs.x) val |= cmask; ! 1284: regs.x = carry != 0; ! 1285: } ! 1286: regs.v = regs.c = 0; ! 1287: regs.z = ((WORD)(val)) == 0; ! 1288: regs.n = ((WORD)(val)) < 0; ! 1289: regs.x = regs.c = carry!=0; ! 1290: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1291: }}}}}} ! 1292: void op_e258(UWORD opcode) ! 1293: { ! 1294: ULONG srcreg = 1; ! 1295: ULONG dstreg = (opcode & 7) >> 0; ! 1296: {{ ULONG cnt = srcreg; ! 1297: { WORD data = regs.d[dstreg]; ! 1298: { UWORD val = data; ! 1299: cnt &= 63; ! 1300: { int carry = 0; ! 1301: ULONG cmask = 0x8000; ! 1302: for(;cnt;--cnt){ ! 1303: carry=val&1; val = (ULONG)val >> 1; ! 1304: if(carry) val |= cmask; ! 1305: } ! 1306: regs.v = regs.c = 0; ! 1307: regs.z = ((WORD)(val)) == 0; ! 1308: regs.n = ((WORD)(val)) < 0; ! 1309: regs.c = carry!=0; ! 1310: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1311: }}}}}} ! 1312: void op_e280(UWORD opcode) ! 1313: { ! 1314: ULONG srcreg = 1; ! 1315: ULONG dstreg = (opcode & 7) >> 0; ! 1316: {{ ULONG cnt = srcreg; ! 1317: { LONG data = regs.d[dstreg]; ! 1318: { ULONG val = data; ! 1319: cnt &= 63; ! 1320: regs.v = 0; ! 1321: { ULONG cmask = 0x80000000; ! 1322: ULONG sign = cmask & val; ! 1323: for(;cnt;--cnt){ ! 1324: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 1325: } ! 1326: regs.n = sign != 0; ! 1327: regs.z = val == 0; ! 1328: regs.d[dstreg] = (val); ! 1329: }}}}}} ! 1330: void op_e288(UWORD opcode) ! 1331: { ! 1332: ULONG srcreg = 1; ! 1333: ULONG dstreg = (opcode & 7) >> 0; ! 1334: {{ ULONG cnt = srcreg; ! 1335: { LONG data = regs.d[dstreg]; ! 1336: { ULONG val = data; ! 1337: cnt &= 63; ! 1338: { int carry = 0; ! 1339: for(;cnt;--cnt){ ! 1340: carry=val&1; val >>= 1; ! 1341: } ! 1342: regs.v = regs.c = 0; ! 1343: regs.z = ((LONG)(val)) == 0; ! 1344: regs.n = ((LONG)(val)) < 0; ! 1345: regs.c = regs.x = carry!=0; ! 1346: regs.d[dstreg] = (val); ! 1347: }}}}}} ! 1348: void op_e290(UWORD opcode) ! 1349: { ! 1350: ULONG srcreg = 1; ! 1351: ULONG dstreg = (opcode & 7) >> 0; ! 1352: {{ ULONG cnt = srcreg; ! 1353: { LONG data = regs.d[dstreg]; ! 1354: { ULONG val = data; ! 1355: cnt &= 63; ! 1356: { int carry = 0; ! 1357: ULONG cmask = 0x80000000; ! 1358: for(;cnt;--cnt){ ! 1359: carry=val&1; val >>= 1; ! 1360: if(regs.x) val |= cmask; ! 1361: regs.x = carry != 0; ! 1362: } ! 1363: regs.v = regs.c = 0; ! 1364: regs.z = ((LONG)(val)) == 0; ! 1365: regs.n = ((LONG)(val)) < 0; ! 1366: regs.x = regs.c = carry!=0; ! 1367: regs.d[dstreg] = (val); ! 1368: }}}}}} ! 1369: void op_e298(UWORD opcode) ! 1370: { ! 1371: ULONG srcreg = 1; ! 1372: ULONG dstreg = (opcode & 7) >> 0; ! 1373: {{ ULONG cnt = srcreg; ! 1374: { LONG data = regs.d[dstreg]; ! 1375: { ULONG val = data; ! 1376: cnt &= 63; ! 1377: { int carry = 0; ! 1378: ULONG cmask = 0x80000000; ! 1379: for(;cnt;--cnt){ ! 1380: carry=val&1; val = (ULONG)val >> 1; ! 1381: if(carry) val |= cmask; ! 1382: } ! 1383: regs.v = regs.c = 0; ! 1384: regs.z = ((LONG)(val)) == 0; ! 1385: regs.n = ((LONG)(val)) < 0; ! 1386: regs.c = carry!=0; ! 1387: regs.d[dstreg] = (val); ! 1388: }}}}}} ! 1389: void op_e2d0(UWORD opcode) ! 1390: { ! 1391: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1392: {{ CPTR dataa = regs.a[srcreg]; ! 1393: WORD data = get_word(dataa); ! 1394: { UWORD val = data; ! 1395: int carry = val&1; ! 1396: carry=val&1; val >>= 1; ! 1397: regs.v = regs.c = 0; ! 1398: regs.z = ((WORD)(val)) == 0; ! 1399: regs.n = ((WORD)(val)) < 0; ! 1400: regs.c = regs.x = carry!=0; ! 1401: put_word(dataa,val); ! 1402: }}}} ! 1403: void op_e2d8(UWORD opcode) ! 1404: { ! 1405: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1406: {{ CPTR dataa = regs.a[srcreg]; ! 1407: WORD data = get_word(dataa); ! 1408: { regs.a[srcreg] += 2; ! 1409: { UWORD val = data; ! 1410: int carry = val&1; ! 1411: carry=val&1; val >>= 1; ! 1412: regs.v = regs.c = 0; ! 1413: regs.z = ((WORD)(val)) == 0; ! 1414: regs.n = ((WORD)(val)) < 0; ! 1415: regs.c = regs.x = carry!=0; ! 1416: put_word(dataa,val); ! 1417: }}}}} ! 1418: void op_e2e0(UWORD opcode) ! 1419: { ! 1420: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1421: {{ regs.a[srcreg] -= 2; ! 1422: { CPTR dataa = regs.a[srcreg]; ! 1423: WORD data = get_word(dataa); ! 1424: { UWORD val = data; ! 1425: int carry = val&1; ! 1426: carry=val&1; val >>= 1; ! 1427: regs.v = regs.c = 0; ! 1428: regs.z = ((WORD)(val)) == 0; ! 1429: regs.n = ((WORD)(val)) < 0; ! 1430: regs.c = regs.x = carry!=0; ! 1431: put_word(dataa,val); ! 1432: }}}}} ! 1433: void op_e2e8(UWORD opcode) ! 1434: { ! 1435: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1436: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 1437: WORD data = get_word(dataa); ! 1438: { UWORD val = data; ! 1439: int carry = val&1; ! 1440: carry=val&1; val >>= 1; ! 1441: regs.v = regs.c = 0; ! 1442: regs.z = ((WORD)(val)) == 0; ! 1443: regs.n = ((WORD)(val)) < 0; ! 1444: regs.c = regs.x = carry!=0; ! 1445: put_word(dataa,val); ! 1446: }}}} ! 1447: void op_e2f0(UWORD opcode) ! 1448: { ! 1449: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1450: {{ CPTR dataa = regs.a[srcreg]; ! 1451: UWORD datadp = nextiword(); ! 1452: dataa += (LONG)(BYTE)(datadp & 0xFF); ! 1453: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12]; ! 1454: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr; ! 1455: dataa += datadpr; ! 1456: { WORD data = get_word(dataa); ! 1457: { UWORD val = data; ! 1458: int carry = val&1; ! 1459: carry=val&1; val >>= 1; ! 1460: regs.v = regs.c = 0; ! 1461: regs.z = ((WORD)(val)) == 0; ! 1462: regs.n = ((WORD)(val)) < 0; ! 1463: regs.c = regs.x = carry!=0; ! 1464: put_word(dataa,val); ! 1465: }}}}}} ! 1466: void op_e2f8(UWORD opcode) ! 1467: { ! 1468: {{ CPTR dataa = (LONG)(WORD)nextiword(); ! 1469: WORD data = get_word(dataa); ! 1470: { UWORD val = data; ! 1471: int carry = val&1; ! 1472: carry=val&1; val >>= 1; ! 1473: regs.v = regs.c = 0; ! 1474: regs.z = ((WORD)(val)) == 0; ! 1475: regs.n = ((WORD)(val)) < 0; ! 1476: regs.c = regs.x = carry!=0; ! 1477: put_word(dataa,val); ! 1478: }}}} ! 1479: void op_e2f9(UWORD opcode) ! 1480: { ! 1481: {{ CPTR dataa = nextilong(); ! 1482: WORD data = get_word(dataa); ! 1483: { UWORD val = data; ! 1484: int carry = val&1; ! 1485: carry=val&1; val >>= 1; ! 1486: regs.v = regs.c = 0; ! 1487: regs.z = ((WORD)(val)) == 0; ! 1488: regs.n = ((WORD)(val)) < 0; ! 1489: regs.c = regs.x = carry!=0; ! 1490: put_word(dataa,val); ! 1491: }}}} ! 1492: void op_e300(UWORD opcode) ! 1493: { ! 1494: ULONG srcreg = 1; ! 1495: ULONG dstreg = (opcode & 7) >> 0; ! 1496: {{ ULONG cnt = srcreg; ! 1497: { BYTE data = regs.d[dstreg]; ! 1498: { UBYTE val = data; ! 1499: cnt &= 63; ! 1500: regs.v = 0; ! 1501: { ULONG cmask = 0x80; ! 1502: ULONG sign = cmask & val; ! 1503: for(;cnt;--cnt){ ! 1504: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1505: if ((val&cmask)!=sign)regs.v=1; ! 1506: } ! 1507: regs.n = (val&cmask) != 0; ! 1508: regs.z = val == 0; ! 1509: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1510: }}}}}} ! 1511: void op_e308(UWORD opcode) ! 1512: { ! 1513: ULONG srcreg = 1; ! 1514: ULONG dstreg = (opcode & 7) >> 0; ! 1515: {{ ULONG cnt = srcreg; ! 1516: { BYTE data = regs.d[dstreg]; ! 1517: { UBYTE val = data; ! 1518: cnt &= 63; ! 1519: { int carry = 0; ! 1520: ULONG cmask = 0x80; ! 1521: for(;cnt;--cnt){ ! 1522: carry=val&cmask; val <<= 1; ! 1523: } ! 1524: regs.v = regs.c = 0; ! 1525: regs.z = ((BYTE)(val)) == 0; ! 1526: regs.n = ((BYTE)(val)) < 0; ! 1527: regs.c = regs.x = carry!=0; ! 1528: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1529: }}}}}} ! 1530: void op_e310(UWORD opcode) ! 1531: { ! 1532: ULONG srcreg = 1; ! 1533: ULONG dstreg = (opcode & 7) >> 0; ! 1534: {{ ULONG cnt = srcreg; ! 1535: { BYTE data = regs.d[dstreg]; ! 1536: { UBYTE val = data; ! 1537: cnt &= 63; ! 1538: { int carry = 0; ! 1539: ULONG cmask = 0x80; ! 1540: for(;cnt;--cnt){ ! 1541: carry=val&cmask; val <<= 1; ! 1542: if(regs.x) val |= 1; ! 1543: regs.x = carry != 0; ! 1544: } ! 1545: regs.v = regs.c = 0; ! 1546: regs.z = ((BYTE)(val)) == 0; ! 1547: regs.n = ((BYTE)(val)) < 0; ! 1548: regs.x = regs.c = carry!=0; ! 1549: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1550: }}}}}} ! 1551: void op_e318(UWORD opcode) ! 1552: { ! 1553: ULONG srcreg = 1; ! 1554: ULONG dstreg = (opcode & 7) >> 0; ! 1555: {{ ULONG cnt = srcreg; ! 1556: { BYTE data = regs.d[dstreg]; ! 1557: { UBYTE val = data; ! 1558: cnt &= 63; ! 1559: { int carry = 0; ! 1560: ULONG cmask = 0x80; ! 1561: for(;cnt;--cnt){ ! 1562: carry=val&cmask; val <<= 1; ! 1563: if(carry) val |= 1; ! 1564: } ! 1565: regs.v = regs.c = 0; ! 1566: regs.z = ((BYTE)(val)) == 0; ! 1567: regs.n = ((BYTE)(val)) < 0; ! 1568: regs.c = carry!=0; ! 1569: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1570: }}}}}} ! 1571: void op_e340(UWORD opcode) ! 1572: { ! 1573: ULONG srcreg = 1; ! 1574: ULONG dstreg = (opcode & 7) >> 0; ! 1575: {{ ULONG cnt = srcreg; ! 1576: { WORD data = regs.d[dstreg]; ! 1577: { UWORD val = data; ! 1578: cnt &= 63; ! 1579: regs.v = 0; ! 1580: { ULONG cmask = 0x8000; ! 1581: ULONG sign = cmask & val; ! 1582: for(;cnt;--cnt){ ! 1583: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1584: if ((val&cmask)!=sign)regs.v=1; ! 1585: } ! 1586: regs.n = (val&cmask) != 0; ! 1587: regs.z = val == 0; ! 1588: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1589: }}}}}} ! 1590: void op_e348(UWORD opcode) ! 1591: { ! 1592: ULONG srcreg = 1; ! 1593: ULONG dstreg = (opcode & 7) >> 0; ! 1594: {{ ULONG cnt = srcreg; ! 1595: { WORD data = regs.d[dstreg]; ! 1596: { UWORD val = data; ! 1597: cnt &= 63; ! 1598: { int carry = 0; ! 1599: ULONG cmask = 0x8000; ! 1600: for(;cnt;--cnt){ ! 1601: carry=val&cmask; val <<= 1; ! 1602: } ! 1603: regs.v = regs.c = 0; ! 1604: regs.z = ((WORD)(val)) == 0; ! 1605: regs.n = ((WORD)(val)) < 0; ! 1606: regs.c = regs.x = carry!=0; ! 1607: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1608: }}}}}} ! 1609: void op_e350(UWORD opcode) ! 1610: { ! 1611: ULONG srcreg = 1; ! 1612: ULONG dstreg = (opcode & 7) >> 0; ! 1613: {{ ULONG cnt = srcreg; ! 1614: { WORD data = regs.d[dstreg]; ! 1615: { UWORD val = data; ! 1616: cnt &= 63; ! 1617: { int carry = 0; ! 1618: ULONG cmask = 0x8000; ! 1619: for(;cnt;--cnt){ ! 1620: carry=val&cmask; val <<= 1; ! 1621: if(regs.x) val |= 1; ! 1622: regs.x = carry != 0; ! 1623: } ! 1624: regs.v = regs.c = 0; ! 1625: regs.z = ((WORD)(val)) == 0; ! 1626: regs.n = ((WORD)(val)) < 0; ! 1627: regs.x = regs.c = carry!=0; ! 1628: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1629: }}}}}} ! 1630: void op_e358(UWORD opcode) ! 1631: { ! 1632: ULONG srcreg = 1; ! 1633: ULONG dstreg = (opcode & 7) >> 0; ! 1634: {{ ULONG cnt = srcreg; ! 1635: { WORD data = regs.d[dstreg]; ! 1636: { UWORD val = data; ! 1637: cnt &= 63; ! 1638: { int carry = 0; ! 1639: ULONG cmask = 0x8000; ! 1640: for(;cnt;--cnt){ ! 1641: carry=val&cmask; val <<= 1; ! 1642: if(carry) val |= 1; ! 1643: } ! 1644: regs.v = regs.c = 0; ! 1645: regs.z = ((WORD)(val)) == 0; ! 1646: regs.n = ((WORD)(val)) < 0; ! 1647: regs.c = carry!=0; ! 1648: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1649: }}}}}} ! 1650: void op_e380(UWORD opcode) ! 1651: { ! 1652: ULONG srcreg = 1; ! 1653: ULONG dstreg = (opcode & 7) >> 0; ! 1654: {{ ULONG cnt = srcreg; ! 1655: { LONG data = regs.d[dstreg]; ! 1656: { ULONG val = data; ! 1657: cnt &= 63; ! 1658: regs.v = 0; ! 1659: { ULONG cmask = 0x80000000; ! 1660: ULONG sign = cmask & val; ! 1661: for(;cnt;--cnt){ ! 1662: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 1663: if ((val&cmask)!=sign)regs.v=1; ! 1664: } ! 1665: regs.n = (val&cmask) != 0; ! 1666: regs.z = val == 0; ! 1667: regs.d[dstreg] = (val); ! 1668: }}}}}} ! 1669: void op_e388(UWORD opcode) ! 1670: { ! 1671: ULONG srcreg = 1; ! 1672: ULONG dstreg = (opcode & 7) >> 0; ! 1673: {{ ULONG cnt = srcreg; ! 1674: { LONG data = regs.d[dstreg]; ! 1675: { ULONG val = data; ! 1676: cnt &= 63; ! 1677: { int carry = 0; ! 1678: ULONG cmask = 0x80000000; ! 1679: for(;cnt;--cnt){ ! 1680: carry=val&cmask; val <<= 1; ! 1681: } ! 1682: regs.v = regs.c = 0; ! 1683: regs.z = ((LONG)(val)) == 0; ! 1684: regs.n = ((LONG)(val)) < 0; ! 1685: regs.c = regs.x = carry!=0; ! 1686: regs.d[dstreg] = (val); ! 1687: }}}}}} ! 1688: void op_e390(UWORD opcode) ! 1689: { ! 1690: ULONG srcreg = 1; ! 1691: ULONG dstreg = (opcode & 7) >> 0; ! 1692: {{ ULONG cnt = srcreg; ! 1693: { LONG data = regs.d[dstreg]; ! 1694: { ULONG val = data; ! 1695: cnt &= 63; ! 1696: { int carry = 0; ! 1697: ULONG cmask = 0x80000000; ! 1698: for(;cnt;--cnt){ ! 1699: carry=val&cmask; val <<= 1; ! 1700: if(regs.x) val |= 1; ! 1701: regs.x = carry != 0; ! 1702: } ! 1703: regs.v = regs.c = 0; ! 1704: regs.z = ((LONG)(val)) == 0; ! 1705: regs.n = ((LONG)(val)) < 0; ! 1706: regs.x = regs.c = carry!=0; ! 1707: regs.d[dstreg] = (val); ! 1708: }}}}}} ! 1709: void op_e398(UWORD opcode) ! 1710: { ! 1711: ULONG srcreg = 1; ! 1712: ULONG dstreg = (opcode & 7) >> 0; ! 1713: {{ ULONG cnt = srcreg; ! 1714: { LONG data = regs.d[dstreg]; ! 1715: { ULONG val = data; ! 1716: cnt &= 63; ! 1717: { int carry = 0; ! 1718: ULONG cmask = 0x80000000; ! 1719: for(;cnt;--cnt){ ! 1720: carry=val&cmask; val <<= 1; ! 1721: if(carry) val |= 1; ! 1722: } ! 1723: regs.v = regs.c = 0; ! 1724: regs.z = ((LONG)(val)) == 0; ! 1725: regs.n = ((LONG)(val)) < 0; ! 1726: regs.c = carry!=0; ! 1727: regs.d[dstreg] = (val); ! 1728: }}}}}} ! 1729: void op_e3d0(UWORD opcode) ! 1730: { ! 1731: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1732: {{ CPTR dataa = regs.a[srcreg]; ! 1733: WORD data = get_word(dataa); ! 1734: { UWORD val = data; ! 1735: ULONG cmask = 0x8000; ! 1736: int carry = val&cmask; ! 1737: val <<= 1; ! 1738: regs.v = regs.c = 0; ! 1739: regs.z = ((WORD)(val)) == 0; ! 1740: regs.n = ((WORD)(val)) < 0; ! 1741: regs.c = regs.x = carry!=0; ! 1742: put_word(dataa,val); ! 1743: }}}} ! 1744: void op_e3d8(UWORD opcode) ! 1745: { ! 1746: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1747: {{ CPTR dataa = regs.a[srcreg]; ! 1748: WORD data = get_word(dataa); ! 1749: { regs.a[srcreg] += 2; ! 1750: { UWORD val = data; ! 1751: ULONG cmask = 0x8000; ! 1752: int carry = val&cmask; ! 1753: val <<= 1; ! 1754: regs.v = regs.c = 0; ! 1755: regs.z = ((WORD)(val)) == 0; ! 1756: regs.n = ((WORD)(val)) < 0; ! 1757: regs.c = regs.x = carry!=0; ! 1758: put_word(dataa,val); ! 1759: }}}}} ! 1760: void op_e3e0(UWORD opcode) ! 1761: { ! 1762: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1763: {{ regs.a[srcreg] -= 2; ! 1764: { CPTR dataa = regs.a[srcreg]; ! 1765: WORD data = get_word(dataa); ! 1766: { UWORD val = data; ! 1767: ULONG cmask = 0x8000; ! 1768: int carry = val&cmask; ! 1769: val <<= 1; ! 1770: regs.v = regs.c = 0; ! 1771: regs.z = ((WORD)(val)) == 0; ! 1772: regs.n = ((WORD)(val)) < 0; ! 1773: regs.c = regs.x = carry!=0; ! 1774: put_word(dataa,val); ! 1775: }}}}} ! 1776: void op_e3e8(UWORD opcode) ! 1777: { ! 1778: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1779: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 1780: WORD data = get_word(dataa); ! 1781: { UWORD val = data; ! 1782: ULONG cmask = 0x8000; ! 1783: int carry = val&cmask; ! 1784: val <<= 1; ! 1785: regs.v = regs.c = 0; ! 1786: regs.z = ((WORD)(val)) == 0; ! 1787: regs.n = ((WORD)(val)) < 0; ! 1788: regs.c = regs.x = carry!=0; ! 1789: put_word(dataa,val); ! 1790: }}}} ! 1791: void op_e3f0(UWORD opcode) ! 1792: { ! 1793: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 1794: {{ CPTR dataa = regs.a[srcreg]; ! 1795: UWORD datadp = nextiword(); ! 1796: dataa += (LONG)(BYTE)(datadp & 0xFF); ! 1797: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12]; ! 1798: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr; ! 1799: dataa += datadpr; ! 1800: { WORD data = get_word(dataa); ! 1801: { UWORD val = data; ! 1802: ULONG cmask = 0x8000; ! 1803: int carry = val&cmask; ! 1804: val <<= 1; ! 1805: regs.v = regs.c = 0; ! 1806: regs.z = ((WORD)(val)) == 0; ! 1807: regs.n = ((WORD)(val)) < 0; ! 1808: regs.c = regs.x = carry!=0; ! 1809: put_word(dataa,val); ! 1810: }}}}}} ! 1811: void op_e3f8(UWORD opcode) ! 1812: { ! 1813: {{ CPTR dataa = (LONG)(WORD)nextiword(); ! 1814: WORD data = get_word(dataa); ! 1815: { UWORD val = data; ! 1816: ULONG cmask = 0x8000; ! 1817: int carry = val&cmask; ! 1818: val <<= 1; ! 1819: regs.v = regs.c = 0; ! 1820: regs.z = ((WORD)(val)) == 0; ! 1821: regs.n = ((WORD)(val)) < 0; ! 1822: regs.c = regs.x = carry!=0; ! 1823: put_word(dataa,val); ! 1824: }}}} ! 1825: void op_e3f9(UWORD opcode) ! 1826: { ! 1827: {{ CPTR dataa = nextilong(); ! 1828: WORD data = get_word(dataa); ! 1829: { UWORD val = data; ! 1830: ULONG cmask = 0x8000; ! 1831: int carry = val&cmask; ! 1832: val <<= 1; ! 1833: regs.v = regs.c = 0; ! 1834: regs.z = ((WORD)(val)) == 0; ! 1835: regs.n = ((WORD)(val)) < 0; ! 1836: regs.c = regs.x = carry!=0; ! 1837: put_word(dataa,val); ! 1838: }}}} ! 1839: void op_e400(UWORD opcode) ! 1840: { ! 1841: ULONG srcreg = 2; ! 1842: ULONG dstreg = (opcode & 7) >> 0; ! 1843: {{ ULONG cnt = srcreg; ! 1844: { BYTE data = regs.d[dstreg]; ! 1845: { UBYTE val = data; ! 1846: cnt &= 63; ! 1847: regs.v = 0; ! 1848: { ULONG cmask = 0x80; ! 1849: ULONG sign = cmask & val; ! 1850: for(;cnt;--cnt){ ! 1851: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 1852: } ! 1853: regs.n = sign != 0; ! 1854: regs.z = val == 0; ! 1855: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1856: }}}}}} ! 1857: void op_e408(UWORD opcode) ! 1858: { ! 1859: ULONG srcreg = 2; ! 1860: ULONG dstreg = (opcode & 7) >> 0; ! 1861: {{ ULONG cnt = srcreg; ! 1862: { BYTE data = regs.d[dstreg]; ! 1863: { UBYTE val = data; ! 1864: cnt &= 63; ! 1865: { int carry = 0; ! 1866: for(;cnt;--cnt){ ! 1867: carry=val&1; val >>= 1; ! 1868: } ! 1869: regs.v = regs.c = 0; ! 1870: regs.z = ((BYTE)(val)) == 0; ! 1871: regs.n = ((BYTE)(val)) < 0; ! 1872: regs.c = regs.x = carry!=0; ! 1873: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1874: }}}}}} ! 1875: void op_e410(UWORD opcode) ! 1876: { ! 1877: ULONG srcreg = 2; ! 1878: ULONG dstreg = (opcode & 7) >> 0; ! 1879: {{ ULONG cnt = srcreg; ! 1880: { BYTE data = regs.d[dstreg]; ! 1881: { UBYTE val = data; ! 1882: cnt &= 63; ! 1883: { int carry = 0; ! 1884: ULONG cmask = 0x80; ! 1885: for(;cnt;--cnt){ ! 1886: carry=val&1; val >>= 1; ! 1887: if(regs.x) val |= cmask; ! 1888: regs.x = carry != 0; ! 1889: } ! 1890: regs.v = regs.c = 0; ! 1891: regs.z = ((BYTE)(val)) == 0; ! 1892: regs.n = ((BYTE)(val)) < 0; ! 1893: regs.x = regs.c = carry!=0; ! 1894: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1895: }}}}}} ! 1896: void op_e418(UWORD opcode) ! 1897: { ! 1898: ULONG srcreg = 2; ! 1899: ULONG dstreg = (opcode & 7) >> 0; ! 1900: {{ ULONG cnt = srcreg; ! 1901: { BYTE data = regs.d[dstreg]; ! 1902: { UBYTE val = data; ! 1903: cnt &= 63; ! 1904: { int carry = 0; ! 1905: ULONG cmask = 0x80; ! 1906: for(;cnt;--cnt){ ! 1907: carry=val&1; val = (ULONG)val >> 1; ! 1908: if(carry) val |= cmask; ! 1909: } ! 1910: regs.v = regs.c = 0; ! 1911: regs.z = ((BYTE)(val)) == 0; ! 1912: regs.n = ((BYTE)(val)) < 0; ! 1913: regs.c = carry!=0; ! 1914: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 1915: }}}}}} ! 1916: void op_e440(UWORD opcode) ! 1917: { ! 1918: ULONG srcreg = 2; ! 1919: ULONG dstreg = (opcode & 7) >> 0; ! 1920: {{ ULONG cnt = srcreg; ! 1921: { WORD data = regs.d[dstreg]; ! 1922: { UWORD val = data; ! 1923: cnt &= 63; ! 1924: regs.v = 0; ! 1925: { ULONG cmask = 0x8000; ! 1926: ULONG sign = cmask & val; ! 1927: for(;cnt;--cnt){ ! 1928: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 1929: } ! 1930: regs.n = sign != 0; ! 1931: regs.z = val == 0; ! 1932: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1933: }}}}}} ! 1934: void op_e448(UWORD opcode) ! 1935: { ! 1936: ULONG srcreg = 2; ! 1937: ULONG dstreg = (opcode & 7) >> 0; ! 1938: {{ ULONG cnt = srcreg; ! 1939: { WORD data = regs.d[dstreg]; ! 1940: { UWORD val = data; ! 1941: cnt &= 63; ! 1942: { int carry = 0; ! 1943: for(;cnt;--cnt){ ! 1944: carry=val&1; val >>= 1; ! 1945: } ! 1946: regs.v = regs.c = 0; ! 1947: regs.z = ((WORD)(val)) == 0; ! 1948: regs.n = ((WORD)(val)) < 0; ! 1949: regs.c = regs.x = carry!=0; ! 1950: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1951: }}}}}} ! 1952: void op_e450(UWORD opcode) ! 1953: { ! 1954: ULONG srcreg = 2; ! 1955: ULONG dstreg = (opcode & 7) >> 0; ! 1956: {{ ULONG cnt = srcreg; ! 1957: { WORD data = regs.d[dstreg]; ! 1958: { UWORD val = data; ! 1959: cnt &= 63; ! 1960: { int carry = 0; ! 1961: ULONG cmask = 0x8000; ! 1962: for(;cnt;--cnt){ ! 1963: carry=val&1; val >>= 1; ! 1964: if(regs.x) val |= cmask; ! 1965: regs.x = carry != 0; ! 1966: } ! 1967: regs.v = regs.c = 0; ! 1968: regs.z = ((WORD)(val)) == 0; ! 1969: regs.n = ((WORD)(val)) < 0; ! 1970: regs.x = regs.c = carry!=0; ! 1971: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1972: }}}}}} ! 1973: void op_e458(UWORD opcode) ! 1974: { ! 1975: ULONG srcreg = 2; ! 1976: ULONG dstreg = (opcode & 7) >> 0; ! 1977: {{ ULONG cnt = srcreg; ! 1978: { WORD data = regs.d[dstreg]; ! 1979: { UWORD val = data; ! 1980: cnt &= 63; ! 1981: { int carry = 0; ! 1982: ULONG cmask = 0x8000; ! 1983: for(;cnt;--cnt){ ! 1984: carry=val&1; val = (ULONG)val >> 1; ! 1985: if(carry) val |= cmask; ! 1986: } ! 1987: regs.v = regs.c = 0; ! 1988: regs.z = ((WORD)(val)) == 0; ! 1989: regs.n = ((WORD)(val)) < 0; ! 1990: regs.c = carry!=0; ! 1991: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 1992: }}}}}} ! 1993: void op_e480(UWORD opcode) ! 1994: { ! 1995: ULONG srcreg = 2; ! 1996: ULONG dstreg = (opcode & 7) >> 0; ! 1997: {{ ULONG cnt = srcreg; ! 1998: { LONG data = regs.d[dstreg]; ! 1999: { ULONG val = data; ! 2000: cnt &= 63; ! 2001: regs.v = 0; ! 2002: { ULONG cmask = 0x80000000; ! 2003: ULONG sign = cmask & val; ! 2004: for(;cnt;--cnt){ ! 2005: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 2006: } ! 2007: regs.n = sign != 0; ! 2008: regs.z = val == 0; ! 2009: regs.d[dstreg] = (val); ! 2010: }}}}}} ! 2011: void op_e488(UWORD opcode) ! 2012: { ! 2013: ULONG srcreg = 2; ! 2014: ULONG dstreg = (opcode & 7) >> 0; ! 2015: {{ ULONG cnt = srcreg; ! 2016: { LONG data = regs.d[dstreg]; ! 2017: { ULONG val = data; ! 2018: cnt &= 63; ! 2019: { int carry = 0; ! 2020: for(;cnt;--cnt){ ! 2021: carry=val&1; val >>= 1; ! 2022: } ! 2023: regs.v = regs.c = 0; ! 2024: regs.z = ((LONG)(val)) == 0; ! 2025: regs.n = ((LONG)(val)) < 0; ! 2026: regs.c = regs.x = carry!=0; ! 2027: regs.d[dstreg] = (val); ! 2028: }}}}}} ! 2029: void op_e490(UWORD opcode) ! 2030: { ! 2031: ULONG srcreg = 2; ! 2032: ULONG dstreg = (opcode & 7) >> 0; ! 2033: {{ ULONG cnt = srcreg; ! 2034: { LONG data = regs.d[dstreg]; ! 2035: { ULONG val = data; ! 2036: cnt &= 63; ! 2037: { int carry = 0; ! 2038: ULONG cmask = 0x80000000; ! 2039: for(;cnt;--cnt){ ! 2040: carry=val&1; val >>= 1; ! 2041: if(regs.x) val |= cmask; ! 2042: regs.x = carry != 0; ! 2043: } ! 2044: regs.v = regs.c = 0; ! 2045: regs.z = ((LONG)(val)) == 0; ! 2046: regs.n = ((LONG)(val)) < 0; ! 2047: regs.x = regs.c = carry!=0; ! 2048: regs.d[dstreg] = (val); ! 2049: }}}}}} ! 2050: void op_e498(UWORD opcode) ! 2051: { ! 2052: ULONG srcreg = 2; ! 2053: ULONG dstreg = (opcode & 7) >> 0; ! 2054: {{ ULONG cnt = srcreg; ! 2055: { LONG data = regs.d[dstreg]; ! 2056: { ULONG val = data; ! 2057: cnt &= 63; ! 2058: { int carry = 0; ! 2059: ULONG cmask = 0x80000000; ! 2060: for(;cnt;--cnt){ ! 2061: carry=val&1; val = (ULONG)val >> 1; ! 2062: if(carry) val |= cmask; ! 2063: } ! 2064: regs.v = regs.c = 0; ! 2065: regs.z = ((LONG)(val)) == 0; ! 2066: regs.n = ((LONG)(val)) < 0; ! 2067: regs.c = carry!=0; ! 2068: regs.d[dstreg] = (val); ! 2069: }}}}}} ! 2070: void op_e4d0(UWORD opcode) ! 2071: { ! 2072: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2073: {{ CPTR dataa = regs.a[srcreg]; ! 2074: WORD data = get_word(dataa); ! 2075: { UWORD val = data; ! 2076: int carry = val&1; ! 2077: ULONG cmask = 0x8000; ! 2078: val >>= 1; ! 2079: if(regs.x) val |= cmask; ! 2080: regs.x = carry != 0; ! 2081: regs.v = regs.c = 0; ! 2082: regs.z = ((WORD)(val)) == 0; ! 2083: regs.n = ((WORD)(val)) < 0; ! 2084: regs.x = regs.c = carry!=0; ! 2085: put_word(dataa,val); ! 2086: }}}} ! 2087: void op_e4d8(UWORD opcode) ! 2088: { ! 2089: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2090: {{ CPTR dataa = regs.a[srcreg]; ! 2091: WORD data = get_word(dataa); ! 2092: { regs.a[srcreg] += 2; ! 2093: { UWORD val = data; ! 2094: int carry = val&1; ! 2095: ULONG cmask = 0x8000; ! 2096: val >>= 1; ! 2097: if(regs.x) val |= cmask; ! 2098: regs.x = carry != 0; ! 2099: regs.v = regs.c = 0; ! 2100: regs.z = ((WORD)(val)) == 0; ! 2101: regs.n = ((WORD)(val)) < 0; ! 2102: regs.x = regs.c = carry!=0; ! 2103: put_word(dataa,val); ! 2104: }}}}} ! 2105: void op_e4e0(UWORD opcode) ! 2106: { ! 2107: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2108: {{ regs.a[srcreg] -= 2; ! 2109: { CPTR dataa = regs.a[srcreg]; ! 2110: WORD data = get_word(dataa); ! 2111: { UWORD val = data; ! 2112: int carry = val&1; ! 2113: ULONG cmask = 0x8000; ! 2114: val >>= 1; ! 2115: if(regs.x) val |= cmask; ! 2116: regs.x = carry != 0; ! 2117: regs.v = regs.c = 0; ! 2118: regs.z = ((WORD)(val)) == 0; ! 2119: regs.n = ((WORD)(val)) < 0; ! 2120: regs.x = regs.c = carry!=0; ! 2121: put_word(dataa,val); ! 2122: }}}}} ! 2123: void op_e4e8(UWORD opcode) ! 2124: { ! 2125: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2126: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 2127: WORD data = get_word(dataa); ! 2128: { UWORD val = data; ! 2129: int carry = val&1; ! 2130: ULONG cmask = 0x8000; ! 2131: val >>= 1; ! 2132: if(regs.x) val |= cmask; ! 2133: regs.x = carry != 0; ! 2134: regs.v = regs.c = 0; ! 2135: regs.z = ((WORD)(val)) == 0; ! 2136: regs.n = ((WORD)(val)) < 0; ! 2137: regs.x = regs.c = carry!=0; ! 2138: put_word(dataa,val); ! 2139: }}}} ! 2140: void op_e4f0(UWORD opcode) ! 2141: { ! 2142: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2143: {{ CPTR dataa = regs.a[srcreg]; ! 2144: UWORD datadp = nextiword(); ! 2145: dataa += (LONG)(BYTE)(datadp & 0xFF); ! 2146: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12]; ! 2147: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr; ! 2148: dataa += datadpr; ! 2149: { WORD data = get_word(dataa); ! 2150: { UWORD val = data; ! 2151: int carry = val&1; ! 2152: ULONG cmask = 0x8000; ! 2153: val >>= 1; ! 2154: if(regs.x) val |= cmask; ! 2155: regs.x = carry != 0; ! 2156: regs.v = regs.c = 0; ! 2157: regs.z = ((WORD)(val)) == 0; ! 2158: regs.n = ((WORD)(val)) < 0; ! 2159: regs.x = regs.c = carry!=0; ! 2160: put_word(dataa,val); ! 2161: }}}}}} ! 2162: void op_e4f8(UWORD opcode) ! 2163: { ! 2164: {{ CPTR dataa = (LONG)(WORD)nextiword(); ! 2165: WORD data = get_word(dataa); ! 2166: { UWORD val = data; ! 2167: int carry = val&1; ! 2168: ULONG cmask = 0x8000; ! 2169: val >>= 1; ! 2170: if(regs.x) val |= cmask; ! 2171: regs.x = carry != 0; ! 2172: regs.v = regs.c = 0; ! 2173: regs.z = ((WORD)(val)) == 0; ! 2174: regs.n = ((WORD)(val)) < 0; ! 2175: regs.x = regs.c = carry!=0; ! 2176: put_word(dataa,val); ! 2177: }}}} ! 2178: void op_e4f9(UWORD opcode) ! 2179: { ! 2180: {{ CPTR dataa = nextilong(); ! 2181: WORD data = get_word(dataa); ! 2182: { UWORD val = data; ! 2183: int carry = val&1; ! 2184: ULONG cmask = 0x8000; ! 2185: val >>= 1; ! 2186: if(regs.x) val |= cmask; ! 2187: regs.x = carry != 0; ! 2188: regs.v = regs.c = 0; ! 2189: regs.z = ((WORD)(val)) == 0; ! 2190: regs.n = ((WORD)(val)) < 0; ! 2191: regs.x = regs.c = carry!=0; ! 2192: put_word(dataa,val); ! 2193: }}}} ! 2194: void op_e500(UWORD opcode) ! 2195: { ! 2196: ULONG srcreg = 2; ! 2197: ULONG dstreg = (opcode & 7) >> 0; ! 2198: {{ ULONG cnt = srcreg; ! 2199: { BYTE data = regs.d[dstreg]; ! 2200: { UBYTE val = data; ! 2201: cnt &= 63; ! 2202: regs.v = 0; ! 2203: { ULONG cmask = 0x80; ! 2204: ULONG sign = cmask & val; ! 2205: for(;cnt;--cnt){ ! 2206: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 2207: if ((val&cmask)!=sign)regs.v=1; ! 2208: } ! 2209: regs.n = (val&cmask) != 0; ! 2210: regs.z = val == 0; ! 2211: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2212: }}}}}} ! 2213: void op_e508(UWORD opcode) ! 2214: { ! 2215: ULONG srcreg = 2; ! 2216: ULONG dstreg = (opcode & 7) >> 0; ! 2217: {{ ULONG cnt = srcreg; ! 2218: { BYTE data = regs.d[dstreg]; ! 2219: { UBYTE val = data; ! 2220: cnt &= 63; ! 2221: { int carry = 0; ! 2222: ULONG cmask = 0x80; ! 2223: for(;cnt;--cnt){ ! 2224: carry=val&cmask; val <<= 1; ! 2225: } ! 2226: regs.v = regs.c = 0; ! 2227: regs.z = ((BYTE)(val)) == 0; ! 2228: regs.n = ((BYTE)(val)) < 0; ! 2229: regs.c = regs.x = carry!=0; ! 2230: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2231: }}}}}} ! 2232: void op_e510(UWORD opcode) ! 2233: { ! 2234: ULONG srcreg = 2; ! 2235: ULONG dstreg = (opcode & 7) >> 0; ! 2236: {{ ULONG cnt = srcreg; ! 2237: { BYTE data = regs.d[dstreg]; ! 2238: { UBYTE val = data; ! 2239: cnt &= 63; ! 2240: { int carry = 0; ! 2241: ULONG cmask = 0x80; ! 2242: for(;cnt;--cnt){ ! 2243: carry=val&cmask; val <<= 1; ! 2244: if(regs.x) val |= 1; ! 2245: regs.x = carry != 0; ! 2246: } ! 2247: regs.v = regs.c = 0; ! 2248: regs.z = ((BYTE)(val)) == 0; ! 2249: regs.n = ((BYTE)(val)) < 0; ! 2250: regs.x = regs.c = carry!=0; ! 2251: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2252: }}}}}} ! 2253: void op_e518(UWORD opcode) ! 2254: { ! 2255: ULONG srcreg = 2; ! 2256: ULONG dstreg = (opcode & 7) >> 0; ! 2257: {{ ULONG cnt = srcreg; ! 2258: { BYTE data = regs.d[dstreg]; ! 2259: { UBYTE val = data; ! 2260: cnt &= 63; ! 2261: { int carry = 0; ! 2262: ULONG cmask = 0x80; ! 2263: for(;cnt;--cnt){ ! 2264: carry=val&cmask; val <<= 1; ! 2265: if(carry) val |= 1; ! 2266: } ! 2267: regs.v = regs.c = 0; ! 2268: regs.z = ((BYTE)(val)) == 0; ! 2269: regs.n = ((BYTE)(val)) < 0; ! 2270: regs.c = carry!=0; ! 2271: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2272: }}}}}} ! 2273: void op_e540(UWORD opcode) ! 2274: { ! 2275: ULONG srcreg = 2; ! 2276: ULONG dstreg = (opcode & 7) >> 0; ! 2277: {{ ULONG cnt = srcreg; ! 2278: { WORD data = regs.d[dstreg]; ! 2279: { UWORD val = data; ! 2280: cnt &= 63; ! 2281: regs.v = 0; ! 2282: { ULONG cmask = 0x8000; ! 2283: ULONG sign = cmask & val; ! 2284: for(;cnt;--cnt){ ! 2285: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 2286: if ((val&cmask)!=sign)regs.v=1; ! 2287: } ! 2288: regs.n = (val&cmask) != 0; ! 2289: regs.z = val == 0; ! 2290: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 2291: }}}}}} ! 2292: void op_e548(UWORD opcode) ! 2293: { ! 2294: ULONG srcreg = 2; ! 2295: ULONG dstreg = (opcode & 7) >> 0; ! 2296: {{ ULONG cnt = srcreg; ! 2297: { WORD data = regs.d[dstreg]; ! 2298: { UWORD val = data; ! 2299: cnt &= 63; ! 2300: { int carry = 0; ! 2301: ULONG cmask = 0x8000; ! 2302: for(;cnt;--cnt){ ! 2303: carry=val&cmask; val <<= 1; ! 2304: } ! 2305: regs.v = regs.c = 0; ! 2306: regs.z = ((WORD)(val)) == 0; ! 2307: regs.n = ((WORD)(val)) < 0; ! 2308: regs.c = regs.x = carry!=0; ! 2309: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 2310: }}}}}} ! 2311: void op_e550(UWORD opcode) ! 2312: { ! 2313: ULONG srcreg = 2; ! 2314: ULONG dstreg = (opcode & 7) >> 0; ! 2315: {{ ULONG cnt = srcreg; ! 2316: { WORD data = regs.d[dstreg]; ! 2317: { UWORD val = data; ! 2318: cnt &= 63; ! 2319: { int carry = 0; ! 2320: ULONG cmask = 0x8000; ! 2321: for(;cnt;--cnt){ ! 2322: carry=val&cmask; val <<= 1; ! 2323: if(regs.x) val |= 1; ! 2324: regs.x = carry != 0; ! 2325: } ! 2326: regs.v = regs.c = 0; ! 2327: regs.z = ((WORD)(val)) == 0; ! 2328: regs.n = ((WORD)(val)) < 0; ! 2329: regs.x = regs.c = carry!=0; ! 2330: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 2331: }}}}}} ! 2332: void op_e558(UWORD opcode) ! 2333: { ! 2334: ULONG srcreg = 2; ! 2335: ULONG dstreg = (opcode & 7) >> 0; ! 2336: {{ ULONG cnt = srcreg; ! 2337: { WORD data = regs.d[dstreg]; ! 2338: { UWORD val = data; ! 2339: cnt &= 63; ! 2340: { int carry = 0; ! 2341: ULONG cmask = 0x8000; ! 2342: for(;cnt;--cnt){ ! 2343: carry=val&cmask; val <<= 1; ! 2344: if(carry) val |= 1; ! 2345: } ! 2346: regs.v = regs.c = 0; ! 2347: regs.z = ((WORD)(val)) == 0; ! 2348: regs.n = ((WORD)(val)) < 0; ! 2349: regs.c = carry!=0; ! 2350: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 2351: }}}}}} ! 2352: void op_e580(UWORD opcode) ! 2353: { ! 2354: ULONG srcreg = 2; ! 2355: ULONG dstreg = (opcode & 7) >> 0; ! 2356: {{ ULONG cnt = srcreg; ! 2357: { LONG data = regs.d[dstreg]; ! 2358: { ULONG val = data; ! 2359: cnt &= 63; ! 2360: regs.v = 0; ! 2361: { ULONG cmask = 0x80000000; ! 2362: ULONG sign = cmask & val; ! 2363: for(;cnt;--cnt){ ! 2364: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 2365: if ((val&cmask)!=sign)regs.v=1; ! 2366: } ! 2367: regs.n = (val&cmask) != 0; ! 2368: regs.z = val == 0; ! 2369: regs.d[dstreg] = (val); ! 2370: }}}}}} ! 2371: void op_e588(UWORD opcode) ! 2372: { ! 2373: ULONG srcreg = 2; ! 2374: ULONG dstreg = (opcode & 7) >> 0; ! 2375: {{ ULONG cnt = srcreg; ! 2376: { LONG data = regs.d[dstreg]; ! 2377: { ULONG val = data; ! 2378: cnt &= 63; ! 2379: { int carry = 0; ! 2380: ULONG cmask = 0x80000000; ! 2381: for(;cnt;--cnt){ ! 2382: carry=val&cmask; val <<= 1; ! 2383: } ! 2384: regs.v = regs.c = 0; ! 2385: regs.z = ((LONG)(val)) == 0; ! 2386: regs.n = ((LONG)(val)) < 0; ! 2387: regs.c = regs.x = carry!=0; ! 2388: regs.d[dstreg] = (val); ! 2389: }}}}}} ! 2390: void op_e590(UWORD opcode) ! 2391: { ! 2392: ULONG srcreg = 2; ! 2393: ULONG dstreg = (opcode & 7) >> 0; ! 2394: {{ ULONG cnt = srcreg; ! 2395: { LONG data = regs.d[dstreg]; ! 2396: { ULONG val = data; ! 2397: cnt &= 63; ! 2398: { int carry = 0; ! 2399: ULONG cmask = 0x80000000; ! 2400: for(;cnt;--cnt){ ! 2401: carry=val&cmask; val <<= 1; ! 2402: if(regs.x) val |= 1; ! 2403: regs.x = carry != 0; ! 2404: } ! 2405: regs.v = regs.c = 0; ! 2406: regs.z = ((LONG)(val)) == 0; ! 2407: regs.n = ((LONG)(val)) < 0; ! 2408: regs.x = regs.c = carry!=0; ! 2409: regs.d[dstreg] = (val); ! 2410: }}}}}} ! 2411: void op_e598(UWORD opcode) ! 2412: { ! 2413: ULONG srcreg = 2; ! 2414: ULONG dstreg = (opcode & 7) >> 0; ! 2415: {{ ULONG cnt = srcreg; ! 2416: { LONG data = regs.d[dstreg]; ! 2417: { ULONG val = data; ! 2418: cnt &= 63; ! 2419: { int carry = 0; ! 2420: ULONG cmask = 0x80000000; ! 2421: for(;cnt;--cnt){ ! 2422: carry=val&cmask; val <<= 1; ! 2423: if(carry) val |= 1; ! 2424: } ! 2425: regs.v = regs.c = 0; ! 2426: regs.z = ((LONG)(val)) == 0; ! 2427: regs.n = ((LONG)(val)) < 0; ! 2428: regs.c = carry!=0; ! 2429: regs.d[dstreg] = (val); ! 2430: }}}}}} ! 2431: void op_e5d0(UWORD opcode) ! 2432: { ! 2433: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2434: {{ CPTR dataa = regs.a[srcreg]; ! 2435: WORD data = get_word(dataa); ! 2436: { UWORD val = data; ! 2437: ULONG cmask = 0x8000; ! 2438: int carry = val&cmask; ! 2439: val <<= 1; ! 2440: if(regs.x) val |= 1; ! 2441: regs.x = carry != 0; ! 2442: regs.v = regs.c = 0; ! 2443: regs.z = ((WORD)(val)) == 0; ! 2444: regs.n = ((WORD)(val)) < 0; ! 2445: regs.x = regs.c = carry!=0; ! 2446: put_word(dataa,val); ! 2447: }}}} ! 2448: void op_e5d8(UWORD opcode) ! 2449: { ! 2450: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2451: {{ CPTR dataa = regs.a[srcreg]; ! 2452: WORD data = get_word(dataa); ! 2453: { regs.a[srcreg] += 2; ! 2454: { UWORD val = data; ! 2455: ULONG cmask = 0x8000; ! 2456: int carry = val&cmask; ! 2457: val <<= 1; ! 2458: if(regs.x) val |= 1; ! 2459: regs.x = carry != 0; ! 2460: regs.v = regs.c = 0; ! 2461: regs.z = ((WORD)(val)) == 0; ! 2462: regs.n = ((WORD)(val)) < 0; ! 2463: regs.x = regs.c = carry!=0; ! 2464: put_word(dataa,val); ! 2465: }}}}} ! 2466: void op_e5e0(UWORD opcode) ! 2467: { ! 2468: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2469: {{ regs.a[srcreg] -= 2; ! 2470: { CPTR dataa = regs.a[srcreg]; ! 2471: WORD data = get_word(dataa); ! 2472: { UWORD val = data; ! 2473: ULONG cmask = 0x8000; ! 2474: int carry = val&cmask; ! 2475: val <<= 1; ! 2476: if(regs.x) val |= 1; ! 2477: regs.x = carry != 0; ! 2478: regs.v = regs.c = 0; ! 2479: regs.z = ((WORD)(val)) == 0; ! 2480: regs.n = ((WORD)(val)) < 0; ! 2481: regs.x = regs.c = carry!=0; ! 2482: put_word(dataa,val); ! 2483: }}}}} ! 2484: void op_e5e8(UWORD opcode) ! 2485: { ! 2486: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2487: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 2488: WORD data = get_word(dataa); ! 2489: { UWORD val = data; ! 2490: ULONG cmask = 0x8000; ! 2491: int carry = val&cmask; ! 2492: val <<= 1; ! 2493: if(regs.x) val |= 1; ! 2494: regs.x = carry != 0; ! 2495: regs.v = regs.c = 0; ! 2496: regs.z = ((WORD)(val)) == 0; ! 2497: regs.n = ((WORD)(val)) < 0; ! 2498: regs.x = regs.c = carry!=0; ! 2499: put_word(dataa,val); ! 2500: }}}} ! 2501: void op_e5f0(UWORD opcode) ! 2502: { ! 2503: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2504: {{ CPTR dataa = regs.a[srcreg]; ! 2505: UWORD datadp = nextiword(); ! 2506: dataa += (LONG)(BYTE)(datadp & 0xFF); ! 2507: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12]; ! 2508: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr; ! 2509: dataa += datadpr; ! 2510: { WORD data = get_word(dataa); ! 2511: { UWORD val = data; ! 2512: ULONG cmask = 0x8000; ! 2513: int carry = val&cmask; ! 2514: val <<= 1; ! 2515: if(regs.x) val |= 1; ! 2516: regs.x = carry != 0; ! 2517: regs.v = regs.c = 0; ! 2518: regs.z = ((WORD)(val)) == 0; ! 2519: regs.n = ((WORD)(val)) < 0; ! 2520: regs.x = regs.c = carry!=0; ! 2521: put_word(dataa,val); ! 2522: }}}}}} ! 2523: void op_e5f8(UWORD opcode) ! 2524: { ! 2525: {{ CPTR dataa = (LONG)(WORD)nextiword(); ! 2526: WORD data = get_word(dataa); ! 2527: { UWORD val = data; ! 2528: ULONG cmask = 0x8000; ! 2529: int carry = val&cmask; ! 2530: val <<= 1; ! 2531: if(regs.x) val |= 1; ! 2532: regs.x = carry != 0; ! 2533: regs.v = regs.c = 0; ! 2534: regs.z = ((WORD)(val)) == 0; ! 2535: regs.n = ((WORD)(val)) < 0; ! 2536: regs.x = regs.c = carry!=0; ! 2537: put_word(dataa,val); ! 2538: }}}} ! 2539: void op_e5f9(UWORD opcode) ! 2540: { ! 2541: {{ CPTR dataa = nextilong(); ! 2542: WORD data = get_word(dataa); ! 2543: { UWORD val = data; ! 2544: ULONG cmask = 0x8000; ! 2545: int carry = val&cmask; ! 2546: val <<= 1; ! 2547: if(regs.x) val |= 1; ! 2548: regs.x = carry != 0; ! 2549: regs.v = regs.c = 0; ! 2550: regs.z = ((WORD)(val)) == 0; ! 2551: regs.n = ((WORD)(val)) < 0; ! 2552: regs.x = regs.c = carry!=0; ! 2553: put_word(dataa,val); ! 2554: }}}} ! 2555: void op_e600(UWORD opcode) ! 2556: { ! 2557: ULONG srcreg = 3; ! 2558: ULONG dstreg = (opcode & 7) >> 0; ! 2559: {{ ULONG cnt = srcreg; ! 2560: { BYTE data = regs.d[dstreg]; ! 2561: { UBYTE val = data; ! 2562: cnt &= 63; ! 2563: regs.v = 0; ! 2564: { ULONG cmask = 0x80; ! 2565: ULONG sign = cmask & val; ! 2566: for(;cnt;--cnt){ ! 2567: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 2568: } ! 2569: regs.n = sign != 0; ! 2570: regs.z = val == 0; ! 2571: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2572: }}}}}} ! 2573: void op_e608(UWORD opcode) ! 2574: { ! 2575: ULONG srcreg = 3; ! 2576: ULONG dstreg = (opcode & 7) >> 0; ! 2577: {{ ULONG cnt = srcreg; ! 2578: { BYTE data = regs.d[dstreg]; ! 2579: { UBYTE val = data; ! 2580: cnt &= 63; ! 2581: { int carry = 0; ! 2582: for(;cnt;--cnt){ ! 2583: carry=val&1; val >>= 1; ! 2584: } ! 2585: regs.v = regs.c = 0; ! 2586: regs.z = ((BYTE)(val)) == 0; ! 2587: regs.n = ((BYTE)(val)) < 0; ! 2588: regs.c = regs.x = carry!=0; ! 2589: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2590: }}}}}} ! 2591: void op_e610(UWORD opcode) ! 2592: { ! 2593: ULONG srcreg = 3; ! 2594: ULONG dstreg = (opcode & 7) >> 0; ! 2595: {{ ULONG cnt = srcreg; ! 2596: { BYTE data = regs.d[dstreg]; ! 2597: { UBYTE val = data; ! 2598: cnt &= 63; ! 2599: { int carry = 0; ! 2600: ULONG cmask = 0x80; ! 2601: for(;cnt;--cnt){ ! 2602: carry=val&1; val >>= 1; ! 2603: if(regs.x) val |= cmask; ! 2604: regs.x = carry != 0; ! 2605: } ! 2606: regs.v = regs.c = 0; ! 2607: regs.z = ((BYTE)(val)) == 0; ! 2608: regs.n = ((BYTE)(val)) < 0; ! 2609: regs.x = regs.c = carry!=0; ! 2610: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2611: }}}}}} ! 2612: void op_e618(UWORD opcode) ! 2613: { ! 2614: ULONG srcreg = 3; ! 2615: ULONG dstreg = (opcode & 7) >> 0; ! 2616: {{ ULONG cnt = srcreg; ! 2617: { BYTE data = regs.d[dstreg]; ! 2618: { UBYTE val = data; ! 2619: cnt &= 63; ! 2620: { int carry = 0; ! 2621: ULONG cmask = 0x80; ! 2622: for(;cnt;--cnt){ ! 2623: carry=val&1; val = (ULONG)val >> 1; ! 2624: if(carry) val |= cmask; ! 2625: } ! 2626: regs.v = regs.c = 0; ! 2627: regs.z = ((BYTE)(val)) == 0; ! 2628: regs.n = ((BYTE)(val)) < 0; ! 2629: regs.c = carry!=0; ! 2630: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2631: }}}}}} ! 2632: void op_e640(UWORD opcode) ! 2633: { ! 2634: ULONG srcreg = 3; ! 2635: ULONG dstreg = (opcode & 7) >> 0; ! 2636: {{ ULONG cnt = srcreg; ! 2637: { WORD data = regs.d[dstreg]; ! 2638: { UWORD val = data; ! 2639: cnt &= 63; ! 2640: regs.v = 0; ! 2641: { ULONG cmask = 0x8000; ! 2642: ULONG sign = cmask & val; ! 2643: for(;cnt;--cnt){ ! 2644: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 2645: } ! 2646: regs.n = sign != 0; ! 2647: regs.z = val == 0; ! 2648: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 2649: }}}}}} ! 2650: void op_e648(UWORD opcode) ! 2651: { ! 2652: ULONG srcreg = 3; ! 2653: ULONG dstreg = (opcode & 7) >> 0; ! 2654: {{ ULONG cnt = srcreg; ! 2655: { WORD data = regs.d[dstreg]; ! 2656: { UWORD val = data; ! 2657: cnt &= 63; ! 2658: { int carry = 0; ! 2659: for(;cnt;--cnt){ ! 2660: carry=val&1; val >>= 1; ! 2661: } ! 2662: regs.v = regs.c = 0; ! 2663: regs.z = ((WORD)(val)) == 0; ! 2664: regs.n = ((WORD)(val)) < 0; ! 2665: regs.c = regs.x = carry!=0; ! 2666: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 2667: }}}}}} ! 2668: void op_e650(UWORD opcode) ! 2669: { ! 2670: ULONG srcreg = 3; ! 2671: ULONG dstreg = (opcode & 7) >> 0; ! 2672: {{ ULONG cnt = srcreg; ! 2673: { WORD data = regs.d[dstreg]; ! 2674: { UWORD val = data; ! 2675: cnt &= 63; ! 2676: { int carry = 0; ! 2677: ULONG cmask = 0x8000; ! 2678: for(;cnt;--cnt){ ! 2679: carry=val&1; val >>= 1; ! 2680: if(regs.x) val |= cmask; ! 2681: regs.x = carry != 0; ! 2682: } ! 2683: regs.v = regs.c = 0; ! 2684: regs.z = ((WORD)(val)) == 0; ! 2685: regs.n = ((WORD)(val)) < 0; ! 2686: regs.x = regs.c = carry!=0; ! 2687: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 2688: }}}}}} ! 2689: void op_e658(UWORD opcode) ! 2690: { ! 2691: ULONG srcreg = 3; ! 2692: ULONG dstreg = (opcode & 7) >> 0; ! 2693: {{ ULONG cnt = srcreg; ! 2694: { WORD data = regs.d[dstreg]; ! 2695: { UWORD val = data; ! 2696: cnt &= 63; ! 2697: { int carry = 0; ! 2698: ULONG cmask = 0x8000; ! 2699: for(;cnt;--cnt){ ! 2700: carry=val&1; val = (ULONG)val >> 1; ! 2701: if(carry) val |= cmask; ! 2702: } ! 2703: regs.v = regs.c = 0; ! 2704: regs.z = ((WORD)(val)) == 0; ! 2705: regs.n = ((WORD)(val)) < 0; ! 2706: regs.c = carry!=0; ! 2707: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 2708: }}}}}} ! 2709: void op_e680(UWORD opcode) ! 2710: { ! 2711: ULONG srcreg = 3; ! 2712: ULONG dstreg = (opcode & 7) >> 0; ! 2713: {{ ULONG cnt = srcreg; ! 2714: { LONG data = regs.d[dstreg]; ! 2715: { ULONG val = data; ! 2716: cnt &= 63; ! 2717: regs.v = 0; ! 2718: { ULONG cmask = 0x80000000; ! 2719: ULONG sign = cmask & val; ! 2720: for(;cnt;--cnt){ ! 2721: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 2722: } ! 2723: regs.n = sign != 0; ! 2724: regs.z = val == 0; ! 2725: regs.d[dstreg] = (val); ! 2726: }}}}}} ! 2727: void op_e688(UWORD opcode) ! 2728: { ! 2729: ULONG srcreg = 3; ! 2730: ULONG dstreg = (opcode & 7) >> 0; ! 2731: {{ ULONG cnt = srcreg; ! 2732: { LONG data = regs.d[dstreg]; ! 2733: { ULONG val = data; ! 2734: cnt &= 63; ! 2735: { int carry = 0; ! 2736: for(;cnt;--cnt){ ! 2737: carry=val&1; val >>= 1; ! 2738: } ! 2739: regs.v = regs.c = 0; ! 2740: regs.z = ((LONG)(val)) == 0; ! 2741: regs.n = ((LONG)(val)) < 0; ! 2742: regs.c = regs.x = carry!=0; ! 2743: regs.d[dstreg] = (val); ! 2744: }}}}}} ! 2745: void op_e690(UWORD opcode) ! 2746: { ! 2747: ULONG srcreg = 3; ! 2748: ULONG dstreg = (opcode & 7) >> 0; ! 2749: {{ ULONG cnt = srcreg; ! 2750: { LONG data = regs.d[dstreg]; ! 2751: { ULONG val = data; ! 2752: cnt &= 63; ! 2753: { int carry = 0; ! 2754: ULONG cmask = 0x80000000; ! 2755: for(;cnt;--cnt){ ! 2756: carry=val&1; val >>= 1; ! 2757: if(regs.x) val |= cmask; ! 2758: regs.x = carry != 0; ! 2759: } ! 2760: regs.v = regs.c = 0; ! 2761: regs.z = ((LONG)(val)) == 0; ! 2762: regs.n = ((LONG)(val)) < 0; ! 2763: regs.x = regs.c = carry!=0; ! 2764: regs.d[dstreg] = (val); ! 2765: }}}}}} ! 2766: void op_e698(UWORD opcode) ! 2767: { ! 2768: ULONG srcreg = 3; ! 2769: ULONG dstreg = (opcode & 7) >> 0; ! 2770: {{ ULONG cnt = srcreg; ! 2771: { LONG data = regs.d[dstreg]; ! 2772: { ULONG val = data; ! 2773: cnt &= 63; ! 2774: { int carry = 0; ! 2775: ULONG cmask = 0x80000000; ! 2776: for(;cnt;--cnt){ ! 2777: carry=val&1; val = (ULONG)val >> 1; ! 2778: if(carry) val |= cmask; ! 2779: } ! 2780: regs.v = regs.c = 0; ! 2781: regs.z = ((LONG)(val)) == 0; ! 2782: regs.n = ((LONG)(val)) < 0; ! 2783: regs.c = carry!=0; ! 2784: regs.d[dstreg] = (val); ! 2785: }}}}}} ! 2786: void op_e6d0(UWORD opcode) ! 2787: { ! 2788: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2789: {{ CPTR dataa = regs.a[srcreg]; ! 2790: WORD data = get_word(dataa); ! 2791: { UWORD val = data; ! 2792: int carry = val&1; ! 2793: ULONG cmask = 0x8000; ! 2794: val >>= 1; ! 2795: if(carry) val |= cmask; ! 2796: regs.v = regs.c = 0; ! 2797: regs.z = ((WORD)(val)) == 0; ! 2798: regs.n = ((WORD)(val)) < 0; ! 2799: regs.c = carry!=0; ! 2800: put_word(dataa,val); ! 2801: }}}} ! 2802: void op_e6d8(UWORD opcode) ! 2803: { ! 2804: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2805: {{ CPTR dataa = regs.a[srcreg]; ! 2806: WORD data = get_word(dataa); ! 2807: { regs.a[srcreg] += 2; ! 2808: { UWORD val = data; ! 2809: int carry = val&1; ! 2810: ULONG cmask = 0x8000; ! 2811: val >>= 1; ! 2812: if(carry) val |= cmask; ! 2813: regs.v = regs.c = 0; ! 2814: regs.z = ((WORD)(val)) == 0; ! 2815: regs.n = ((WORD)(val)) < 0; ! 2816: regs.c = carry!=0; ! 2817: put_word(dataa,val); ! 2818: }}}}} ! 2819: void op_e6e0(UWORD opcode) ! 2820: { ! 2821: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2822: {{ regs.a[srcreg] -= 2; ! 2823: { CPTR dataa = regs.a[srcreg]; ! 2824: WORD data = get_word(dataa); ! 2825: { UWORD val = data; ! 2826: int carry = val&1; ! 2827: ULONG cmask = 0x8000; ! 2828: val >>= 1; ! 2829: if(carry) val |= cmask; ! 2830: regs.v = regs.c = 0; ! 2831: regs.z = ((WORD)(val)) == 0; ! 2832: regs.n = ((WORD)(val)) < 0; ! 2833: regs.c = carry!=0; ! 2834: put_word(dataa,val); ! 2835: }}}}} ! 2836: void op_e6e8(UWORD opcode) ! 2837: { ! 2838: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2839: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 2840: WORD data = get_word(dataa); ! 2841: { UWORD val = data; ! 2842: int carry = val&1; ! 2843: ULONG cmask = 0x8000; ! 2844: val >>= 1; ! 2845: if(carry) val |= cmask; ! 2846: regs.v = regs.c = 0; ! 2847: regs.z = ((WORD)(val)) == 0; ! 2848: regs.n = ((WORD)(val)) < 0; ! 2849: regs.c = carry!=0; ! 2850: put_word(dataa,val); ! 2851: }}}} ! 2852: void op_e6f0(UWORD opcode) ! 2853: { ! 2854: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 2855: {{ CPTR dataa = regs.a[srcreg]; ! 2856: UWORD datadp = nextiword(); ! 2857: dataa += (LONG)(BYTE)(datadp & 0xFF); ! 2858: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12]; ! 2859: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr; ! 2860: dataa += datadpr; ! 2861: { WORD data = get_word(dataa); ! 2862: { UWORD val = data; ! 2863: int carry = val&1; ! 2864: ULONG cmask = 0x8000; ! 2865: val >>= 1; ! 2866: if(carry) val |= cmask; ! 2867: regs.v = regs.c = 0; ! 2868: regs.z = ((WORD)(val)) == 0; ! 2869: regs.n = ((WORD)(val)) < 0; ! 2870: regs.c = carry!=0; ! 2871: put_word(dataa,val); ! 2872: }}}}}} ! 2873: void op_e6f8(UWORD opcode) ! 2874: { ! 2875: {{ CPTR dataa = (LONG)(WORD)nextiword(); ! 2876: WORD data = get_word(dataa); ! 2877: { UWORD val = data; ! 2878: int carry = val&1; ! 2879: ULONG cmask = 0x8000; ! 2880: val >>= 1; ! 2881: if(carry) val |= cmask; ! 2882: regs.v = regs.c = 0; ! 2883: regs.z = ((WORD)(val)) == 0; ! 2884: regs.n = ((WORD)(val)) < 0; ! 2885: regs.c = carry!=0; ! 2886: put_word(dataa,val); ! 2887: }}}} ! 2888: void op_e6f9(UWORD opcode) ! 2889: { ! 2890: {{ CPTR dataa = nextilong(); ! 2891: WORD data = get_word(dataa); ! 2892: { UWORD val = data; ! 2893: int carry = val&1; ! 2894: ULONG cmask = 0x8000; ! 2895: val >>= 1; ! 2896: if(carry) val |= cmask; ! 2897: regs.v = regs.c = 0; ! 2898: regs.z = ((WORD)(val)) == 0; ! 2899: regs.n = ((WORD)(val)) < 0; ! 2900: regs.c = carry!=0; ! 2901: put_word(dataa,val); ! 2902: }}}} ! 2903: void op_e700(UWORD opcode) ! 2904: { ! 2905: ULONG srcreg = 3; ! 2906: ULONG dstreg = (opcode & 7) >> 0; ! 2907: {{ ULONG cnt = srcreg; ! 2908: { BYTE data = regs.d[dstreg]; ! 2909: { UBYTE val = data; ! 2910: cnt &= 63; ! 2911: regs.v = 0; ! 2912: { ULONG cmask = 0x80; ! 2913: ULONG sign = cmask & val; ! 2914: for(;cnt;--cnt){ ! 2915: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 2916: if ((val&cmask)!=sign)regs.v=1; ! 2917: } ! 2918: regs.n = (val&cmask) != 0; ! 2919: regs.z = val == 0; ! 2920: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2921: }}}}}} ! 2922: void op_e708(UWORD opcode) ! 2923: { ! 2924: ULONG srcreg = 3; ! 2925: ULONG dstreg = (opcode & 7) >> 0; ! 2926: {{ ULONG cnt = srcreg; ! 2927: { BYTE data = regs.d[dstreg]; ! 2928: { UBYTE val = data; ! 2929: cnt &= 63; ! 2930: { int carry = 0; ! 2931: ULONG cmask = 0x80; ! 2932: for(;cnt;--cnt){ ! 2933: carry=val&cmask; val <<= 1; ! 2934: } ! 2935: regs.v = regs.c = 0; ! 2936: regs.z = ((BYTE)(val)) == 0; ! 2937: regs.n = ((BYTE)(val)) < 0; ! 2938: regs.c = regs.x = carry!=0; ! 2939: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2940: }}}}}} ! 2941: void op_e710(UWORD opcode) ! 2942: { ! 2943: ULONG srcreg = 3; ! 2944: ULONG dstreg = (opcode & 7) >> 0; ! 2945: {{ ULONG cnt = srcreg; ! 2946: { BYTE data = regs.d[dstreg]; ! 2947: { UBYTE val = data; ! 2948: cnt &= 63; ! 2949: { int carry = 0; ! 2950: ULONG cmask = 0x80; ! 2951: for(;cnt;--cnt){ ! 2952: carry=val&cmask; val <<= 1; ! 2953: if(regs.x) val |= 1; ! 2954: regs.x = carry != 0; ! 2955: } ! 2956: regs.v = regs.c = 0; ! 2957: regs.z = ((BYTE)(val)) == 0; ! 2958: regs.n = ((BYTE)(val)) < 0; ! 2959: regs.x = regs.c = carry!=0; ! 2960: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2961: }}}}}} ! 2962: void op_e718(UWORD opcode) ! 2963: { ! 2964: ULONG srcreg = 3; ! 2965: ULONG dstreg = (opcode & 7) >> 0; ! 2966: {{ ULONG cnt = srcreg; ! 2967: { BYTE data = regs.d[dstreg]; ! 2968: { UBYTE val = data; ! 2969: cnt &= 63; ! 2970: { int carry = 0; ! 2971: ULONG cmask = 0x80; ! 2972: for(;cnt;--cnt){ ! 2973: carry=val&cmask; val <<= 1; ! 2974: if(carry) val |= 1; ! 2975: } ! 2976: regs.v = regs.c = 0; ! 2977: regs.z = ((BYTE)(val)) == 0; ! 2978: regs.n = ((BYTE)(val)) < 0; ! 2979: regs.c = carry!=0; ! 2980: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 2981: }}}}}} ! 2982: void op_e740(UWORD opcode) ! 2983: { ! 2984: ULONG srcreg = 3; ! 2985: ULONG dstreg = (opcode & 7) >> 0; ! 2986: {{ ULONG cnt = srcreg; ! 2987: { WORD data = regs.d[dstreg]; ! 2988: { UWORD val = data; ! 2989: cnt &= 63; ! 2990: regs.v = 0; ! 2991: { ULONG cmask = 0x8000; ! 2992: ULONG sign = cmask & val; ! 2993: for(;cnt;--cnt){ ! 2994: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 2995: if ((val&cmask)!=sign)regs.v=1; ! 2996: } ! 2997: regs.n = (val&cmask) != 0; ! 2998: regs.z = val == 0; ! 2999: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3000: }}}}}} ! 3001: void op_e748(UWORD opcode) ! 3002: { ! 3003: ULONG srcreg = 3; ! 3004: ULONG dstreg = (opcode & 7) >> 0; ! 3005: {{ ULONG cnt = srcreg; ! 3006: { WORD data = regs.d[dstreg]; ! 3007: { UWORD val = data; ! 3008: cnt &= 63; ! 3009: { int carry = 0; ! 3010: ULONG cmask = 0x8000; ! 3011: for(;cnt;--cnt){ ! 3012: carry=val&cmask; val <<= 1; ! 3013: } ! 3014: regs.v = regs.c = 0; ! 3015: regs.z = ((WORD)(val)) == 0; ! 3016: regs.n = ((WORD)(val)) < 0; ! 3017: regs.c = regs.x = carry!=0; ! 3018: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3019: }}}}}} ! 3020: void op_e750(UWORD opcode) ! 3021: { ! 3022: ULONG srcreg = 3; ! 3023: ULONG dstreg = (opcode & 7) >> 0; ! 3024: {{ ULONG cnt = srcreg; ! 3025: { WORD data = regs.d[dstreg]; ! 3026: { UWORD val = data; ! 3027: cnt &= 63; ! 3028: { int carry = 0; ! 3029: ULONG cmask = 0x8000; ! 3030: for(;cnt;--cnt){ ! 3031: carry=val&cmask; val <<= 1; ! 3032: if(regs.x) val |= 1; ! 3033: regs.x = carry != 0; ! 3034: } ! 3035: regs.v = regs.c = 0; ! 3036: regs.z = ((WORD)(val)) == 0; ! 3037: regs.n = ((WORD)(val)) < 0; ! 3038: regs.x = regs.c = carry!=0; ! 3039: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3040: }}}}}} ! 3041: void op_e758(UWORD opcode) ! 3042: { ! 3043: ULONG srcreg = 3; ! 3044: ULONG dstreg = (opcode & 7) >> 0; ! 3045: {{ ULONG cnt = srcreg; ! 3046: { WORD data = regs.d[dstreg]; ! 3047: { UWORD val = data; ! 3048: cnt &= 63; ! 3049: { int carry = 0; ! 3050: ULONG cmask = 0x8000; ! 3051: for(;cnt;--cnt){ ! 3052: carry=val&cmask; val <<= 1; ! 3053: if(carry) val |= 1; ! 3054: } ! 3055: regs.v = regs.c = 0; ! 3056: regs.z = ((WORD)(val)) == 0; ! 3057: regs.n = ((WORD)(val)) < 0; ! 3058: regs.c = carry!=0; ! 3059: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3060: }}}}}} ! 3061: void op_e780(UWORD opcode) ! 3062: { ! 3063: ULONG srcreg = 3; ! 3064: ULONG dstreg = (opcode & 7) >> 0; ! 3065: {{ ULONG cnt = srcreg; ! 3066: { LONG data = regs.d[dstreg]; ! 3067: { ULONG val = data; ! 3068: cnt &= 63; ! 3069: regs.v = 0; ! 3070: { ULONG cmask = 0x80000000; ! 3071: ULONG sign = cmask & val; ! 3072: for(;cnt;--cnt){ ! 3073: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 3074: if ((val&cmask)!=sign)regs.v=1; ! 3075: } ! 3076: regs.n = (val&cmask) != 0; ! 3077: regs.z = val == 0; ! 3078: regs.d[dstreg] = (val); ! 3079: }}}}}} ! 3080: void op_e788(UWORD opcode) ! 3081: { ! 3082: ULONG srcreg = 3; ! 3083: ULONG dstreg = (opcode & 7) >> 0; ! 3084: {{ ULONG cnt = srcreg; ! 3085: { LONG data = regs.d[dstreg]; ! 3086: { ULONG val = data; ! 3087: cnt &= 63; ! 3088: { int carry = 0; ! 3089: ULONG cmask = 0x80000000; ! 3090: for(;cnt;--cnt){ ! 3091: carry=val&cmask; val <<= 1; ! 3092: } ! 3093: regs.v = regs.c = 0; ! 3094: regs.z = ((LONG)(val)) == 0; ! 3095: regs.n = ((LONG)(val)) < 0; ! 3096: regs.c = regs.x = carry!=0; ! 3097: regs.d[dstreg] = (val); ! 3098: }}}}}} ! 3099: void op_e790(UWORD opcode) ! 3100: { ! 3101: ULONG srcreg = 3; ! 3102: ULONG dstreg = (opcode & 7) >> 0; ! 3103: {{ ULONG cnt = srcreg; ! 3104: { LONG data = regs.d[dstreg]; ! 3105: { ULONG val = data; ! 3106: cnt &= 63; ! 3107: { int carry = 0; ! 3108: ULONG cmask = 0x80000000; ! 3109: for(;cnt;--cnt){ ! 3110: carry=val&cmask; val <<= 1; ! 3111: if(regs.x) val |= 1; ! 3112: regs.x = carry != 0; ! 3113: } ! 3114: regs.v = regs.c = 0; ! 3115: regs.z = ((LONG)(val)) == 0; ! 3116: regs.n = ((LONG)(val)) < 0; ! 3117: regs.x = regs.c = carry!=0; ! 3118: regs.d[dstreg] = (val); ! 3119: }}}}}} ! 3120: void op_e798(UWORD opcode) ! 3121: { ! 3122: ULONG srcreg = 3; ! 3123: ULONG dstreg = (opcode & 7) >> 0; ! 3124: {{ ULONG cnt = srcreg; ! 3125: { LONG data = regs.d[dstreg]; ! 3126: { ULONG val = data; ! 3127: cnt &= 63; ! 3128: { int carry = 0; ! 3129: ULONG cmask = 0x80000000; ! 3130: for(;cnt;--cnt){ ! 3131: carry=val&cmask; val <<= 1; ! 3132: if(carry) val |= 1; ! 3133: } ! 3134: regs.v = regs.c = 0; ! 3135: regs.z = ((LONG)(val)) == 0; ! 3136: regs.n = ((LONG)(val)) < 0; ! 3137: regs.c = carry!=0; ! 3138: regs.d[dstreg] = (val); ! 3139: }}}}}} ! 3140: void op_e7d0(UWORD opcode) ! 3141: { ! 3142: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3143: {{ CPTR dataa = regs.a[srcreg]; ! 3144: WORD data = get_word(dataa); ! 3145: { UWORD val = data; ! 3146: ULONG cmask = 0x8000; ! 3147: int carry = val&cmask; ! 3148: val <<= 1; ! 3149: if(carry) val |= 1; ! 3150: regs.v = regs.c = 0; ! 3151: regs.z = ((WORD)(val)) == 0; ! 3152: regs.n = ((WORD)(val)) < 0; ! 3153: regs.c = carry!=0; ! 3154: put_word(dataa,val); ! 3155: }}}} ! 3156: void op_e7d8(UWORD opcode) ! 3157: { ! 3158: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3159: {{ CPTR dataa = regs.a[srcreg]; ! 3160: WORD data = get_word(dataa); ! 3161: { regs.a[srcreg] += 2; ! 3162: { UWORD val = data; ! 3163: ULONG cmask = 0x8000; ! 3164: int carry = val&cmask; ! 3165: val <<= 1; ! 3166: if(carry) val |= 1; ! 3167: regs.v = regs.c = 0; ! 3168: regs.z = ((WORD)(val)) == 0; ! 3169: regs.n = ((WORD)(val)) < 0; ! 3170: regs.c = carry!=0; ! 3171: put_word(dataa,val); ! 3172: }}}}} ! 3173: void op_e7e0(UWORD opcode) ! 3174: { ! 3175: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3176: {{ regs.a[srcreg] -= 2; ! 3177: { CPTR dataa = regs.a[srcreg]; ! 3178: WORD data = get_word(dataa); ! 3179: { UWORD val = data; ! 3180: ULONG cmask = 0x8000; ! 3181: int carry = val&cmask; ! 3182: val <<= 1; ! 3183: if(carry) val |= 1; ! 3184: regs.v = regs.c = 0; ! 3185: regs.z = ((WORD)(val)) == 0; ! 3186: regs.n = ((WORD)(val)) < 0; ! 3187: regs.c = carry!=0; ! 3188: put_word(dataa,val); ! 3189: }}}}} ! 3190: void op_e7e8(UWORD opcode) ! 3191: { ! 3192: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3193: {{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword(); ! 3194: WORD data = get_word(dataa); ! 3195: { UWORD val = data; ! 3196: ULONG cmask = 0x8000; ! 3197: int carry = val&cmask; ! 3198: val <<= 1; ! 3199: if(carry) val |= 1; ! 3200: regs.v = regs.c = 0; ! 3201: regs.z = ((WORD)(val)) == 0; ! 3202: regs.n = ((WORD)(val)) < 0; ! 3203: regs.c = carry!=0; ! 3204: put_word(dataa,val); ! 3205: }}}} ! 3206: void op_e7f0(UWORD opcode) ! 3207: { ! 3208: ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0); ! 3209: {{ CPTR dataa = regs.a[srcreg]; ! 3210: UWORD datadp = nextiword(); ! 3211: dataa += (LONG)(BYTE)(datadp & 0xFF); ! 3212: { ULONG datadpr = datadp & 0x8000 ? regs.a[(datadp & 0x7000) >> 12] : regs.d[(datadp & 0x7000) >> 12]; ! 3213: if (!(datadp & 0x800)) datadpr = (LONG)(WORD)datadpr; ! 3214: dataa += datadpr; ! 3215: { WORD data = get_word(dataa); ! 3216: { UWORD val = data; ! 3217: ULONG cmask = 0x8000; ! 3218: int carry = val&cmask; ! 3219: val <<= 1; ! 3220: if(carry) val |= 1; ! 3221: regs.v = regs.c = 0; ! 3222: regs.z = ((WORD)(val)) == 0; ! 3223: regs.n = ((WORD)(val)) < 0; ! 3224: regs.c = carry!=0; ! 3225: put_word(dataa,val); ! 3226: }}}}}} ! 3227: void op_e7f8(UWORD opcode) ! 3228: { ! 3229: {{ CPTR dataa = (LONG)(WORD)nextiword(); ! 3230: WORD data = get_word(dataa); ! 3231: { UWORD val = data; ! 3232: ULONG cmask = 0x8000; ! 3233: int carry = val&cmask; ! 3234: val <<= 1; ! 3235: if(carry) val |= 1; ! 3236: regs.v = regs.c = 0; ! 3237: regs.z = ((WORD)(val)) == 0; ! 3238: regs.n = ((WORD)(val)) < 0; ! 3239: regs.c = carry!=0; ! 3240: put_word(dataa,val); ! 3241: }}}} ! 3242: void op_e7f9(UWORD opcode) ! 3243: { ! 3244: {{ CPTR dataa = nextilong(); ! 3245: WORD data = get_word(dataa); ! 3246: { UWORD val = data; ! 3247: ULONG cmask = 0x8000; ! 3248: int carry = val&cmask; ! 3249: val <<= 1; ! 3250: if(carry) val |= 1; ! 3251: regs.v = regs.c = 0; ! 3252: regs.z = ((WORD)(val)) == 0; ! 3253: regs.n = ((WORD)(val)) < 0; ! 3254: regs.c = carry!=0; ! 3255: put_word(dataa,val); ! 3256: }}}} ! 3257: void op_e800(UWORD opcode) ! 3258: { ! 3259: ULONG srcreg = 4; ! 3260: ULONG dstreg = (opcode & 7) >> 0; ! 3261: {{ ULONG cnt = srcreg; ! 3262: { BYTE data = regs.d[dstreg]; ! 3263: { UBYTE val = data; ! 3264: cnt &= 63; ! 3265: regs.v = 0; ! 3266: { ULONG cmask = 0x80; ! 3267: ULONG sign = cmask & val; ! 3268: for(;cnt;--cnt){ ! 3269: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 3270: } ! 3271: regs.n = sign != 0; ! 3272: regs.z = val == 0; ! 3273: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3274: }}}}}} ! 3275: void op_e808(UWORD opcode) ! 3276: { ! 3277: ULONG srcreg = 4; ! 3278: ULONG dstreg = (opcode & 7) >> 0; ! 3279: {{ ULONG cnt = srcreg; ! 3280: { BYTE data = regs.d[dstreg]; ! 3281: { UBYTE val = data; ! 3282: cnt &= 63; ! 3283: { int carry = 0; ! 3284: for(;cnt;--cnt){ ! 3285: carry=val&1; val >>= 1; ! 3286: } ! 3287: regs.v = regs.c = 0; ! 3288: regs.z = ((BYTE)(val)) == 0; ! 3289: regs.n = ((BYTE)(val)) < 0; ! 3290: regs.c = regs.x = carry!=0; ! 3291: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3292: }}}}}} ! 3293: void op_e810(UWORD opcode) ! 3294: { ! 3295: ULONG srcreg = 4; ! 3296: ULONG dstreg = (opcode & 7) >> 0; ! 3297: {{ ULONG cnt = srcreg; ! 3298: { BYTE data = regs.d[dstreg]; ! 3299: { UBYTE val = data; ! 3300: cnt &= 63; ! 3301: { int carry = 0; ! 3302: ULONG cmask = 0x80; ! 3303: for(;cnt;--cnt){ ! 3304: carry=val&1; val >>= 1; ! 3305: if(regs.x) val |= cmask; ! 3306: regs.x = carry != 0; ! 3307: } ! 3308: regs.v = regs.c = 0; ! 3309: regs.z = ((BYTE)(val)) == 0; ! 3310: regs.n = ((BYTE)(val)) < 0; ! 3311: regs.x = regs.c = carry!=0; ! 3312: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3313: }}}}}} ! 3314: void op_e818(UWORD opcode) ! 3315: { ! 3316: ULONG srcreg = 4; ! 3317: ULONG dstreg = (opcode & 7) >> 0; ! 3318: {{ ULONG cnt = srcreg; ! 3319: { BYTE data = regs.d[dstreg]; ! 3320: { UBYTE val = data; ! 3321: cnt &= 63; ! 3322: { int carry = 0; ! 3323: ULONG cmask = 0x80; ! 3324: for(;cnt;--cnt){ ! 3325: carry=val&1; val = (ULONG)val >> 1; ! 3326: if(carry) val |= cmask; ! 3327: } ! 3328: regs.v = regs.c = 0; ! 3329: regs.z = ((BYTE)(val)) == 0; ! 3330: regs.n = ((BYTE)(val)) < 0; ! 3331: regs.c = carry!=0; ! 3332: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3333: }}}}}} ! 3334: void op_e840(UWORD opcode) ! 3335: { ! 3336: ULONG srcreg = 4; ! 3337: ULONG dstreg = (opcode & 7) >> 0; ! 3338: {{ ULONG cnt = srcreg; ! 3339: { WORD data = regs.d[dstreg]; ! 3340: { UWORD val = data; ! 3341: cnt &= 63; ! 3342: regs.v = 0; ! 3343: { ULONG cmask = 0x8000; ! 3344: ULONG sign = cmask & val; ! 3345: for(;cnt;--cnt){ ! 3346: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 3347: } ! 3348: regs.n = sign != 0; ! 3349: regs.z = val == 0; ! 3350: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3351: }}}}}} ! 3352: void op_e848(UWORD opcode) ! 3353: { ! 3354: ULONG srcreg = 4; ! 3355: ULONG dstreg = (opcode & 7) >> 0; ! 3356: {{ ULONG cnt = srcreg; ! 3357: { WORD data = regs.d[dstreg]; ! 3358: { UWORD val = data; ! 3359: cnt &= 63; ! 3360: { int carry = 0; ! 3361: for(;cnt;--cnt){ ! 3362: carry=val&1; val >>= 1; ! 3363: } ! 3364: regs.v = regs.c = 0; ! 3365: regs.z = ((WORD)(val)) == 0; ! 3366: regs.n = ((WORD)(val)) < 0; ! 3367: regs.c = regs.x = carry!=0; ! 3368: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3369: }}}}}} ! 3370: void op_e850(UWORD opcode) ! 3371: { ! 3372: ULONG srcreg = 4; ! 3373: ULONG dstreg = (opcode & 7) >> 0; ! 3374: {{ ULONG cnt = srcreg; ! 3375: { WORD data = regs.d[dstreg]; ! 3376: { UWORD val = data; ! 3377: cnt &= 63; ! 3378: { int carry = 0; ! 3379: ULONG cmask = 0x8000; ! 3380: for(;cnt;--cnt){ ! 3381: carry=val&1; val >>= 1; ! 3382: if(regs.x) val |= cmask; ! 3383: regs.x = carry != 0; ! 3384: } ! 3385: regs.v = regs.c = 0; ! 3386: regs.z = ((WORD)(val)) == 0; ! 3387: regs.n = ((WORD)(val)) < 0; ! 3388: regs.x = regs.c = carry!=0; ! 3389: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3390: }}}}}} ! 3391: void op_e858(UWORD opcode) ! 3392: { ! 3393: ULONG srcreg = 4; ! 3394: ULONG dstreg = (opcode & 7) >> 0; ! 3395: {{ ULONG cnt = srcreg; ! 3396: { WORD data = regs.d[dstreg]; ! 3397: { UWORD val = data; ! 3398: cnt &= 63; ! 3399: { int carry = 0; ! 3400: ULONG cmask = 0x8000; ! 3401: for(;cnt;--cnt){ ! 3402: carry=val&1; val = (ULONG)val >> 1; ! 3403: if(carry) val |= cmask; ! 3404: } ! 3405: regs.v = regs.c = 0; ! 3406: regs.z = ((WORD)(val)) == 0; ! 3407: regs.n = ((WORD)(val)) < 0; ! 3408: regs.c = carry!=0; ! 3409: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3410: }}}}}} ! 3411: void op_e880(UWORD opcode) ! 3412: { ! 3413: ULONG srcreg = 4; ! 3414: ULONG dstreg = (opcode & 7) >> 0; ! 3415: {{ ULONG cnt = srcreg; ! 3416: { LONG data = regs.d[dstreg]; ! 3417: { ULONG val = data; ! 3418: cnt &= 63; ! 3419: regs.v = 0; ! 3420: { ULONG cmask = 0x80000000; ! 3421: ULONG sign = cmask & val; ! 3422: for(;cnt;--cnt){ ! 3423: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 3424: } ! 3425: regs.n = sign != 0; ! 3426: regs.z = val == 0; ! 3427: regs.d[dstreg] = (val); ! 3428: }}}}}} ! 3429: void op_e888(UWORD opcode) ! 3430: { ! 3431: ULONG srcreg = 4; ! 3432: ULONG dstreg = (opcode & 7) >> 0; ! 3433: {{ ULONG cnt = srcreg; ! 3434: { LONG data = regs.d[dstreg]; ! 3435: { ULONG val = data; ! 3436: cnt &= 63; ! 3437: { int carry = 0; ! 3438: for(;cnt;--cnt){ ! 3439: carry=val&1; val >>= 1; ! 3440: } ! 3441: regs.v = regs.c = 0; ! 3442: regs.z = ((LONG)(val)) == 0; ! 3443: regs.n = ((LONG)(val)) < 0; ! 3444: regs.c = regs.x = carry!=0; ! 3445: regs.d[dstreg] = (val); ! 3446: }}}}}} ! 3447: void op_e890(UWORD opcode) ! 3448: { ! 3449: ULONG srcreg = 4; ! 3450: ULONG dstreg = (opcode & 7) >> 0; ! 3451: {{ ULONG cnt = srcreg; ! 3452: { LONG data = regs.d[dstreg]; ! 3453: { ULONG val = data; ! 3454: cnt &= 63; ! 3455: { int carry = 0; ! 3456: ULONG cmask = 0x80000000; ! 3457: for(;cnt;--cnt){ ! 3458: carry=val&1; val >>= 1; ! 3459: if(regs.x) val |= cmask; ! 3460: regs.x = carry != 0; ! 3461: } ! 3462: regs.v = regs.c = 0; ! 3463: regs.z = ((LONG)(val)) == 0; ! 3464: regs.n = ((LONG)(val)) < 0; ! 3465: regs.x = regs.c = carry!=0; ! 3466: regs.d[dstreg] = (val); ! 3467: }}}}}} ! 3468: void op_e898(UWORD opcode) ! 3469: { ! 3470: ULONG srcreg = 4; ! 3471: ULONG dstreg = (opcode & 7) >> 0; ! 3472: {{ ULONG cnt = srcreg; ! 3473: { LONG data = regs.d[dstreg]; ! 3474: { ULONG val = data; ! 3475: cnt &= 63; ! 3476: { int carry = 0; ! 3477: ULONG cmask = 0x80000000; ! 3478: for(;cnt;--cnt){ ! 3479: carry=val&1; val = (ULONG)val >> 1; ! 3480: if(carry) val |= cmask; ! 3481: } ! 3482: regs.v = regs.c = 0; ! 3483: regs.z = ((LONG)(val)) == 0; ! 3484: regs.n = ((LONG)(val)) < 0; ! 3485: regs.c = carry!=0; ! 3486: regs.d[dstreg] = (val); ! 3487: }}}}}} ! 3488: void op_e900(UWORD opcode) ! 3489: { ! 3490: ULONG srcreg = 4; ! 3491: ULONG dstreg = (opcode & 7) >> 0; ! 3492: {{ ULONG cnt = srcreg; ! 3493: { BYTE data = regs.d[dstreg]; ! 3494: { UBYTE val = data; ! 3495: cnt &= 63; ! 3496: regs.v = 0; ! 3497: { ULONG cmask = 0x80; ! 3498: ULONG sign = cmask & val; ! 3499: for(;cnt;--cnt){ ! 3500: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 3501: if ((val&cmask)!=sign)regs.v=1; ! 3502: } ! 3503: regs.n = (val&cmask) != 0; ! 3504: regs.z = val == 0; ! 3505: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3506: }}}}}} ! 3507: void op_e908(UWORD opcode) ! 3508: { ! 3509: ULONG srcreg = 4; ! 3510: ULONG dstreg = (opcode & 7) >> 0; ! 3511: {{ ULONG cnt = srcreg; ! 3512: { BYTE data = regs.d[dstreg]; ! 3513: { UBYTE val = data; ! 3514: cnt &= 63; ! 3515: { int carry = 0; ! 3516: ULONG cmask = 0x80; ! 3517: for(;cnt;--cnt){ ! 3518: carry=val&cmask; val <<= 1; ! 3519: } ! 3520: regs.v = regs.c = 0; ! 3521: regs.z = ((BYTE)(val)) == 0; ! 3522: regs.n = ((BYTE)(val)) < 0; ! 3523: regs.c = regs.x = carry!=0; ! 3524: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3525: }}}}}} ! 3526: void op_e910(UWORD opcode) ! 3527: { ! 3528: ULONG srcreg = 4; ! 3529: ULONG dstreg = (opcode & 7) >> 0; ! 3530: {{ ULONG cnt = srcreg; ! 3531: { BYTE data = regs.d[dstreg]; ! 3532: { UBYTE val = data; ! 3533: cnt &= 63; ! 3534: { int carry = 0; ! 3535: ULONG cmask = 0x80; ! 3536: for(;cnt;--cnt){ ! 3537: carry=val&cmask; val <<= 1; ! 3538: if(regs.x) val |= 1; ! 3539: regs.x = carry != 0; ! 3540: } ! 3541: regs.v = regs.c = 0; ! 3542: regs.z = ((BYTE)(val)) == 0; ! 3543: regs.n = ((BYTE)(val)) < 0; ! 3544: regs.x = regs.c = carry!=0; ! 3545: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3546: }}}}}} ! 3547: void op_e918(UWORD opcode) ! 3548: { ! 3549: ULONG srcreg = 4; ! 3550: ULONG dstreg = (opcode & 7) >> 0; ! 3551: {{ ULONG cnt = srcreg; ! 3552: { BYTE data = regs.d[dstreg]; ! 3553: { UBYTE val = data; ! 3554: cnt &= 63; ! 3555: { int carry = 0; ! 3556: ULONG cmask = 0x80; ! 3557: for(;cnt;--cnt){ ! 3558: carry=val&cmask; val <<= 1; ! 3559: if(carry) val |= 1; ! 3560: } ! 3561: regs.v = regs.c = 0; ! 3562: regs.z = ((BYTE)(val)) == 0; ! 3563: regs.n = ((BYTE)(val)) < 0; ! 3564: regs.c = carry!=0; ! 3565: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3566: }}}}}} ! 3567: void op_e940(UWORD opcode) ! 3568: { ! 3569: ULONG srcreg = 4; ! 3570: ULONG dstreg = (opcode & 7) >> 0; ! 3571: {{ ULONG cnt = srcreg; ! 3572: { WORD data = regs.d[dstreg]; ! 3573: { UWORD val = data; ! 3574: cnt &= 63; ! 3575: regs.v = 0; ! 3576: { ULONG cmask = 0x8000; ! 3577: ULONG sign = cmask & val; ! 3578: for(;cnt;--cnt){ ! 3579: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 3580: if ((val&cmask)!=sign)regs.v=1; ! 3581: } ! 3582: regs.n = (val&cmask) != 0; ! 3583: regs.z = val == 0; ! 3584: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3585: }}}}}} ! 3586: void op_e948(UWORD opcode) ! 3587: { ! 3588: ULONG srcreg = 4; ! 3589: ULONG dstreg = (opcode & 7) >> 0; ! 3590: {{ ULONG cnt = srcreg; ! 3591: { WORD data = regs.d[dstreg]; ! 3592: { UWORD val = data; ! 3593: cnt &= 63; ! 3594: { int carry = 0; ! 3595: ULONG cmask = 0x8000; ! 3596: for(;cnt;--cnt){ ! 3597: carry=val&cmask; val <<= 1; ! 3598: } ! 3599: regs.v = regs.c = 0; ! 3600: regs.z = ((WORD)(val)) == 0; ! 3601: regs.n = ((WORD)(val)) < 0; ! 3602: regs.c = regs.x = carry!=0; ! 3603: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3604: }}}}}} ! 3605: void op_e950(UWORD opcode) ! 3606: { ! 3607: ULONG srcreg = 4; ! 3608: ULONG dstreg = (opcode & 7) >> 0; ! 3609: {{ ULONG cnt = srcreg; ! 3610: { WORD data = regs.d[dstreg]; ! 3611: { UWORD val = data; ! 3612: cnt &= 63; ! 3613: { int carry = 0; ! 3614: ULONG cmask = 0x8000; ! 3615: for(;cnt;--cnt){ ! 3616: carry=val&cmask; val <<= 1; ! 3617: if(regs.x) val |= 1; ! 3618: regs.x = carry != 0; ! 3619: } ! 3620: regs.v = regs.c = 0; ! 3621: regs.z = ((WORD)(val)) == 0; ! 3622: regs.n = ((WORD)(val)) < 0; ! 3623: regs.x = regs.c = carry!=0; ! 3624: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3625: }}}}}} ! 3626: void op_e958(UWORD opcode) ! 3627: { ! 3628: ULONG srcreg = 4; ! 3629: ULONG dstreg = (opcode & 7) >> 0; ! 3630: {{ ULONG cnt = srcreg; ! 3631: { WORD data = regs.d[dstreg]; ! 3632: { UWORD val = data; ! 3633: cnt &= 63; ! 3634: { int carry = 0; ! 3635: ULONG cmask = 0x8000; ! 3636: for(;cnt;--cnt){ ! 3637: carry=val&cmask; val <<= 1; ! 3638: if(carry) val |= 1; ! 3639: } ! 3640: regs.v = regs.c = 0; ! 3641: regs.z = ((WORD)(val)) == 0; ! 3642: regs.n = ((WORD)(val)) < 0; ! 3643: regs.c = carry!=0; ! 3644: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3645: }}}}}} ! 3646: void op_e980(UWORD opcode) ! 3647: { ! 3648: ULONG srcreg = 4; ! 3649: ULONG dstreg = (opcode & 7) >> 0; ! 3650: {{ ULONG cnt = srcreg; ! 3651: { LONG data = regs.d[dstreg]; ! 3652: { ULONG val = data; ! 3653: cnt &= 63; ! 3654: regs.v = 0; ! 3655: { ULONG cmask = 0x80000000; ! 3656: ULONG sign = cmask & val; ! 3657: for(;cnt;--cnt){ ! 3658: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 3659: if ((val&cmask)!=sign)regs.v=1; ! 3660: } ! 3661: regs.n = (val&cmask) != 0; ! 3662: regs.z = val == 0; ! 3663: regs.d[dstreg] = (val); ! 3664: }}}}}} ! 3665: void op_e988(UWORD opcode) ! 3666: { ! 3667: ULONG srcreg = 4; ! 3668: ULONG dstreg = (opcode & 7) >> 0; ! 3669: {{ ULONG cnt = srcreg; ! 3670: { LONG data = regs.d[dstreg]; ! 3671: { ULONG val = data; ! 3672: cnt &= 63; ! 3673: { int carry = 0; ! 3674: ULONG cmask = 0x80000000; ! 3675: for(;cnt;--cnt){ ! 3676: carry=val&cmask; val <<= 1; ! 3677: } ! 3678: regs.v = regs.c = 0; ! 3679: regs.z = ((LONG)(val)) == 0; ! 3680: regs.n = ((LONG)(val)) < 0; ! 3681: regs.c = regs.x = carry!=0; ! 3682: regs.d[dstreg] = (val); ! 3683: }}}}}} ! 3684: void op_e990(UWORD opcode) ! 3685: { ! 3686: ULONG srcreg = 4; ! 3687: ULONG dstreg = (opcode & 7) >> 0; ! 3688: {{ ULONG cnt = srcreg; ! 3689: { LONG data = regs.d[dstreg]; ! 3690: { ULONG val = data; ! 3691: cnt &= 63; ! 3692: { int carry = 0; ! 3693: ULONG cmask = 0x80000000; ! 3694: for(;cnt;--cnt){ ! 3695: carry=val&cmask; val <<= 1; ! 3696: if(regs.x) val |= 1; ! 3697: regs.x = carry != 0; ! 3698: } ! 3699: regs.v = regs.c = 0; ! 3700: regs.z = ((LONG)(val)) == 0; ! 3701: regs.n = ((LONG)(val)) < 0; ! 3702: regs.x = regs.c = carry!=0; ! 3703: regs.d[dstreg] = (val); ! 3704: }}}}}} ! 3705: void op_e998(UWORD opcode) ! 3706: { ! 3707: ULONG srcreg = 4; ! 3708: ULONG dstreg = (opcode & 7) >> 0; ! 3709: {{ ULONG cnt = srcreg; ! 3710: { LONG data = regs.d[dstreg]; ! 3711: { ULONG val = data; ! 3712: cnt &= 63; ! 3713: { int carry = 0; ! 3714: ULONG cmask = 0x80000000; ! 3715: for(;cnt;--cnt){ ! 3716: carry=val&cmask; val <<= 1; ! 3717: if(carry) val |= 1; ! 3718: } ! 3719: regs.v = regs.c = 0; ! 3720: regs.z = ((LONG)(val)) == 0; ! 3721: regs.n = ((LONG)(val)) < 0; ! 3722: regs.c = carry!=0; ! 3723: regs.d[dstreg] = (val); ! 3724: }}}}}} ! 3725: void op_ea00(UWORD opcode) ! 3726: { ! 3727: ULONG srcreg = 5; ! 3728: ULONG dstreg = (opcode & 7) >> 0; ! 3729: {{ ULONG cnt = srcreg; ! 3730: { BYTE data = regs.d[dstreg]; ! 3731: { UBYTE val = data; ! 3732: cnt &= 63; ! 3733: regs.v = 0; ! 3734: { ULONG cmask = 0x80; ! 3735: ULONG sign = cmask & val; ! 3736: for(;cnt;--cnt){ ! 3737: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 3738: } ! 3739: regs.n = sign != 0; ! 3740: regs.z = val == 0; ! 3741: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3742: }}}}}} ! 3743: void op_ea08(UWORD opcode) ! 3744: { ! 3745: ULONG srcreg = 5; ! 3746: ULONG dstreg = (opcode & 7) >> 0; ! 3747: {{ ULONG cnt = srcreg; ! 3748: { BYTE data = regs.d[dstreg]; ! 3749: { UBYTE val = data; ! 3750: cnt &= 63; ! 3751: { int carry = 0; ! 3752: for(;cnt;--cnt){ ! 3753: carry=val&1; val >>= 1; ! 3754: } ! 3755: regs.v = regs.c = 0; ! 3756: regs.z = ((BYTE)(val)) == 0; ! 3757: regs.n = ((BYTE)(val)) < 0; ! 3758: regs.c = regs.x = carry!=0; ! 3759: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3760: }}}}}} ! 3761: void op_ea10(UWORD opcode) ! 3762: { ! 3763: ULONG srcreg = 5; ! 3764: ULONG dstreg = (opcode & 7) >> 0; ! 3765: {{ ULONG cnt = srcreg; ! 3766: { BYTE data = regs.d[dstreg]; ! 3767: { UBYTE val = data; ! 3768: cnt &= 63; ! 3769: { int carry = 0; ! 3770: ULONG cmask = 0x80; ! 3771: for(;cnt;--cnt){ ! 3772: carry=val&1; val >>= 1; ! 3773: if(regs.x) val |= cmask; ! 3774: regs.x = carry != 0; ! 3775: } ! 3776: regs.v = regs.c = 0; ! 3777: regs.z = ((BYTE)(val)) == 0; ! 3778: regs.n = ((BYTE)(val)) < 0; ! 3779: regs.x = regs.c = carry!=0; ! 3780: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3781: }}}}}} ! 3782: void op_ea18(UWORD opcode) ! 3783: { ! 3784: ULONG srcreg = 5; ! 3785: ULONG dstreg = (opcode & 7) >> 0; ! 3786: {{ ULONG cnt = srcreg; ! 3787: { BYTE data = regs.d[dstreg]; ! 3788: { UBYTE val = data; ! 3789: cnt &= 63; ! 3790: { int carry = 0; ! 3791: ULONG cmask = 0x80; ! 3792: for(;cnt;--cnt){ ! 3793: carry=val&1; val = (ULONG)val >> 1; ! 3794: if(carry) val |= cmask; ! 3795: } ! 3796: regs.v = regs.c = 0; ! 3797: regs.z = ((BYTE)(val)) == 0; ! 3798: regs.n = ((BYTE)(val)) < 0; ! 3799: regs.c = carry!=0; ! 3800: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3801: }}}}}} ! 3802: void op_ea40(UWORD opcode) ! 3803: { ! 3804: ULONG srcreg = 5; ! 3805: ULONG dstreg = (opcode & 7) >> 0; ! 3806: {{ ULONG cnt = srcreg; ! 3807: { WORD data = regs.d[dstreg]; ! 3808: { UWORD val = data; ! 3809: cnt &= 63; ! 3810: regs.v = 0; ! 3811: { ULONG cmask = 0x8000; ! 3812: ULONG sign = cmask & val; ! 3813: for(;cnt;--cnt){ ! 3814: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 3815: } ! 3816: regs.n = sign != 0; ! 3817: regs.z = val == 0; ! 3818: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3819: }}}}}} ! 3820: void op_ea48(UWORD opcode) ! 3821: { ! 3822: ULONG srcreg = 5; ! 3823: ULONG dstreg = (opcode & 7) >> 0; ! 3824: {{ ULONG cnt = srcreg; ! 3825: { WORD data = regs.d[dstreg]; ! 3826: { UWORD val = data; ! 3827: cnt &= 63; ! 3828: { int carry = 0; ! 3829: for(;cnt;--cnt){ ! 3830: carry=val&1; val >>= 1; ! 3831: } ! 3832: regs.v = regs.c = 0; ! 3833: regs.z = ((WORD)(val)) == 0; ! 3834: regs.n = ((WORD)(val)) < 0; ! 3835: regs.c = regs.x = carry!=0; ! 3836: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3837: }}}}}} ! 3838: void op_ea50(UWORD opcode) ! 3839: { ! 3840: ULONG srcreg = 5; ! 3841: ULONG dstreg = (opcode & 7) >> 0; ! 3842: {{ ULONG cnt = srcreg; ! 3843: { WORD data = regs.d[dstreg]; ! 3844: { UWORD val = data; ! 3845: cnt &= 63; ! 3846: { int carry = 0; ! 3847: ULONG cmask = 0x8000; ! 3848: for(;cnt;--cnt){ ! 3849: carry=val&1; val >>= 1; ! 3850: if(regs.x) val |= cmask; ! 3851: regs.x = carry != 0; ! 3852: } ! 3853: regs.v = regs.c = 0; ! 3854: regs.z = ((WORD)(val)) == 0; ! 3855: regs.n = ((WORD)(val)) < 0; ! 3856: regs.x = regs.c = carry!=0; ! 3857: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3858: }}}}}} ! 3859: void op_ea58(UWORD opcode) ! 3860: { ! 3861: ULONG srcreg = 5; ! 3862: ULONG dstreg = (opcode & 7) >> 0; ! 3863: {{ ULONG cnt = srcreg; ! 3864: { WORD data = regs.d[dstreg]; ! 3865: { UWORD val = data; ! 3866: cnt &= 63; ! 3867: { int carry = 0; ! 3868: ULONG cmask = 0x8000; ! 3869: for(;cnt;--cnt){ ! 3870: carry=val&1; val = (ULONG)val >> 1; ! 3871: if(carry) val |= cmask; ! 3872: } ! 3873: regs.v = regs.c = 0; ! 3874: regs.z = ((WORD)(val)) == 0; ! 3875: regs.n = ((WORD)(val)) < 0; ! 3876: regs.c = carry!=0; ! 3877: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 3878: }}}}}} ! 3879: void op_ea80(UWORD opcode) ! 3880: { ! 3881: ULONG srcreg = 5; ! 3882: ULONG dstreg = (opcode & 7) >> 0; ! 3883: {{ ULONG cnt = srcreg; ! 3884: { LONG data = regs.d[dstreg]; ! 3885: { ULONG val = data; ! 3886: cnt &= 63; ! 3887: regs.v = 0; ! 3888: { ULONG cmask = 0x80000000; ! 3889: ULONG sign = cmask & val; ! 3890: for(;cnt;--cnt){ ! 3891: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 3892: } ! 3893: regs.n = sign != 0; ! 3894: regs.z = val == 0; ! 3895: regs.d[dstreg] = (val); ! 3896: }}}}}} ! 3897: void op_ea88(UWORD opcode) ! 3898: { ! 3899: ULONG srcreg = 5; ! 3900: ULONG dstreg = (opcode & 7) >> 0; ! 3901: {{ ULONG cnt = srcreg; ! 3902: { LONG data = regs.d[dstreg]; ! 3903: { ULONG val = data; ! 3904: cnt &= 63; ! 3905: { int carry = 0; ! 3906: for(;cnt;--cnt){ ! 3907: carry=val&1; val >>= 1; ! 3908: } ! 3909: regs.v = regs.c = 0; ! 3910: regs.z = ((LONG)(val)) == 0; ! 3911: regs.n = ((LONG)(val)) < 0; ! 3912: regs.c = regs.x = carry!=0; ! 3913: regs.d[dstreg] = (val); ! 3914: }}}}}} ! 3915: void op_ea90(UWORD opcode) ! 3916: { ! 3917: ULONG srcreg = 5; ! 3918: ULONG dstreg = (opcode & 7) >> 0; ! 3919: {{ ULONG cnt = srcreg; ! 3920: { LONG data = regs.d[dstreg]; ! 3921: { ULONG val = data; ! 3922: cnt &= 63; ! 3923: { int carry = 0; ! 3924: ULONG cmask = 0x80000000; ! 3925: for(;cnt;--cnt){ ! 3926: carry=val&1; val >>= 1; ! 3927: if(regs.x) val |= cmask; ! 3928: regs.x = carry != 0; ! 3929: } ! 3930: regs.v = regs.c = 0; ! 3931: regs.z = ((LONG)(val)) == 0; ! 3932: regs.n = ((LONG)(val)) < 0; ! 3933: regs.x = regs.c = carry!=0; ! 3934: regs.d[dstreg] = (val); ! 3935: }}}}}} ! 3936: void op_ea98(UWORD opcode) ! 3937: { ! 3938: ULONG srcreg = 5; ! 3939: ULONG dstreg = (opcode & 7) >> 0; ! 3940: {{ ULONG cnt = srcreg; ! 3941: { LONG data = regs.d[dstreg]; ! 3942: { ULONG val = data; ! 3943: cnt &= 63; ! 3944: { int carry = 0; ! 3945: ULONG cmask = 0x80000000; ! 3946: for(;cnt;--cnt){ ! 3947: carry=val&1; val = (ULONG)val >> 1; ! 3948: if(carry) val |= cmask; ! 3949: } ! 3950: regs.v = regs.c = 0; ! 3951: regs.z = ((LONG)(val)) == 0; ! 3952: regs.n = ((LONG)(val)) < 0; ! 3953: regs.c = carry!=0; ! 3954: regs.d[dstreg] = (val); ! 3955: }}}}}} ! 3956: void op_eb00(UWORD opcode) ! 3957: { ! 3958: ULONG srcreg = 5; ! 3959: ULONG dstreg = (opcode & 7) >> 0; ! 3960: {{ ULONG cnt = srcreg; ! 3961: { BYTE data = regs.d[dstreg]; ! 3962: { UBYTE val = data; ! 3963: cnt &= 63; ! 3964: regs.v = 0; ! 3965: { ULONG cmask = 0x80; ! 3966: ULONG sign = cmask & val; ! 3967: for(;cnt;--cnt){ ! 3968: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 3969: if ((val&cmask)!=sign)regs.v=1; ! 3970: } ! 3971: regs.n = (val&cmask) != 0; ! 3972: regs.z = val == 0; ! 3973: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3974: }}}}}} ! 3975: void op_eb08(UWORD opcode) ! 3976: { ! 3977: ULONG srcreg = 5; ! 3978: ULONG dstreg = (opcode & 7) >> 0; ! 3979: {{ ULONG cnt = srcreg; ! 3980: { BYTE data = regs.d[dstreg]; ! 3981: { UBYTE val = data; ! 3982: cnt &= 63; ! 3983: { int carry = 0; ! 3984: ULONG cmask = 0x80; ! 3985: for(;cnt;--cnt){ ! 3986: carry=val&cmask; val <<= 1; ! 3987: } ! 3988: regs.v = regs.c = 0; ! 3989: regs.z = ((BYTE)(val)) == 0; ! 3990: regs.n = ((BYTE)(val)) < 0; ! 3991: regs.c = regs.x = carry!=0; ! 3992: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 3993: }}}}}} ! 3994: void op_eb10(UWORD opcode) ! 3995: { ! 3996: ULONG srcreg = 5; ! 3997: ULONG dstreg = (opcode & 7) >> 0; ! 3998: {{ ULONG cnt = srcreg; ! 3999: { BYTE data = regs.d[dstreg]; ! 4000: { UBYTE val = data; ! 4001: cnt &= 63; ! 4002: { int carry = 0; ! 4003: ULONG cmask = 0x80; ! 4004: for(;cnt;--cnt){ ! 4005: carry=val&cmask; val <<= 1; ! 4006: if(regs.x) val |= 1; ! 4007: regs.x = carry != 0; ! 4008: } ! 4009: regs.v = regs.c = 0; ! 4010: regs.z = ((BYTE)(val)) == 0; ! 4011: regs.n = ((BYTE)(val)) < 0; ! 4012: regs.x = regs.c = carry!=0; ! 4013: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4014: }}}}}} ! 4015: void op_eb18(UWORD opcode) ! 4016: { ! 4017: ULONG srcreg = 5; ! 4018: ULONG dstreg = (opcode & 7) >> 0; ! 4019: {{ ULONG cnt = srcreg; ! 4020: { BYTE data = regs.d[dstreg]; ! 4021: { UBYTE val = data; ! 4022: cnt &= 63; ! 4023: { int carry = 0; ! 4024: ULONG cmask = 0x80; ! 4025: for(;cnt;--cnt){ ! 4026: carry=val&cmask; val <<= 1; ! 4027: if(carry) val |= 1; ! 4028: } ! 4029: regs.v = regs.c = 0; ! 4030: regs.z = ((BYTE)(val)) == 0; ! 4031: regs.n = ((BYTE)(val)) < 0; ! 4032: regs.c = carry!=0; ! 4033: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4034: }}}}}} ! 4035: void op_eb40(UWORD opcode) ! 4036: { ! 4037: ULONG srcreg = 5; ! 4038: ULONG dstreg = (opcode & 7) >> 0; ! 4039: {{ ULONG cnt = srcreg; ! 4040: { WORD data = regs.d[dstreg]; ! 4041: { UWORD val = data; ! 4042: cnt &= 63; ! 4043: regs.v = 0; ! 4044: { ULONG cmask = 0x8000; ! 4045: ULONG sign = cmask & val; ! 4046: for(;cnt;--cnt){ ! 4047: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 4048: if ((val&cmask)!=sign)regs.v=1; ! 4049: } ! 4050: regs.n = (val&cmask) != 0; ! 4051: regs.z = val == 0; ! 4052: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4053: }}}}}} ! 4054: void op_eb48(UWORD opcode) ! 4055: { ! 4056: ULONG srcreg = 5; ! 4057: ULONG dstreg = (opcode & 7) >> 0; ! 4058: {{ ULONG cnt = srcreg; ! 4059: { WORD data = regs.d[dstreg]; ! 4060: { UWORD val = data; ! 4061: cnt &= 63; ! 4062: { int carry = 0; ! 4063: ULONG cmask = 0x8000; ! 4064: for(;cnt;--cnt){ ! 4065: carry=val&cmask; val <<= 1; ! 4066: } ! 4067: regs.v = regs.c = 0; ! 4068: regs.z = ((WORD)(val)) == 0; ! 4069: regs.n = ((WORD)(val)) < 0; ! 4070: regs.c = regs.x = carry!=0; ! 4071: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4072: }}}}}} ! 4073: void op_eb50(UWORD opcode) ! 4074: { ! 4075: ULONG srcreg = 5; ! 4076: ULONG dstreg = (opcode & 7) >> 0; ! 4077: {{ ULONG cnt = srcreg; ! 4078: { WORD data = regs.d[dstreg]; ! 4079: { UWORD val = data; ! 4080: cnt &= 63; ! 4081: { int carry = 0; ! 4082: ULONG cmask = 0x8000; ! 4083: for(;cnt;--cnt){ ! 4084: carry=val&cmask; val <<= 1; ! 4085: if(regs.x) val |= 1; ! 4086: regs.x = carry != 0; ! 4087: } ! 4088: regs.v = regs.c = 0; ! 4089: regs.z = ((WORD)(val)) == 0; ! 4090: regs.n = ((WORD)(val)) < 0; ! 4091: regs.x = regs.c = carry!=0; ! 4092: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4093: }}}}}} ! 4094: void op_eb58(UWORD opcode) ! 4095: { ! 4096: ULONG srcreg = 5; ! 4097: ULONG dstreg = (opcode & 7) >> 0; ! 4098: {{ ULONG cnt = srcreg; ! 4099: { WORD data = regs.d[dstreg]; ! 4100: { UWORD val = data; ! 4101: cnt &= 63; ! 4102: { int carry = 0; ! 4103: ULONG cmask = 0x8000; ! 4104: for(;cnt;--cnt){ ! 4105: carry=val&cmask; val <<= 1; ! 4106: if(carry) val |= 1; ! 4107: } ! 4108: regs.v = regs.c = 0; ! 4109: regs.z = ((WORD)(val)) == 0; ! 4110: regs.n = ((WORD)(val)) < 0; ! 4111: regs.c = carry!=0; ! 4112: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4113: }}}}}} ! 4114: void op_eb80(UWORD opcode) ! 4115: { ! 4116: ULONG srcreg = 5; ! 4117: ULONG dstreg = (opcode & 7) >> 0; ! 4118: {{ ULONG cnt = srcreg; ! 4119: { LONG data = regs.d[dstreg]; ! 4120: { ULONG val = data; ! 4121: cnt &= 63; ! 4122: regs.v = 0; ! 4123: { ULONG cmask = 0x80000000; ! 4124: ULONG sign = cmask & val; ! 4125: for(;cnt;--cnt){ ! 4126: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 4127: if ((val&cmask)!=sign)regs.v=1; ! 4128: } ! 4129: regs.n = (val&cmask) != 0; ! 4130: regs.z = val == 0; ! 4131: regs.d[dstreg] = (val); ! 4132: }}}}}} ! 4133: void op_eb88(UWORD opcode) ! 4134: { ! 4135: ULONG srcreg = 5; ! 4136: ULONG dstreg = (opcode & 7) >> 0; ! 4137: {{ ULONG cnt = srcreg; ! 4138: { LONG data = regs.d[dstreg]; ! 4139: { ULONG val = data; ! 4140: cnt &= 63; ! 4141: { int carry = 0; ! 4142: ULONG cmask = 0x80000000; ! 4143: for(;cnt;--cnt){ ! 4144: carry=val&cmask; val <<= 1; ! 4145: } ! 4146: regs.v = regs.c = 0; ! 4147: regs.z = ((LONG)(val)) == 0; ! 4148: regs.n = ((LONG)(val)) < 0; ! 4149: regs.c = regs.x = carry!=0; ! 4150: regs.d[dstreg] = (val); ! 4151: }}}}}} ! 4152: void op_eb90(UWORD opcode) ! 4153: { ! 4154: ULONG srcreg = 5; ! 4155: ULONG dstreg = (opcode & 7) >> 0; ! 4156: {{ ULONG cnt = srcreg; ! 4157: { LONG data = regs.d[dstreg]; ! 4158: { ULONG val = data; ! 4159: cnt &= 63; ! 4160: { int carry = 0; ! 4161: ULONG cmask = 0x80000000; ! 4162: for(;cnt;--cnt){ ! 4163: carry=val&cmask; val <<= 1; ! 4164: if(regs.x) val |= 1; ! 4165: regs.x = carry != 0; ! 4166: } ! 4167: regs.v = regs.c = 0; ! 4168: regs.z = ((LONG)(val)) == 0; ! 4169: regs.n = ((LONG)(val)) < 0; ! 4170: regs.x = regs.c = carry!=0; ! 4171: regs.d[dstreg] = (val); ! 4172: }}}}}} ! 4173: void op_eb98(UWORD opcode) ! 4174: { ! 4175: ULONG srcreg = 5; ! 4176: ULONG dstreg = (opcode & 7) >> 0; ! 4177: {{ ULONG cnt = srcreg; ! 4178: { LONG data = regs.d[dstreg]; ! 4179: { ULONG val = data; ! 4180: cnt &= 63; ! 4181: { int carry = 0; ! 4182: ULONG cmask = 0x80000000; ! 4183: for(;cnt;--cnt){ ! 4184: carry=val&cmask; val <<= 1; ! 4185: if(carry) val |= 1; ! 4186: } ! 4187: regs.v = regs.c = 0; ! 4188: regs.z = ((LONG)(val)) == 0; ! 4189: regs.n = ((LONG)(val)) < 0; ! 4190: regs.c = carry!=0; ! 4191: regs.d[dstreg] = (val); ! 4192: }}}}}} ! 4193: void op_ec00(UWORD opcode) ! 4194: { ! 4195: ULONG srcreg = 6; ! 4196: ULONG dstreg = (opcode & 7) >> 0; ! 4197: {{ ULONG cnt = srcreg; ! 4198: { BYTE data = regs.d[dstreg]; ! 4199: { UBYTE val = data; ! 4200: cnt &= 63; ! 4201: regs.v = 0; ! 4202: { ULONG cmask = 0x80; ! 4203: ULONG sign = cmask & val; ! 4204: for(;cnt;--cnt){ ! 4205: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 4206: } ! 4207: regs.n = sign != 0; ! 4208: regs.z = val == 0; ! 4209: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4210: }}}}}} ! 4211: void op_ec08(UWORD opcode) ! 4212: { ! 4213: ULONG srcreg = 6; ! 4214: ULONG dstreg = (opcode & 7) >> 0; ! 4215: {{ ULONG cnt = srcreg; ! 4216: { BYTE data = regs.d[dstreg]; ! 4217: { UBYTE val = data; ! 4218: cnt &= 63; ! 4219: { int carry = 0; ! 4220: for(;cnt;--cnt){ ! 4221: carry=val&1; val >>= 1; ! 4222: } ! 4223: regs.v = regs.c = 0; ! 4224: regs.z = ((BYTE)(val)) == 0; ! 4225: regs.n = ((BYTE)(val)) < 0; ! 4226: regs.c = regs.x = carry!=0; ! 4227: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4228: }}}}}} ! 4229: void op_ec10(UWORD opcode) ! 4230: { ! 4231: ULONG srcreg = 6; ! 4232: ULONG dstreg = (opcode & 7) >> 0; ! 4233: {{ ULONG cnt = srcreg; ! 4234: { BYTE data = regs.d[dstreg]; ! 4235: { UBYTE val = data; ! 4236: cnt &= 63; ! 4237: { int carry = 0; ! 4238: ULONG cmask = 0x80; ! 4239: for(;cnt;--cnt){ ! 4240: carry=val&1; val >>= 1; ! 4241: if(regs.x) val |= cmask; ! 4242: regs.x = carry != 0; ! 4243: } ! 4244: regs.v = regs.c = 0; ! 4245: regs.z = ((BYTE)(val)) == 0; ! 4246: regs.n = ((BYTE)(val)) < 0; ! 4247: regs.x = regs.c = carry!=0; ! 4248: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4249: }}}}}} ! 4250: void op_ec18(UWORD opcode) ! 4251: { ! 4252: ULONG srcreg = 6; ! 4253: ULONG dstreg = (opcode & 7) >> 0; ! 4254: {{ ULONG cnt = srcreg; ! 4255: { BYTE data = regs.d[dstreg]; ! 4256: { UBYTE val = data; ! 4257: cnt &= 63; ! 4258: { int carry = 0; ! 4259: ULONG cmask = 0x80; ! 4260: for(;cnt;--cnt){ ! 4261: carry=val&1; val = (ULONG)val >> 1; ! 4262: if(carry) val |= cmask; ! 4263: } ! 4264: regs.v = regs.c = 0; ! 4265: regs.z = ((BYTE)(val)) == 0; ! 4266: regs.n = ((BYTE)(val)) < 0; ! 4267: regs.c = carry!=0; ! 4268: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4269: }}}}}} ! 4270: void op_ec40(UWORD opcode) ! 4271: { ! 4272: ULONG srcreg = 6; ! 4273: ULONG dstreg = (opcode & 7) >> 0; ! 4274: {{ ULONG cnt = srcreg; ! 4275: { WORD data = regs.d[dstreg]; ! 4276: { UWORD val = data; ! 4277: cnt &= 63; ! 4278: regs.v = 0; ! 4279: { ULONG cmask = 0x8000; ! 4280: ULONG sign = cmask & val; ! 4281: for(;cnt;--cnt){ ! 4282: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 4283: } ! 4284: regs.n = sign != 0; ! 4285: regs.z = val == 0; ! 4286: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4287: }}}}}} ! 4288: void op_ec48(UWORD opcode) ! 4289: { ! 4290: ULONG srcreg = 6; ! 4291: ULONG dstreg = (opcode & 7) >> 0; ! 4292: {{ ULONG cnt = srcreg; ! 4293: { WORD data = regs.d[dstreg]; ! 4294: { UWORD val = data; ! 4295: cnt &= 63; ! 4296: { int carry = 0; ! 4297: for(;cnt;--cnt){ ! 4298: carry=val&1; val >>= 1; ! 4299: } ! 4300: regs.v = regs.c = 0; ! 4301: regs.z = ((WORD)(val)) == 0; ! 4302: regs.n = ((WORD)(val)) < 0; ! 4303: regs.c = regs.x = carry!=0; ! 4304: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4305: }}}}}} ! 4306: void op_ec50(UWORD opcode) ! 4307: { ! 4308: ULONG srcreg = 6; ! 4309: ULONG dstreg = (opcode & 7) >> 0; ! 4310: {{ ULONG cnt = srcreg; ! 4311: { WORD data = regs.d[dstreg]; ! 4312: { UWORD val = data; ! 4313: cnt &= 63; ! 4314: { int carry = 0; ! 4315: ULONG cmask = 0x8000; ! 4316: for(;cnt;--cnt){ ! 4317: carry=val&1; val >>= 1; ! 4318: if(regs.x) val |= cmask; ! 4319: regs.x = carry != 0; ! 4320: } ! 4321: regs.v = regs.c = 0; ! 4322: regs.z = ((WORD)(val)) == 0; ! 4323: regs.n = ((WORD)(val)) < 0; ! 4324: regs.x = regs.c = carry!=0; ! 4325: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4326: }}}}}} ! 4327: void op_ec58(UWORD opcode) ! 4328: { ! 4329: ULONG srcreg = 6; ! 4330: ULONG dstreg = (opcode & 7) >> 0; ! 4331: {{ ULONG cnt = srcreg; ! 4332: { WORD data = regs.d[dstreg]; ! 4333: { UWORD val = data; ! 4334: cnt &= 63; ! 4335: { int carry = 0; ! 4336: ULONG cmask = 0x8000; ! 4337: for(;cnt;--cnt){ ! 4338: carry=val&1; val = (ULONG)val >> 1; ! 4339: if(carry) val |= cmask; ! 4340: } ! 4341: regs.v = regs.c = 0; ! 4342: regs.z = ((WORD)(val)) == 0; ! 4343: regs.n = ((WORD)(val)) < 0; ! 4344: regs.c = carry!=0; ! 4345: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4346: }}}}}} ! 4347: void op_ec80(UWORD opcode) ! 4348: { ! 4349: ULONG srcreg = 6; ! 4350: ULONG dstreg = (opcode & 7) >> 0; ! 4351: {{ ULONG cnt = srcreg; ! 4352: { LONG data = regs.d[dstreg]; ! 4353: { ULONG val = data; ! 4354: cnt &= 63; ! 4355: regs.v = 0; ! 4356: { ULONG cmask = 0x80000000; ! 4357: ULONG sign = cmask & val; ! 4358: for(;cnt;--cnt){ ! 4359: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 4360: } ! 4361: regs.n = sign != 0; ! 4362: regs.z = val == 0; ! 4363: regs.d[dstreg] = (val); ! 4364: }}}}}} ! 4365: void op_ec88(UWORD opcode) ! 4366: { ! 4367: ULONG srcreg = 6; ! 4368: ULONG dstreg = (opcode & 7) >> 0; ! 4369: {{ ULONG cnt = srcreg; ! 4370: { LONG data = regs.d[dstreg]; ! 4371: { ULONG val = data; ! 4372: cnt &= 63; ! 4373: { int carry = 0; ! 4374: for(;cnt;--cnt){ ! 4375: carry=val&1; val >>= 1; ! 4376: } ! 4377: regs.v = regs.c = 0; ! 4378: regs.z = ((LONG)(val)) == 0; ! 4379: regs.n = ((LONG)(val)) < 0; ! 4380: regs.c = regs.x = carry!=0; ! 4381: regs.d[dstreg] = (val); ! 4382: }}}}}} ! 4383: void op_ec90(UWORD opcode) ! 4384: { ! 4385: ULONG srcreg = 6; ! 4386: ULONG dstreg = (opcode & 7) >> 0; ! 4387: {{ ULONG cnt = srcreg; ! 4388: { LONG data = regs.d[dstreg]; ! 4389: { ULONG val = data; ! 4390: cnt &= 63; ! 4391: { int carry = 0; ! 4392: ULONG cmask = 0x80000000; ! 4393: for(;cnt;--cnt){ ! 4394: carry=val&1; val >>= 1; ! 4395: if(regs.x) val |= cmask; ! 4396: regs.x = carry != 0; ! 4397: } ! 4398: regs.v = regs.c = 0; ! 4399: regs.z = ((LONG)(val)) == 0; ! 4400: regs.n = ((LONG)(val)) < 0; ! 4401: regs.x = regs.c = carry!=0; ! 4402: regs.d[dstreg] = (val); ! 4403: }}}}}} ! 4404: void op_ec98(UWORD opcode) ! 4405: { ! 4406: ULONG srcreg = 6; ! 4407: ULONG dstreg = (opcode & 7) >> 0; ! 4408: {{ ULONG cnt = srcreg; ! 4409: { LONG data = regs.d[dstreg]; ! 4410: { ULONG val = data; ! 4411: cnt &= 63; ! 4412: { int carry = 0; ! 4413: ULONG cmask = 0x80000000; ! 4414: for(;cnt;--cnt){ ! 4415: carry=val&1; val = (ULONG)val >> 1; ! 4416: if(carry) val |= cmask; ! 4417: } ! 4418: regs.v = regs.c = 0; ! 4419: regs.z = ((LONG)(val)) == 0; ! 4420: regs.n = ((LONG)(val)) < 0; ! 4421: regs.c = carry!=0; ! 4422: regs.d[dstreg] = (val); ! 4423: }}}}}} ! 4424: void op_ed00(UWORD opcode) ! 4425: { ! 4426: ULONG srcreg = 6; ! 4427: ULONG dstreg = (opcode & 7) >> 0; ! 4428: {{ ULONG cnt = srcreg; ! 4429: { BYTE data = regs.d[dstreg]; ! 4430: { UBYTE val = data; ! 4431: cnt &= 63; ! 4432: regs.v = 0; ! 4433: { ULONG cmask = 0x80; ! 4434: ULONG sign = cmask & val; ! 4435: for(;cnt;--cnt){ ! 4436: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 4437: if ((val&cmask)!=sign)regs.v=1; ! 4438: } ! 4439: regs.n = (val&cmask) != 0; ! 4440: regs.z = val == 0; ! 4441: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4442: }}}}}} ! 4443: void op_ed08(UWORD opcode) ! 4444: { ! 4445: ULONG srcreg = 6; ! 4446: ULONG dstreg = (opcode & 7) >> 0; ! 4447: {{ ULONG cnt = srcreg; ! 4448: { BYTE data = regs.d[dstreg]; ! 4449: { UBYTE val = data; ! 4450: cnt &= 63; ! 4451: { int carry = 0; ! 4452: ULONG cmask = 0x80; ! 4453: for(;cnt;--cnt){ ! 4454: carry=val&cmask; val <<= 1; ! 4455: } ! 4456: regs.v = regs.c = 0; ! 4457: regs.z = ((BYTE)(val)) == 0; ! 4458: regs.n = ((BYTE)(val)) < 0; ! 4459: regs.c = regs.x = carry!=0; ! 4460: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4461: }}}}}} ! 4462: void op_ed10(UWORD opcode) ! 4463: { ! 4464: ULONG srcreg = 6; ! 4465: ULONG dstreg = (opcode & 7) >> 0; ! 4466: {{ ULONG cnt = srcreg; ! 4467: { BYTE data = regs.d[dstreg]; ! 4468: { UBYTE val = data; ! 4469: cnt &= 63; ! 4470: { int carry = 0; ! 4471: ULONG cmask = 0x80; ! 4472: for(;cnt;--cnt){ ! 4473: carry=val&cmask; val <<= 1; ! 4474: if(regs.x) val |= 1; ! 4475: regs.x = carry != 0; ! 4476: } ! 4477: regs.v = regs.c = 0; ! 4478: regs.z = ((BYTE)(val)) == 0; ! 4479: regs.n = ((BYTE)(val)) < 0; ! 4480: regs.x = regs.c = carry!=0; ! 4481: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4482: }}}}}} ! 4483: void op_ed18(UWORD opcode) ! 4484: { ! 4485: ULONG srcreg = 6; ! 4486: ULONG dstreg = (opcode & 7) >> 0; ! 4487: {{ ULONG cnt = srcreg; ! 4488: { BYTE data = regs.d[dstreg]; ! 4489: { UBYTE val = data; ! 4490: cnt &= 63; ! 4491: { int carry = 0; ! 4492: ULONG cmask = 0x80; ! 4493: for(;cnt;--cnt){ ! 4494: carry=val&cmask; val <<= 1; ! 4495: if(carry) val |= 1; ! 4496: } ! 4497: regs.v = regs.c = 0; ! 4498: regs.z = ((BYTE)(val)) == 0; ! 4499: regs.n = ((BYTE)(val)) < 0; ! 4500: regs.c = carry!=0; ! 4501: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4502: }}}}}} ! 4503: void op_ed40(UWORD opcode) ! 4504: { ! 4505: ULONG srcreg = 6; ! 4506: ULONG dstreg = (opcode & 7) >> 0; ! 4507: {{ ULONG cnt = srcreg; ! 4508: { WORD data = regs.d[dstreg]; ! 4509: { UWORD val = data; ! 4510: cnt &= 63; ! 4511: regs.v = 0; ! 4512: { ULONG cmask = 0x8000; ! 4513: ULONG sign = cmask & val; ! 4514: for(;cnt;--cnt){ ! 4515: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 4516: if ((val&cmask)!=sign)regs.v=1; ! 4517: } ! 4518: regs.n = (val&cmask) != 0; ! 4519: regs.z = val == 0; ! 4520: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4521: }}}}}} ! 4522: void op_ed48(UWORD opcode) ! 4523: { ! 4524: ULONG srcreg = 6; ! 4525: ULONG dstreg = (opcode & 7) >> 0; ! 4526: {{ ULONG cnt = srcreg; ! 4527: { WORD data = regs.d[dstreg]; ! 4528: { UWORD val = data; ! 4529: cnt &= 63; ! 4530: { int carry = 0; ! 4531: ULONG cmask = 0x8000; ! 4532: for(;cnt;--cnt){ ! 4533: carry=val&cmask; val <<= 1; ! 4534: } ! 4535: regs.v = regs.c = 0; ! 4536: regs.z = ((WORD)(val)) == 0; ! 4537: regs.n = ((WORD)(val)) < 0; ! 4538: regs.c = regs.x = carry!=0; ! 4539: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4540: }}}}}} ! 4541: void op_ed50(UWORD opcode) ! 4542: { ! 4543: ULONG srcreg = 6; ! 4544: ULONG dstreg = (opcode & 7) >> 0; ! 4545: {{ ULONG cnt = srcreg; ! 4546: { WORD data = regs.d[dstreg]; ! 4547: { UWORD val = data; ! 4548: cnt &= 63; ! 4549: { int carry = 0; ! 4550: ULONG cmask = 0x8000; ! 4551: for(;cnt;--cnt){ ! 4552: carry=val&cmask; val <<= 1; ! 4553: if(regs.x) val |= 1; ! 4554: regs.x = carry != 0; ! 4555: } ! 4556: regs.v = regs.c = 0; ! 4557: regs.z = ((WORD)(val)) == 0; ! 4558: regs.n = ((WORD)(val)) < 0; ! 4559: regs.x = regs.c = carry!=0; ! 4560: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4561: }}}}}} ! 4562: void op_ed58(UWORD opcode) ! 4563: { ! 4564: ULONG srcreg = 6; ! 4565: ULONG dstreg = (opcode & 7) >> 0; ! 4566: {{ ULONG cnt = srcreg; ! 4567: { WORD data = regs.d[dstreg]; ! 4568: { UWORD val = data; ! 4569: cnt &= 63; ! 4570: { int carry = 0; ! 4571: ULONG cmask = 0x8000; ! 4572: for(;cnt;--cnt){ ! 4573: carry=val&cmask; val <<= 1; ! 4574: if(carry) val |= 1; ! 4575: } ! 4576: regs.v = regs.c = 0; ! 4577: regs.z = ((WORD)(val)) == 0; ! 4578: regs.n = ((WORD)(val)) < 0; ! 4579: regs.c = carry!=0; ! 4580: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4581: }}}}}} ! 4582: void op_ed80(UWORD opcode) ! 4583: { ! 4584: ULONG srcreg = 6; ! 4585: ULONG dstreg = (opcode & 7) >> 0; ! 4586: {{ ULONG cnt = srcreg; ! 4587: { LONG data = regs.d[dstreg]; ! 4588: { ULONG val = data; ! 4589: cnt &= 63; ! 4590: regs.v = 0; ! 4591: { ULONG cmask = 0x80000000; ! 4592: ULONG sign = cmask & val; ! 4593: for(;cnt;--cnt){ ! 4594: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 4595: if ((val&cmask)!=sign)regs.v=1; ! 4596: } ! 4597: regs.n = (val&cmask) != 0; ! 4598: regs.z = val == 0; ! 4599: regs.d[dstreg] = (val); ! 4600: }}}}}} ! 4601: void op_ed88(UWORD opcode) ! 4602: { ! 4603: ULONG srcreg = 6; ! 4604: ULONG dstreg = (opcode & 7) >> 0; ! 4605: {{ ULONG cnt = srcreg; ! 4606: { LONG data = regs.d[dstreg]; ! 4607: { ULONG val = data; ! 4608: cnt &= 63; ! 4609: { int carry = 0; ! 4610: ULONG cmask = 0x80000000; ! 4611: for(;cnt;--cnt){ ! 4612: carry=val&cmask; val <<= 1; ! 4613: } ! 4614: regs.v = regs.c = 0; ! 4615: regs.z = ((LONG)(val)) == 0; ! 4616: regs.n = ((LONG)(val)) < 0; ! 4617: regs.c = regs.x = carry!=0; ! 4618: regs.d[dstreg] = (val); ! 4619: }}}}}} ! 4620: void op_ed90(UWORD opcode) ! 4621: { ! 4622: ULONG srcreg = 6; ! 4623: ULONG dstreg = (opcode & 7) >> 0; ! 4624: {{ ULONG cnt = srcreg; ! 4625: { LONG data = regs.d[dstreg]; ! 4626: { ULONG val = data; ! 4627: cnt &= 63; ! 4628: { int carry = 0; ! 4629: ULONG cmask = 0x80000000; ! 4630: for(;cnt;--cnt){ ! 4631: carry=val&cmask; val <<= 1; ! 4632: if(regs.x) val |= 1; ! 4633: regs.x = carry != 0; ! 4634: } ! 4635: regs.v = regs.c = 0; ! 4636: regs.z = ((LONG)(val)) == 0; ! 4637: regs.n = ((LONG)(val)) < 0; ! 4638: regs.x = regs.c = carry!=0; ! 4639: regs.d[dstreg] = (val); ! 4640: }}}}}} ! 4641: void op_ed98(UWORD opcode) ! 4642: { ! 4643: ULONG srcreg = 6; ! 4644: ULONG dstreg = (opcode & 7) >> 0; ! 4645: {{ ULONG cnt = srcreg; ! 4646: { LONG data = regs.d[dstreg]; ! 4647: { ULONG val = data; ! 4648: cnt &= 63; ! 4649: { int carry = 0; ! 4650: ULONG cmask = 0x80000000; ! 4651: for(;cnt;--cnt){ ! 4652: carry=val&cmask; val <<= 1; ! 4653: if(carry) val |= 1; ! 4654: } ! 4655: regs.v = regs.c = 0; ! 4656: regs.z = ((LONG)(val)) == 0; ! 4657: regs.n = ((LONG)(val)) < 0; ! 4658: regs.c = carry!=0; ! 4659: regs.d[dstreg] = (val); ! 4660: }}}}}} ! 4661: void op_ee00(UWORD opcode) ! 4662: { ! 4663: ULONG srcreg = 7; ! 4664: ULONG dstreg = (opcode & 7) >> 0; ! 4665: {{ ULONG cnt = srcreg; ! 4666: { BYTE data = regs.d[dstreg]; ! 4667: { UBYTE val = data; ! 4668: cnt &= 63; ! 4669: regs.v = 0; ! 4670: { ULONG cmask = 0x80; ! 4671: ULONG sign = cmask & val; ! 4672: for(;cnt;--cnt){ ! 4673: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 4674: } ! 4675: regs.n = sign != 0; ! 4676: regs.z = val == 0; ! 4677: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4678: }}}}}} ! 4679: void op_ee08(UWORD opcode) ! 4680: { ! 4681: ULONG srcreg = 7; ! 4682: ULONG dstreg = (opcode & 7) >> 0; ! 4683: {{ ULONG cnt = srcreg; ! 4684: { BYTE data = regs.d[dstreg]; ! 4685: { UBYTE val = data; ! 4686: cnt &= 63; ! 4687: { int carry = 0; ! 4688: for(;cnt;--cnt){ ! 4689: carry=val&1; val >>= 1; ! 4690: } ! 4691: regs.v = regs.c = 0; ! 4692: regs.z = ((BYTE)(val)) == 0; ! 4693: regs.n = ((BYTE)(val)) < 0; ! 4694: regs.c = regs.x = carry!=0; ! 4695: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4696: }}}}}} ! 4697: void op_ee10(UWORD opcode) ! 4698: { ! 4699: ULONG srcreg = 7; ! 4700: ULONG dstreg = (opcode & 7) >> 0; ! 4701: {{ ULONG cnt = srcreg; ! 4702: { BYTE data = regs.d[dstreg]; ! 4703: { UBYTE val = data; ! 4704: cnt &= 63; ! 4705: { int carry = 0; ! 4706: ULONG cmask = 0x80; ! 4707: for(;cnt;--cnt){ ! 4708: carry=val&1; val >>= 1; ! 4709: if(regs.x) val |= cmask; ! 4710: regs.x = carry != 0; ! 4711: } ! 4712: regs.v = regs.c = 0; ! 4713: regs.z = ((BYTE)(val)) == 0; ! 4714: regs.n = ((BYTE)(val)) < 0; ! 4715: regs.x = regs.c = carry!=0; ! 4716: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4717: }}}}}} ! 4718: void op_ee18(UWORD opcode) ! 4719: { ! 4720: ULONG srcreg = 7; ! 4721: ULONG dstreg = (opcode & 7) >> 0; ! 4722: {{ ULONG cnt = srcreg; ! 4723: { BYTE data = regs.d[dstreg]; ! 4724: { UBYTE val = data; ! 4725: cnt &= 63; ! 4726: { int carry = 0; ! 4727: ULONG cmask = 0x80; ! 4728: for(;cnt;--cnt){ ! 4729: carry=val&1; val = (ULONG)val >> 1; ! 4730: if(carry) val |= cmask; ! 4731: } ! 4732: regs.v = regs.c = 0; ! 4733: regs.z = ((BYTE)(val)) == 0; ! 4734: regs.n = ((BYTE)(val)) < 0; ! 4735: regs.c = carry!=0; ! 4736: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4737: }}}}}} ! 4738: void op_ee40(UWORD opcode) ! 4739: { ! 4740: ULONG srcreg = 7; ! 4741: ULONG dstreg = (opcode & 7) >> 0; ! 4742: {{ ULONG cnt = srcreg; ! 4743: { WORD data = regs.d[dstreg]; ! 4744: { UWORD val = data; ! 4745: cnt &= 63; ! 4746: regs.v = 0; ! 4747: { ULONG cmask = 0x8000; ! 4748: ULONG sign = cmask & val; ! 4749: for(;cnt;--cnt){ ! 4750: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 4751: } ! 4752: regs.n = sign != 0; ! 4753: regs.z = val == 0; ! 4754: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4755: }}}}}} ! 4756: void op_ee48(UWORD opcode) ! 4757: { ! 4758: ULONG srcreg = 7; ! 4759: ULONG dstreg = (opcode & 7) >> 0; ! 4760: {{ ULONG cnt = srcreg; ! 4761: { WORD data = regs.d[dstreg]; ! 4762: { UWORD val = data; ! 4763: cnt &= 63; ! 4764: { int carry = 0; ! 4765: for(;cnt;--cnt){ ! 4766: carry=val&1; val >>= 1; ! 4767: } ! 4768: regs.v = regs.c = 0; ! 4769: regs.z = ((WORD)(val)) == 0; ! 4770: regs.n = ((WORD)(val)) < 0; ! 4771: regs.c = regs.x = carry!=0; ! 4772: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4773: }}}}}} ! 4774: void op_ee50(UWORD opcode) ! 4775: { ! 4776: ULONG srcreg = 7; ! 4777: ULONG dstreg = (opcode & 7) >> 0; ! 4778: {{ ULONG cnt = srcreg; ! 4779: { WORD data = regs.d[dstreg]; ! 4780: { UWORD val = data; ! 4781: cnt &= 63; ! 4782: { int carry = 0; ! 4783: ULONG cmask = 0x8000; ! 4784: for(;cnt;--cnt){ ! 4785: carry=val&1; val >>= 1; ! 4786: if(regs.x) val |= cmask; ! 4787: regs.x = carry != 0; ! 4788: } ! 4789: regs.v = regs.c = 0; ! 4790: regs.z = ((WORD)(val)) == 0; ! 4791: regs.n = ((WORD)(val)) < 0; ! 4792: regs.x = regs.c = carry!=0; ! 4793: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4794: }}}}}} ! 4795: void op_ee58(UWORD opcode) ! 4796: { ! 4797: ULONG srcreg = 7; ! 4798: ULONG dstreg = (opcode & 7) >> 0; ! 4799: {{ ULONG cnt = srcreg; ! 4800: { WORD data = regs.d[dstreg]; ! 4801: { UWORD val = data; ! 4802: cnt &= 63; ! 4803: { int carry = 0; ! 4804: ULONG cmask = 0x8000; ! 4805: for(;cnt;--cnt){ ! 4806: carry=val&1; val = (ULONG)val >> 1; ! 4807: if(carry) val |= cmask; ! 4808: } ! 4809: regs.v = regs.c = 0; ! 4810: regs.z = ((WORD)(val)) == 0; ! 4811: regs.n = ((WORD)(val)) < 0; ! 4812: regs.c = carry!=0; ! 4813: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4814: }}}}}} ! 4815: void op_ee80(UWORD opcode) ! 4816: { ! 4817: ULONG srcreg = 7; ! 4818: ULONG dstreg = (opcode & 7) >> 0; ! 4819: {{ ULONG cnt = srcreg; ! 4820: { LONG data = regs.d[dstreg]; ! 4821: { ULONG val = data; ! 4822: cnt &= 63; ! 4823: regs.v = 0; ! 4824: { ULONG cmask = 0x80000000; ! 4825: ULONG sign = cmask & val; ! 4826: for(;cnt;--cnt){ ! 4827: regs.c=regs.x=val&1; val = ((ULONG)val >> 1) | sign; ! 4828: } ! 4829: regs.n = sign != 0; ! 4830: regs.z = val == 0; ! 4831: regs.d[dstreg] = (val); ! 4832: }}}}}} ! 4833: void op_ee88(UWORD opcode) ! 4834: { ! 4835: ULONG srcreg = 7; ! 4836: ULONG dstreg = (opcode & 7) >> 0; ! 4837: {{ ULONG cnt = srcreg; ! 4838: { LONG data = regs.d[dstreg]; ! 4839: { ULONG val = data; ! 4840: cnt &= 63; ! 4841: { int carry = 0; ! 4842: for(;cnt;--cnt){ ! 4843: carry=val&1; val >>= 1; ! 4844: } ! 4845: regs.v = regs.c = 0; ! 4846: regs.z = ((LONG)(val)) == 0; ! 4847: regs.n = ((LONG)(val)) < 0; ! 4848: regs.c = regs.x = carry!=0; ! 4849: regs.d[dstreg] = (val); ! 4850: }}}}}} ! 4851: void op_ee90(UWORD opcode) ! 4852: { ! 4853: ULONG srcreg = 7; ! 4854: ULONG dstreg = (opcode & 7) >> 0; ! 4855: {{ ULONG cnt = srcreg; ! 4856: { LONG data = regs.d[dstreg]; ! 4857: { ULONG val = data; ! 4858: cnt &= 63; ! 4859: { int carry = 0; ! 4860: ULONG cmask = 0x80000000; ! 4861: for(;cnt;--cnt){ ! 4862: carry=val&1; val >>= 1; ! 4863: if(regs.x) val |= cmask; ! 4864: regs.x = carry != 0; ! 4865: } ! 4866: regs.v = regs.c = 0; ! 4867: regs.z = ((LONG)(val)) == 0; ! 4868: regs.n = ((LONG)(val)) < 0; ! 4869: regs.x = regs.c = carry!=0; ! 4870: regs.d[dstreg] = (val); ! 4871: }}}}}} ! 4872: void op_ee98(UWORD opcode) ! 4873: { ! 4874: ULONG srcreg = 7; ! 4875: ULONG dstreg = (opcode & 7) >> 0; ! 4876: {{ ULONG cnt = srcreg; ! 4877: { LONG data = regs.d[dstreg]; ! 4878: { ULONG val = data; ! 4879: cnt &= 63; ! 4880: { int carry = 0; ! 4881: ULONG cmask = 0x80000000; ! 4882: for(;cnt;--cnt){ ! 4883: carry=val&1; val = (ULONG)val >> 1; ! 4884: if(carry) val |= cmask; ! 4885: } ! 4886: regs.v = regs.c = 0; ! 4887: regs.z = ((LONG)(val)) == 0; ! 4888: regs.n = ((LONG)(val)) < 0; ! 4889: regs.c = carry!=0; ! 4890: regs.d[dstreg] = (val); ! 4891: }}}}}} ! 4892: void op_ef00(UWORD opcode) ! 4893: { ! 4894: ULONG srcreg = 7; ! 4895: ULONG dstreg = (opcode & 7) >> 0; ! 4896: {{ ULONG cnt = srcreg; ! 4897: { BYTE data = regs.d[dstreg]; ! 4898: { UBYTE val = data; ! 4899: cnt &= 63; ! 4900: regs.v = 0; ! 4901: { ULONG cmask = 0x80; ! 4902: ULONG sign = cmask & val; ! 4903: for(;cnt;--cnt){ ! 4904: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 4905: if ((val&cmask)!=sign)regs.v=1; ! 4906: } ! 4907: regs.n = (val&cmask) != 0; ! 4908: regs.z = val == 0; ! 4909: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4910: }}}}}} ! 4911: void op_ef08(UWORD opcode) ! 4912: { ! 4913: ULONG srcreg = 7; ! 4914: ULONG dstreg = (opcode & 7) >> 0; ! 4915: {{ ULONG cnt = srcreg; ! 4916: { BYTE data = regs.d[dstreg]; ! 4917: { UBYTE val = data; ! 4918: cnt &= 63; ! 4919: { int carry = 0; ! 4920: ULONG cmask = 0x80; ! 4921: for(;cnt;--cnt){ ! 4922: carry=val&cmask; val <<= 1; ! 4923: } ! 4924: regs.v = regs.c = 0; ! 4925: regs.z = ((BYTE)(val)) == 0; ! 4926: regs.n = ((BYTE)(val)) < 0; ! 4927: regs.c = regs.x = carry!=0; ! 4928: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4929: }}}}}} ! 4930: void op_ef10(UWORD opcode) ! 4931: { ! 4932: ULONG srcreg = 7; ! 4933: ULONG dstreg = (opcode & 7) >> 0; ! 4934: {{ ULONG cnt = srcreg; ! 4935: { BYTE data = regs.d[dstreg]; ! 4936: { UBYTE val = data; ! 4937: cnt &= 63; ! 4938: { int carry = 0; ! 4939: ULONG cmask = 0x80; ! 4940: for(;cnt;--cnt){ ! 4941: carry=val&cmask; val <<= 1; ! 4942: if(regs.x) val |= 1; ! 4943: regs.x = carry != 0; ! 4944: } ! 4945: regs.v = regs.c = 0; ! 4946: regs.z = ((BYTE)(val)) == 0; ! 4947: regs.n = ((BYTE)(val)) < 0; ! 4948: regs.x = regs.c = carry!=0; ! 4949: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4950: }}}}}} ! 4951: void op_ef18(UWORD opcode) ! 4952: { ! 4953: ULONG srcreg = 7; ! 4954: ULONG dstreg = (opcode & 7) >> 0; ! 4955: {{ ULONG cnt = srcreg; ! 4956: { BYTE data = regs.d[dstreg]; ! 4957: { UBYTE val = data; ! 4958: cnt &= 63; ! 4959: { int carry = 0; ! 4960: ULONG cmask = 0x80; ! 4961: for(;cnt;--cnt){ ! 4962: carry=val&cmask; val <<= 1; ! 4963: if(carry) val |= 1; ! 4964: } ! 4965: regs.v = regs.c = 0; ! 4966: regs.z = ((BYTE)(val)) == 0; ! 4967: regs.n = ((BYTE)(val)) < 0; ! 4968: regs.c = carry!=0; ! 4969: regs.d[dstreg] &= ~0xff; regs.d[dstreg] |= (val) & 0xff; ! 4970: }}}}}} ! 4971: void op_ef40(UWORD opcode) ! 4972: { ! 4973: ULONG srcreg = 7; ! 4974: ULONG dstreg = (opcode & 7) >> 0; ! 4975: {{ ULONG cnt = srcreg; ! 4976: { WORD data = regs.d[dstreg]; ! 4977: { UWORD val = data; ! 4978: cnt &= 63; ! 4979: regs.v = 0; ! 4980: { ULONG cmask = 0x8000; ! 4981: ULONG sign = cmask & val; ! 4982: for(;cnt;--cnt){ ! 4983: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 4984: if ((val&cmask)!=sign)regs.v=1; ! 4985: } ! 4986: regs.n = (val&cmask) != 0; ! 4987: regs.z = val == 0; ! 4988: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 4989: }}}}}} ! 4990: void op_ef48(UWORD opcode) ! 4991: { ! 4992: ULONG srcreg = 7; ! 4993: ULONG dstreg = (opcode & 7) >> 0; ! 4994: {{ ULONG cnt = srcreg; ! 4995: { WORD data = regs.d[dstreg]; ! 4996: { UWORD val = data; ! 4997: cnt &= 63; ! 4998: { int carry = 0; ! 4999: ULONG cmask = 0x8000; ! 5000: for(;cnt;--cnt){ ! 5001: carry=val&cmask; val <<= 1; ! 5002: } ! 5003: regs.v = regs.c = 0; ! 5004: regs.z = ((WORD)(val)) == 0; ! 5005: regs.n = ((WORD)(val)) < 0; ! 5006: regs.c = regs.x = carry!=0; ! 5007: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 5008: }}}}}} ! 5009: void op_ef50(UWORD opcode) ! 5010: { ! 5011: ULONG srcreg = 7; ! 5012: ULONG dstreg = (opcode & 7) >> 0; ! 5013: {{ ULONG cnt = srcreg; ! 5014: { WORD data = regs.d[dstreg]; ! 5015: { UWORD val = data; ! 5016: cnt &= 63; ! 5017: { int carry = 0; ! 5018: ULONG cmask = 0x8000; ! 5019: for(;cnt;--cnt){ ! 5020: carry=val&cmask; val <<= 1; ! 5021: if(regs.x) val |= 1; ! 5022: regs.x = carry != 0; ! 5023: } ! 5024: regs.v = regs.c = 0; ! 5025: regs.z = ((WORD)(val)) == 0; ! 5026: regs.n = ((WORD)(val)) < 0; ! 5027: regs.x = regs.c = carry!=0; ! 5028: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 5029: }}}}}} ! 5030: void op_ef58(UWORD opcode) ! 5031: { ! 5032: ULONG srcreg = 7; ! 5033: ULONG dstreg = (opcode & 7) >> 0; ! 5034: {{ ULONG cnt = srcreg; ! 5035: { WORD data = regs.d[dstreg]; ! 5036: { UWORD val = data; ! 5037: cnt &= 63; ! 5038: { int carry = 0; ! 5039: ULONG cmask = 0x8000; ! 5040: for(;cnt;--cnt){ ! 5041: carry=val&cmask; val <<= 1; ! 5042: if(carry) val |= 1; ! 5043: } ! 5044: regs.v = regs.c = 0; ! 5045: regs.z = ((WORD)(val)) == 0; ! 5046: regs.n = ((WORD)(val)) < 0; ! 5047: regs.c = carry!=0; ! 5048: regs.d[dstreg] &= ~0xffff; regs.d[dstreg] |= (val) & 0xffff; ! 5049: }}}}}} ! 5050: void op_ef80(UWORD opcode) ! 5051: { ! 5052: ULONG srcreg = 7; ! 5053: ULONG dstreg = (opcode & 7) >> 0; ! 5054: {{ ULONG cnt = srcreg; ! 5055: { LONG data = regs.d[dstreg]; ! 5056: { ULONG val = data; ! 5057: cnt &= 63; ! 5058: regs.v = 0; ! 5059: { ULONG cmask = 0x80000000; ! 5060: ULONG sign = cmask & val; ! 5061: for(;cnt;--cnt){ ! 5062: regs.c=regs.x=(val&cmask)!=0; val <<= 1; ! 5063: if ((val&cmask)!=sign)regs.v=1; ! 5064: } ! 5065: regs.n = (val&cmask) != 0; ! 5066: regs.z = val == 0; ! 5067: regs.d[dstreg] = (val); ! 5068: }}}}}} ! 5069: void op_ef88(UWORD opcode) ! 5070: { ! 5071: ULONG srcreg = 7; ! 5072: ULONG dstreg = (opcode & 7) >> 0; ! 5073: {{ ULONG cnt = srcreg; ! 5074: { LONG data = regs.d[dstreg]; ! 5075: { ULONG val = data; ! 5076: cnt &= 63; ! 5077: { int carry = 0; ! 5078: ULONG cmask = 0x80000000; ! 5079: for(;cnt;--cnt){ ! 5080: carry=val&cmask; val <<= 1; ! 5081: } ! 5082: regs.v = regs.c = 0; ! 5083: regs.z = ((LONG)(val)) == 0; ! 5084: regs.n = ((LONG)(val)) < 0; ! 5085: regs.c = regs.x = carry!=0; ! 5086: regs.d[dstreg] = (val); ! 5087: }}}}}} ! 5088: void op_ef90(UWORD opcode) ! 5089: { ! 5090: ULONG srcreg = 7; ! 5091: ULONG dstreg = (opcode & 7) >> 0; ! 5092: {{ ULONG cnt = srcreg; ! 5093: { LONG data = regs.d[dstreg]; ! 5094: { ULONG val = data; ! 5095: cnt &= 63; ! 5096: { int carry = 0; ! 5097: ULONG cmask = 0x80000000; ! 5098: for(;cnt;--cnt){ ! 5099: carry=val&cmask; val <<= 1; ! 5100: if(regs.x) val |= 1; ! 5101: regs.x = carry != 0; ! 5102: } ! 5103: regs.v = regs.c = 0; ! 5104: regs.z = ((LONG)(val)) == 0; ! 5105: regs.n = ((LONG)(val)) < 0; ! 5106: regs.x = regs.c = carry!=0; ! 5107: regs.d[dstreg] = (val); ! 5108: }}}}}} ! 5109: void op_ef98(UWORD opcode) ! 5110: { ! 5111: ULONG srcreg = 7; ! 5112: ULONG dstreg = (opcode & 7) >> 0; ! 5113: {{ ULONG cnt = srcreg; ! 5114: { LONG data = regs.d[dstreg]; ! 5115: { ULONG val = data; ! 5116: cnt &= 63; ! 5117: { int carry = 0; ! 5118: ULONG cmask = 0x80000000; ! 5119: for(;cnt;--cnt){ ! 5120: carry=val&cmask; val <<= 1; ! 5121: if(carry) val |= 1; ! 5122: } ! 5123: regs.v = regs.c = 0; ! 5124: regs.z = ((LONG)(val)) == 0; ! 5125: regs.n = ((LONG)(val)) < 0; ! 5126: regs.c = carry!=0; ! 5127: regs.d[dstreg] = (val); ! 5128: }}}}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.