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