X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Ffame%2Ffamec_opcodes.h;h=5e09a9282020d45453857bdcd8442275b6d83be5;hb=9a1f192a146e9b9752ec1a760745b1261fe9bdec;hp=a9cc991715eac042ee956723e4aed2b3b01fd522;hpb=70357ce52578dee0dd3b3663902cf872c3d34258;p=picodrive.git diff --git a/cpu/fame/famec_opcodes.h b/cpu/fame/famec_opcodes.h index a9cc991..5e09a92 100644 --- a/cpu/fame/famec_opcodes.h +++ b/cpu/fame/famec_opcodes.h @@ -638,9 +638,7 @@ OPCODE(0x007C) } else { - u32 newPC = (u32)(PC) - BasePC; - SET_PC(newPC-2); - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); #ifdef USE_CYCLONE_TIMING RET(0) #else @@ -1298,9 +1296,7 @@ OPCODE(0x027C) } else { - u32 newPC = (u32)(PC) - BasePC; - SET_PC(newPC-2); - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(20) @@ -1950,10 +1946,8 @@ OPCODE(0x0A7C) } else { - u32 newPC = (u32)(PC) - BasePC; - SET_PC(newPC-2); - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); - RET(4) + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(0) } RET(20) } @@ -3832,7 +3826,7 @@ OPCODE(0x083A) FETCH_BYTE(src); src = 1 << (src & 7); - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -3849,7 +3843,7 @@ OPCODE(0x083B) FETCH_BYTE(src); src = 1 << (src & 7); - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -4578,7 +4572,7 @@ OPCODE(0x013A) src = DREGu8((Opcode >> 9) & 7); src = 1 << (src & 7); - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -4595,7 +4589,7 @@ OPCODE(0x013B) src = DREGu8((Opcode >> 9) & 7); src = 1 << (src & 7); - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -5213,7 +5207,11 @@ OPCODE(0x0108) READ_BYTE_F(adr + 2, src) DREGu16((Opcode >> 9) & 7) = (res << 8) | src; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else RET(24) +#endif } // MOVEPLaD @@ -5237,7 +5235,11 @@ OPCODE(0x0148) READ_BYTE_F(adr, src) DREG((Opcode >> 9) & 7) = res | src; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(24) +#else RET(32) +#endif } // MOVEPWDa @@ -5253,7 +5255,11 @@ OPCODE(0x0188) WRITE_BYTE_F(adr + 0, res >> 8) WRITE_BYTE_F(adr + 2, res >> 0) POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else RET(24) +#endif } // MOVEPLDa @@ -5274,7 +5280,11 @@ OPCODE(0x01C8) adr += 2; WRITE_BYTE_F(adr, res >> 0) POST_IO +#ifdef USE_CYCLONE_TIMING +RET(24) +#else RET(32) +#endif } // MOVEB @@ -5460,6 +5470,7 @@ OPCODE(0x1F00) RET(8) } +#if 0 // MOVEB OPCODE(0x1008) { @@ -5692,6 +5703,7 @@ OPCODE(0x1F08) */ RET(8) } +#endif // MOVEB OPCODE(0x1010) @@ -7104,7 +7116,7 @@ OPCODE(0x103A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7123,7 +7135,7 @@ OPCODE(0x10BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7143,7 +7155,7 @@ OPCODE(0x10FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7164,7 +7176,7 @@ OPCODE(0x113A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7185,7 +7197,7 @@ OPCODE(0x117A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7206,7 +7218,7 @@ OPCODE(0x11BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7227,7 +7239,7 @@ OPCODE(0x11FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7247,7 +7259,7 @@ OPCODE(0x13FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7267,7 +7279,7 @@ OPCODE(0x1EFA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7288,7 +7300,7 @@ OPCODE(0x1F3A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, res) @@ -7309,7 +7321,7 @@ OPCODE(0x103B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7328,7 +7340,7 @@ OPCODE(0x10BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7348,7 +7360,7 @@ OPCODE(0x10FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7369,7 +7381,7 @@ OPCODE(0x113B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7390,7 +7402,7 @@ OPCODE(0x117B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7411,7 +7423,7 @@ OPCODE(0x11BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7432,7 +7444,7 @@ OPCODE(0x11FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7452,7 +7464,7 @@ OPCODE(0x13FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7472,7 +7484,7 @@ OPCODE(0x1EFB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -7493,7 +7505,7 @@ OPCODE(0x1F3B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = (uptr)(PC) - BasePC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, res) @@ -8167,7 +8179,7 @@ OPCODE(0x2100) adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; PRE_IO - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(12) } @@ -8279,7 +8291,7 @@ OPCODE(0x2F00) adr = AREG(7) - 4; AREG(7) = adr; PRE_IO - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(12) } @@ -8350,7 +8362,7 @@ OPCODE(0x2108) adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; PRE_IO - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(12) } @@ -8462,7 +8474,7 @@ OPCODE(0x2F08) adr = AREG(7) - 4; AREG(7) = adr; PRE_IO - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(12) } @@ -8539,7 +8551,7 @@ OPCODE(0x2110) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(20) } @@ -8657,7 +8669,7 @@ OPCODE(0x2F10) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(20) } @@ -8738,7 +8750,7 @@ OPCODE(0x2118) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(20) } @@ -8862,7 +8874,7 @@ OPCODE(0x2F18) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(20) } @@ -8943,7 +8955,7 @@ OPCODE(0x2120) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(22) } @@ -9067,7 +9079,7 @@ OPCODE(0x2F20) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(22) } @@ -9148,7 +9160,7 @@ OPCODE(0x2128) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(24) } @@ -9272,7 +9284,7 @@ OPCODE(0x2F28) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(24) } @@ -9353,7 +9365,7 @@ OPCODE(0x2130) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(26) } @@ -9477,7 +9489,7 @@ OPCODE(0x2F30) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(26) } @@ -9554,7 +9566,7 @@ OPCODE(0x2138) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(24) } @@ -9672,7 +9684,7 @@ OPCODE(0x2F38) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(24) } @@ -9749,7 +9761,7 @@ OPCODE(0x2139) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(28) } @@ -9867,7 +9879,7 @@ OPCODE(0x2F39) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(28) } @@ -9878,7 +9890,7 @@ OPCODE(0x203A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -9897,7 +9909,7 @@ OPCODE(0x20BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -9917,7 +9929,7 @@ OPCODE(0x20FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -9938,7 +9950,7 @@ OPCODE(0x213A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -9948,7 +9960,7 @@ OPCODE(0x213A) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(24) } @@ -9959,7 +9971,7 @@ OPCODE(0x217A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -9980,7 +9992,7 @@ OPCODE(0x21BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -10001,7 +10013,7 @@ OPCODE(0x21FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -10021,7 +10033,7 @@ OPCODE(0x23FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -10041,7 +10053,7 @@ OPCODE(0x2EFA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -10062,7 +10074,7 @@ OPCODE(0x2F3A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, res) @@ -10072,7 +10084,7 @@ OPCODE(0x2F3A) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(24) } @@ -10083,7 +10095,7 @@ OPCODE(0x203B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10102,7 +10114,7 @@ OPCODE(0x20BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10122,7 +10134,7 @@ OPCODE(0x20FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10143,7 +10155,7 @@ OPCODE(0x213B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10153,7 +10165,7 @@ OPCODE(0x213B) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(26) } @@ -10164,7 +10176,7 @@ OPCODE(0x217B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10185,7 +10197,7 @@ OPCODE(0x21BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10206,7 +10218,7 @@ OPCODE(0x21FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10226,7 +10238,7 @@ OPCODE(0x23FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10246,7 +10258,7 @@ OPCODE(0x2EFB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10267,7 +10279,7 @@ OPCODE(0x2F3B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, res) @@ -10277,7 +10289,7 @@ OPCODE(0x2F3B) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(26) } @@ -10348,7 +10360,7 @@ OPCODE(0x213C) adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; PRE_IO - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(20) } @@ -10460,7 +10472,7 @@ OPCODE(0x2F3C) adr = AREG(7) - 4; AREG(7) = adr; PRE_IO - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(20) } @@ -10541,7 +10553,7 @@ OPCODE(0x211F) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(20) } @@ -10665,7 +10677,7 @@ OPCODE(0x2F1F) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(20) } @@ -10746,7 +10758,7 @@ OPCODE(0x2127) flag_N = res >> 24; adr = AREG((Opcode >> 9) & 7) - 4; AREG((Opcode >> 9) & 7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(22) } @@ -10870,7 +10882,7 @@ OPCODE(0x2F27) flag_N = res >> 24; adr = AREG(7) - 4; AREG(7) = adr; - WRITE_LONG_F(adr, res) + WRITE_LONG_DEC_F(adr, res) POST_IO RET(22) } @@ -11005,7 +11017,7 @@ OPCODE(0x207A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_LONG_F(adr, res) @@ -11020,7 +11032,7 @@ OPCODE(0x207B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_LONG_F(adr, res) @@ -12847,7 +12859,7 @@ OPCODE(0x303A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -12866,7 +12878,7 @@ OPCODE(0x30BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -12886,7 +12898,7 @@ OPCODE(0x30FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -12907,7 +12919,7 @@ OPCODE(0x313A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -12928,7 +12940,7 @@ OPCODE(0x317A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -12949,7 +12961,7 @@ OPCODE(0x31BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -12970,7 +12982,7 @@ OPCODE(0x31FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -12990,7 +13002,7 @@ OPCODE(0x33FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -13010,7 +13022,7 @@ OPCODE(0x3EFA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -13031,7 +13043,7 @@ OPCODE(0x3F3A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -13052,7 +13064,7 @@ OPCODE(0x303B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13071,7 +13083,7 @@ OPCODE(0x30BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13091,7 +13103,7 @@ OPCODE(0x30FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13112,7 +13124,7 @@ OPCODE(0x313B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13133,7 +13145,7 @@ OPCODE(0x317B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13154,7 +13166,7 @@ OPCODE(0x31BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13175,7 +13187,7 @@ OPCODE(0x31FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13195,7 +13207,7 @@ OPCODE(0x33FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13215,7 +13227,7 @@ OPCODE(0x3EFB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13236,7 +13248,7 @@ OPCODE(0x3F3B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -13974,7 +13986,7 @@ OPCODE(0x307A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_WORD_F(adr, res) @@ -13989,7 +14001,7 @@ OPCODE(0x307B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_WORD_F(adr, res) @@ -16467,7 +16479,7 @@ OPCODE(0x44FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -16482,7 +16494,7 @@ OPCODE(0x44FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -16552,9 +16564,7 @@ OPCODE(0x46C0) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(12) @@ -16583,9 +16593,7 @@ OPCODE(0x46D0) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(16) @@ -16615,9 +16623,7 @@ OPCODE(0x46D8) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(16) @@ -16647,9 +16653,7 @@ OPCODE(0x46E0) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(18) @@ -16679,9 +16683,7 @@ OPCODE(0x46E8) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(20) @@ -16711,9 +16713,7 @@ OPCODE(0x46F0) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(22) @@ -16743,9 +16743,7 @@ OPCODE(0x46F8) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(20) @@ -16774,9 +16772,7 @@ OPCODE(0x46F9) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(24) @@ -16790,7 +16786,7 @@ OPCODE(0x46FA) if (flag_S) { - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, res) @@ -16802,13 +16798,11 @@ OPCODE(0x46FA) ASP = res; } POST_IO - CHECK_INT_TO_JUMP(24) + CHECK_INT_TO_JUMP(20) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(20) @@ -16822,7 +16816,7 @@ OPCODE(0x46FB) if (flag_S) { - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -16838,9 +16832,7 @@ OPCODE(0x46FB) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(22) @@ -16866,9 +16858,7 @@ OPCODE(0x46FC) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(16) @@ -16898,9 +16888,7 @@ OPCODE(0x46DF) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(16) @@ -16930,9 +16918,7 @@ OPCODE(0x46E7) } else { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } RET(18) @@ -17264,7 +17250,7 @@ OPCODE(0x487A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO PUSH_32_F(adr) @@ -17278,7 +17264,7 @@ OPCODE(0x487B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO PUSH_32_F(adr) @@ -18306,8 +18292,19 @@ OPCODE(0x4AD0) flag_V = 0; flag_NotZ = res; flag_N = res; +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else RET(8) +#endif } // TAS @@ -18324,8 +18321,20 @@ OPCODE(0x4AD8) flag_V = 0; flag_NotZ = res; flag_N = res; + +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else RET(8) +#endif } // TAS @@ -18342,8 +18351,20 @@ OPCODE(0x4AE0) flag_V = 0; flag_NotZ = res; flag_N = res; + +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(20) +#else RET(10) +#endif } // TAS @@ -18360,8 +18381,20 @@ OPCODE(0x4AE8) flag_V = 0; flag_NotZ = res; flag_N = res; + +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(22) +#else RET(12) +#endif } // TAS @@ -18378,8 +18411,20 @@ OPCODE(0x4AF0) flag_V = 0; flag_NotZ = res; flag_N = res; + +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(24) +#else RET(14) +#endif } // TAS @@ -18395,8 +18440,20 @@ OPCODE(0x4AF8) flag_V = 0; flag_NotZ = res; flag_N = res; + +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(22) +#else RET(12) +#endif } // TAS @@ -18412,8 +18469,20 @@ OPCODE(0x4AF9) flag_V = 0; flag_NotZ = res; flag_N = res; + +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(26) +#else RET(16) +#endif } // TAS @@ -18430,8 +18499,20 @@ OPCODE(0x4ADF) flag_V = 0; flag_NotZ = res; flag_N = res; + +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else RET(8) +#endif } // TAS @@ -18448,35 +18529,41 @@ OPCODE(0x4AE7) flag_V = 0; flag_NotZ = res; flag_N = res; + +#ifdef PICODRIVE_HACK + if (g_m68kcontext == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + POST_IO -RET(10) +#ifdef USE_CYCLONE_TIMING +RET(20) +#else +RET(8) +#endif } // ILLEGAL OPCODE(0x4AFC) { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_ILLEGAL_INSTRUCTION_EX); -RET(4) + SET_PC(execute_exception(M68K_ILLEGAL_INSTRUCTION_EX, GET_PC-2, GET_SR)); +RET(0) } // ILLEGAL A000-AFFF OPCODE(0xA000) { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_1010_EX); -RET(4) + SET_PC(execute_exception(M68K_1010_EX, GET_PC-2, GET_SR)); +RET(0) } // ILLEGAL F000-FFFF OPCODE(0xF000) { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_1111_EX); -RET(4) + SET_PC(execute_exception(M68K_1111_EX, GET_PC-2, GET_SR)); +RET(0) // 4 already taken by exc. handler } // MOVEMaR @@ -18673,7 +18760,7 @@ OPCODE(0x4CBA) s32 *psrc; FETCH_WORD(res); - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; psrc = &DREGs32(0); dst = adr; @@ -18705,7 +18792,7 @@ OPCODE(0x4CBB) s32 *psrc; FETCH_WORD(res); - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD psrc = &DREGs32(0); dst = adr; @@ -18950,7 +19037,7 @@ OPCODE(0x4CFA) u32 *psrc; FETCH_WORD(res); - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; psrc = &DREGu32(0); dst = adr; @@ -18982,7 +19069,7 @@ OPCODE(0x4CFB) u32 *psrc; FETCH_WORD(res); - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD psrc = &DREGu32(0); dst = adr; @@ -19036,7 +19123,7 @@ RET(12) // TRAP OPCODE(0x4E40) { - execute_exception(M68K_TRAP_BASE_EX + (Opcode & 0xF)); + SET_PC(execute_exception(M68K_TRAP_BASE_EX + (Opcode & 0xF), GET_PC, GET_SR)); RET(4) } @@ -19107,9 +19194,7 @@ OPCODE(0x4E60) if (!flag_S) { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } res = AREGu32((Opcode >> 0) & 7); @@ -19125,9 +19210,7 @@ OPCODE(0x4E68) if (!flag_S) { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } res = ASP; @@ -19143,9 +19226,7 @@ OPCODE(0x4E70) if (!flag_S) { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } PRE_IO @@ -19169,9 +19250,7 @@ OPCODE(0x4E72) if (!flag_S) { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } FETCH_WORD(res); @@ -19183,9 +19262,8 @@ OPCODE(0x4E72) AREG(7) = ASP; ASP = res; } - m68kcontext.execinfo |= M68K_HALTED; - m68kcontext.io_cycle_counter = 0; -RET(4) + m68kcontext.execinfo |= FM68K_HALTED; +RET0() } // RTE @@ -19196,9 +19274,7 @@ OPCODE(0x4E73) if (!flag_S) { - u32 oldPC=GET_PC; - SET_PC(oldPC-2) - execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); RET(4) } PRE_IO @@ -19213,7 +19289,7 @@ OPCODE(0x4E73) ASP = res; } POST_IO - m68kcontext.execinfo &= ~(M68K_EMULATE_GROUP_0|M68K_EMULATE_TRACE|M68K_DO_TRACE); + m68kcontext.execinfo &= ~(FM68K_EMULATE_GROUP_0|FM68K_EMULATE_TRACE|FM68K_DO_TRACE); CHECK_INT_TO_JUMP(20) RET(20) } @@ -19236,7 +19312,7 @@ RET(16) OPCODE(0x4E76) { if (flag_V & 0x80) - execute_exception(M68K_TRAPV_EX); + SET_PC(execute_exception(M68K_TRAPV_EX, GET_PC, GET_SR)); RET(4) } @@ -19266,7 +19342,7 @@ OPCODE(0x4E90) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19287,7 +19363,7 @@ OPCODE(0x4EA8) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19308,7 +19384,7 @@ OPCODE(0x4EB0) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19328,7 +19404,7 @@ OPCODE(0x4EB8) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19348,7 +19424,7 @@ OPCODE(0x4EB9) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19364,12 +19440,12 @@ OPCODE(0x4EBA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19385,12 +19461,12 @@ OPCODE(0x4EBB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19468,7 +19544,7 @@ OPCODE(0x4EFA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; SET_PC(adr) CHECK_BRANCH_EXCEPTION(adr) @@ -19481,7 +19557,7 @@ OPCODE(0x4EFB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD SET_PC(adr) CHECK_BRANCH_EXCEPTION(adr) @@ -19499,7 +19575,7 @@ OPCODE(0x4180) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } RET(10) } @@ -19517,7 +19593,7 @@ OPCODE(0x4190) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(14) @@ -19537,7 +19613,7 @@ OPCODE(0x4198) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(14) @@ -19557,7 +19633,7 @@ OPCODE(0x41A0) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(16) @@ -19577,7 +19653,7 @@ OPCODE(0x41A8) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(18) @@ -19597,7 +19673,7 @@ OPCODE(0x41B0) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(20) @@ -19616,7 +19692,7 @@ OPCODE(0x41B8) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(18) @@ -19635,7 +19711,7 @@ OPCODE(0x41B9) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(22) @@ -19647,7 +19723,7 @@ OPCODE(0x41BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, src) @@ -19655,7 +19731,7 @@ OPCODE(0x41BA) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(18) @@ -19667,7 +19743,7 @@ OPCODE(0x41BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, src) @@ -19675,7 +19751,7 @@ OPCODE(0x41BB) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(20) @@ -19692,7 +19768,7 @@ OPCODE(0x41BC) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(14) @@ -19712,7 +19788,7 @@ OPCODE(0x419F) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(14) @@ -19732,7 +19808,7 @@ OPCODE(0x41A7) if (((s32)res < 0) || (res > src)) { flag_N = res >> 8; - execute_exception(M68K_CHK_EX); + SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); } POST_IO RET(16) @@ -19806,7 +19882,7 @@ OPCODE(0x41FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; res = adr; AREG((Opcode >> 9) & 7) = res; @@ -19819,7 +19895,7 @@ OPCODE(0x41FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD res = adr; AREG((Opcode >> 9) & 7) = res; @@ -23229,7 +23305,7 @@ OPCODE(0x51C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23254,7 +23330,7 @@ OPCODE(0x52C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23285,7 +23361,7 @@ OPCODE(0x53C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23316,7 +23392,7 @@ OPCODE(0x54C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23347,7 +23423,7 @@ OPCODE(0x55C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23378,7 +23454,7 @@ OPCODE(0x56C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23409,7 +23485,7 @@ OPCODE(0x57C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23440,7 +23516,7 @@ OPCODE(0x58C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23471,7 +23547,7 @@ OPCODE(0x59C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23502,7 +23578,7 @@ OPCODE(0x5AC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23533,7 +23609,7 @@ OPCODE(0x5BC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23564,7 +23640,7 @@ OPCODE(0x5CC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23595,7 +23671,7 @@ OPCODE(0x5DC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23626,7 +23702,7 @@ OPCODE(0x5EC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23657,7 +23733,7 @@ OPCODE(0x5FC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23892,7 +23968,7 @@ OPCODE(0x5048) dst = AREGu32((Opcode >> 0) & 7); res = dst + src; AREG((Opcode >> 0) & 7) = res; -#ifdef USE_CYCLONE_TIMING_ // breaks Project-X +#ifdef USE_CYCLONE_TIMING RET(4) #else RET(8) @@ -25113,7 +25189,7 @@ OPCODE(0x6200) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25133,7 +25209,7 @@ OPCODE(0x6300) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25153,7 +25229,7 @@ OPCODE(0x6400) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25173,7 +25249,7 @@ OPCODE(0x6500) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25193,7 +25269,7 @@ OPCODE(0x6600) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25213,7 +25289,7 @@ OPCODE(0x6700) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25233,7 +25309,7 @@ OPCODE(0x6800) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25253,7 +25329,7 @@ OPCODE(0x6900) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25273,7 +25349,7 @@ OPCODE(0x6A00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25293,7 +25369,7 @@ OPCODE(0x6B00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25313,7 +25389,7 @@ OPCODE(0x6C00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25333,7 +25409,7 @@ OPCODE(0x6D00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25353,7 +25429,7 @@ OPCODE(0x6E00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25373,7 +25449,7 @@ OPCODE(0x6F00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25387,7 +25463,7 @@ RET(12) OPCODE(0x6001) { #ifdef FAMEC_CHECK_BRANCHES - u32 newPC = (u32)(PC) - BasePC; + u32 newPC = GET_PC; s8 offs=Opcode; newPC += offs; SET_PC(newPC); @@ -25407,7 +25483,7 @@ OPCODE(0x6000) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25425,7 +25501,7 @@ OPCODE(0x6101) PRE_IO - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PUSH_32_F(oldPC) #ifdef FAMEC_CHECK_BRANCHES offs = Opcode; @@ -25449,7 +25525,7 @@ OPCODE(0x6100) { u32 oldPC, newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; oldPC = newPC + 2; PUSH_32_F(oldPC) newPC += GET_SWORD; @@ -25640,7 +25716,7 @@ OPCODE(0x803A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, src) @@ -25661,7 +25737,7 @@ OPCODE(0x803B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, src) @@ -25902,7 +25978,7 @@ OPCODE(0x807A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, src) @@ -25923,7 +25999,7 @@ OPCODE(0x807B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, src) @@ -26164,7 +26240,7 @@ OPCODE(0x80BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, src) @@ -26185,7 +26261,7 @@ OPCODE(0x80BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, src) @@ -26965,7 +27041,7 @@ OPCODE(0x80C0) src = DREGu16((Opcode >> 0) & 7); if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(140) #else @@ -27013,7 +27089,7 @@ OPCODE(0x80D0) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(144) #else @@ -27062,7 +27138,7 @@ OPCODE(0x80D8) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(144) #else @@ -27111,7 +27187,7 @@ OPCODE(0x80E0) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(146) #else @@ -27160,7 +27236,7 @@ OPCODE(0x80E8) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(148) #else @@ -27209,7 +27285,7 @@ OPCODE(0x80F0) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(150) #else @@ -27257,7 +27333,7 @@ OPCODE(0x80F8) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(148) #else @@ -27305,7 +27381,7 @@ OPCODE(0x80F9) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(162) #else @@ -27348,13 +27424,13 @@ OPCODE(0x80FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(148) #else @@ -27397,13 +27473,13 @@ OPCODE(0x80FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(160) #else @@ -27449,7 +27525,7 @@ OPCODE(0x80FC) FETCH_WORD(src); if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(144) #else @@ -27498,7 +27574,7 @@ OPCODE(0x80DF) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(144) #else @@ -27547,7 +27623,7 @@ OPCODE(0x80E7) READ_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV RET(146) #else @@ -27593,9 +27669,9 @@ OPCODE(0x81C0) src = (s32)DREGs16((Opcode >> 0) & 7); if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81C0; #endif RET(10) } @@ -27607,7 +27683,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81C0; #endif RET(50) } @@ -27621,7 +27697,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81C0; #endif RET(80) } @@ -27633,7 +27709,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81C0: m68kcontext.io_cycle_counter -= 50; #endif RET(108) } @@ -27649,9 +27725,9 @@ OPCODE(0x81D0) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81D0; #endif RET(14) } @@ -27663,7 +27739,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81D0; #endif RET(54) } @@ -27677,7 +27753,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81D0; #endif RET(84) } @@ -27689,7 +27765,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81D0: m68kcontext.io_cycle_counter -= 50; #endif RET(112) } @@ -27706,9 +27782,9 @@ OPCODE(0x81D8) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81D8; #endif RET(14) } @@ -27720,7 +27796,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81D8; #endif RET(54) } @@ -27734,7 +27810,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81D8; #endif RET(84) } @@ -27746,7 +27822,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81D8: m68kcontext.io_cycle_counter -= 50; #endif RET(112) } @@ -27763,9 +27839,9 @@ OPCODE(0x81E0) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E0; #endif RET(16) } @@ -27777,7 +27853,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E0; #endif RET(56) } @@ -27791,7 +27867,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E0; #endif RET(86) } @@ -27803,7 +27879,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81E0: m68kcontext.io_cycle_counter -= 50; #endif RET(114) } @@ -27820,9 +27896,9 @@ OPCODE(0x81E8) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E8; #endif RET(18) } @@ -27834,7 +27910,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E8; #endif RET(58) } @@ -27848,7 +27924,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E8; #endif RET(88) } @@ -27860,7 +27936,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81E8: m68kcontext.io_cycle_counter -= 50; #endif RET(116) } @@ -27877,9 +27953,9 @@ OPCODE(0x81F0) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F0; #endif RET(20) } @@ -27891,7 +27967,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F0; #endif RET(60) } @@ -27905,7 +27981,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F0; #endif RET(90) } @@ -27917,7 +27993,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81F0: m68kcontext.io_cycle_counter -= 50; #endif RET(118) } @@ -27933,9 +28009,9 @@ OPCODE(0x81F8) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F8; #endif RET(18) } @@ -27947,7 +28023,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F8; #endif RET(58) } @@ -27961,7 +28037,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F8; #endif RET(88) } @@ -27973,7 +28049,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81F8: m68kcontext.io_cycle_counter -= 50; #endif RET(116) } @@ -27989,9 +28065,9 @@ OPCODE(0x81F9) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F9; #endif RET(22) } @@ -28003,7 +28079,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F9; #endif RET(62) } @@ -28017,7 +28093,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81F9; #endif RET(92) } @@ -28029,7 +28105,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81F9: m68kcontext.io_cycle_counter -= 50; #endif RET(120) } @@ -28040,15 +28116,15 @@ OPCODE(0x81FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FA; #endif RET(18) } @@ -28060,7 +28136,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FA; #endif RET(58) } @@ -28074,7 +28150,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FA; #endif RET(88) } @@ -28086,7 +28162,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81FA: m68kcontext.io_cycle_counter -= 50; #endif RET(116) } @@ -28097,15 +28173,15 @@ OPCODE(0x81FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FB; #endif RET(20) } @@ -28117,7 +28193,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FB; #endif RET(60) } @@ -28131,7 +28207,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FB; #endif RET(90) } @@ -28143,7 +28219,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81FB: m68kcontext.io_cycle_counter -= 50; #endif RET(118) } @@ -28157,9 +28233,9 @@ OPCODE(0x81FC) FETCH_SWORD(src); if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FC; #endif RET(14) } @@ -28171,7 +28247,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FC; #endif RET(54) } @@ -28185,7 +28261,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81FC; #endif RET(84) } @@ -28197,7 +28273,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81FC: m68kcontext.io_cycle_counter -= 50; #endif RET(112) } @@ -28214,9 +28290,9 @@ OPCODE(0x81DF) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81DF; #endif RET(14) } @@ -28228,7 +28304,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81DF; #endif RET(54) } @@ -28242,7 +28318,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81DF; #endif RET(84) } @@ -28254,7 +28330,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81DF: m68kcontext.io_cycle_counter -= 50; #endif RET(112) } @@ -28271,9 +28347,9 @@ OPCODE(0x81E7) READSX_WORD_F(adr, src) if (src == 0) { - execute_exception(M68K_ZERO_DIVIDE_EX); + SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E7; #endif RET(16) } @@ -28285,7 +28361,7 @@ goto end; res = 0; DREGu32((Opcode >> 9) & 7) = res; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E7; #endif RET(56) } @@ -28299,7 +28375,7 @@ goto end; { flag_V = M68K_SR_V; #ifdef USE_CYCLONE_TIMING_DIV -goto end; +goto end81E7; #endif RET(86) } @@ -28311,7 +28387,7 @@ goto end; DREGu32((Opcode >> 9) & 7) = res; } #ifdef USE_CYCLONE_TIMING_DIV -end: m68kcontext.io_cycle_counter -= 50; +end81E7: m68kcontext.io_cycle_counter -= 50; #endif RET(114) } @@ -28333,6 +28409,7 @@ RET(4) } // SUBaD +#if 0 OPCODE(0x9008) { u32 adr, res; @@ -28352,6 +28429,7 @@ OPCODE(0x9008) */ RET(4) } +#endif // SUBaD OPCODE(0x9010) @@ -28496,7 +28574,7 @@ OPCODE(0x903A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, src) @@ -28516,7 +28594,7 @@ OPCODE(0x903B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, src) @@ -28761,7 +28839,7 @@ OPCODE(0x907A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, src) @@ -28781,7 +28859,7 @@ OPCODE(0x907B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, src) @@ -29035,7 +29113,7 @@ OPCODE(0x90BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, src) @@ -29056,7 +29134,7 @@ OPCODE(0x90BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, src) @@ -30026,7 +30104,11 @@ OPCODE(0x90D0) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(12) +#else RET(10) +#endif } // SUBA @@ -30043,7 +30125,11 @@ OPCODE(0x90D8) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(12) +#else RET(10) +#endif } // SUBA @@ -30060,7 +30146,11 @@ OPCODE(0x90E0) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(14) +#else RET(12) +#endif } // SUBA @@ -30077,7 +30167,11 @@ OPCODE(0x90E8) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else RET(14) +#endif } // SUBA @@ -30094,7 +30188,11 @@ OPCODE(0x90F0) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else RET(16) +#endif } // SUBA @@ -30110,7 +30208,11 @@ OPCODE(0x90F8) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else RET(14) +#endif } // SUBA @@ -30126,7 +30228,11 @@ OPCODE(0x90F9) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(20) +#else RET(18) +#endif } // SUBA @@ -30135,7 +30241,7 @@ OPCODE(0x90FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_WORD_F(adr, src) @@ -30143,7 +30249,11 @@ OPCODE(0x90FA) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else RET(14) +#endif } // SUBA @@ -30152,7 +30262,7 @@ OPCODE(0x90FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_WORD_F(adr, src) @@ -30160,7 +30270,11 @@ OPCODE(0x90FB) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else RET(16) +#endif } // SUBA @@ -30190,7 +30304,11 @@ OPCODE(0x90DF) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(12) +#else RET(10) +#endif } // SUBA @@ -30207,7 +30325,11 @@ OPCODE(0x90E7) res = dst - src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(14) +#else RET(12) +#endif } // SUBA @@ -30366,7 +30488,7 @@ OPCODE(0x91FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_LONG_F(adr, src) @@ -30383,7 +30505,7 @@ OPCODE(0x91FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_LONG_F(adr, src) @@ -30461,6 +30583,7 @@ RET(4) } // CMP +#if 0 OPCODE(0xB008) { u32 adr, res; @@ -30479,6 +30602,7 @@ OPCODE(0xB008) */ RET(4) } +#endif // CMP OPCODE(0xB010) @@ -30616,7 +30740,7 @@ OPCODE(0xB03A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, src) @@ -30635,7 +30759,7 @@ OPCODE(0xB03B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, src) @@ -30867,7 +30991,7 @@ OPCODE(0xB07A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, src) @@ -30886,7 +31010,7 @@ OPCODE(0xB07B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, src) @@ -31127,7 +31251,7 @@ OPCODE(0xB0BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, src) @@ -31147,7 +31271,7 @@ OPCODE(0xB0BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, src) @@ -32257,7 +32381,7 @@ OPCODE(0xB0FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_WORD_F(adr, src) @@ -32277,7 +32401,7 @@ OPCODE(0xB0FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_WORD_F(adr, src) @@ -32522,7 +32646,7 @@ OPCODE(0xB1FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_LONG_F(adr, src) @@ -32542,7 +32666,7 @@ OPCODE(0xB1FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_LONG_F(adr, src) @@ -32779,7 +32903,7 @@ OPCODE(0xC03A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, src) @@ -32800,7 +32924,7 @@ OPCODE(0xC03B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, src) @@ -33041,7 +33165,7 @@ OPCODE(0xC07A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, src) @@ -33062,7 +33186,7 @@ OPCODE(0xC07B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, src) @@ -33303,7 +33427,7 @@ OPCODE(0xC0BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, src) @@ -33324,7 +33448,7 @@ OPCODE(0xC0BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, src) @@ -34286,7 +34410,7 @@ OPCODE(0xC0FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, src) @@ -34310,7 +34434,7 @@ OPCODE(0xC0FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, src) @@ -34587,7 +34711,7 @@ OPCODE(0xC1FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_WORD_F(adr, src) @@ -34611,7 +34735,7 @@ OPCODE(0xC1FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_WORD_F(adr, src) @@ -34756,6 +34880,7 @@ RET(4) } // ADDaD +#if 0 OPCODE(0xD008) { u32 adr, res; @@ -34775,6 +34900,7 @@ OPCODE(0xD008) */ RET(4) } +#endif // ADDaD OPCODE(0xD010) @@ -34919,7 +35045,7 @@ OPCODE(0xD03A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_BYTE_F(adr, src) @@ -34939,7 +35065,7 @@ OPCODE(0xD03B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_BYTE_F(adr, src) @@ -35184,7 +35310,7 @@ OPCODE(0xD07A) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_WORD_F(adr, src) @@ -35204,7 +35330,7 @@ OPCODE(0xD07B) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, src) @@ -35458,7 +35584,7 @@ OPCODE(0xD0BA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READ_LONG_F(adr, src) @@ -35479,7 +35605,7 @@ OPCODE(0xD0BB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_LONG_F(adr, src) @@ -36449,7 +36575,11 @@ OPCODE(0xD0D0) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(12) +#else RET(10) +#endif } // ADDA @@ -36466,7 +36596,11 @@ OPCODE(0xD0D8) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(12) +#else RET(10) +#endif } // ADDA @@ -36483,7 +36617,11 @@ OPCODE(0xD0E0) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(14) +#else RET(12) +#endif } // ADDA @@ -36500,7 +36638,11 @@ OPCODE(0xD0E8) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else RET(14) +#endif } // ADDA @@ -36517,7 +36659,11 @@ OPCODE(0xD0F0) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else RET(16) +#endif } // ADDA @@ -36533,7 +36679,11 @@ OPCODE(0xD0F8) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else RET(14) +#endif } // ADDA @@ -36549,7 +36699,11 @@ OPCODE(0xD0F9) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(20) +#else RET(18) +#endif } // ADDA @@ -36558,7 +36712,7 @@ OPCODE(0xD0FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_WORD_F(adr, src) @@ -36566,7 +36720,11 @@ OPCODE(0xD0FA) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else RET(14) +#endif } // ADDA @@ -36575,7 +36733,7 @@ OPCODE(0xD0FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_WORD_F(adr, src) @@ -36583,7 +36741,11 @@ OPCODE(0xD0FB) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else RET(16) +#endif } // ADDA @@ -36613,7 +36775,11 @@ OPCODE(0xD0DF) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(12) +#else RET(10) +#endif } // ADDA @@ -36630,7 +36796,11 @@ OPCODE(0xD0E7) res = dst + src; AREG((Opcode >> 9) & 7) = res; POST_IO +#ifdef USE_CYCLONE_TIMING +RET(14) +#else RET(12) +#endif } // ADDA @@ -36789,7 +36959,7 @@ OPCODE(0xD1FA) u32 adr, res; u32 src, dst; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO READSX_LONG_F(adr, src) @@ -36806,7 +36976,7 @@ OPCODE(0xD1FB) u32 adr, res; u32 src, dst; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READSX_LONG_F(adr, src) @@ -39790,3 +39960,98 @@ OPCODE(0xE7E7) RET(14) } +#ifdef PICODRIVE_HACK +#if 0 +#define UPDATE_IDLE_COUNT { \ + extern int idle_hit_counter; \ + idle_hit_counter++; \ +} +#else +#define UPDATE_IDLE_COUNT +#endif + +// BRA +OPCODE(0x6001_idle) +{ +#ifdef FAMEC_CHECK_BRANCHES + u32 newPC = GET_PC; + s8 offs=Opcode; + newPC += offs; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(offs) +#else + PC += ((s8)(Opcode & 0xFE)) >> 1; +#endif + UPDATE_IDLE_COUNT +RET0() +} + +// BCC +OPCODE(0x6601_idle) +{ + if (flag_NotZ) + { + UPDATE_IDLE_COUNT + PC += ((s8)(Opcode & 0xFE)) >> 1; + //if (idle_hit) + RET0() + } +RET(8) +} + +OPCODE(0x6701_idle) +{ + if (!flag_NotZ) + { + UPDATE_IDLE_COUNT + PC += ((s8)(Opcode & 0xFE)) >> 1; + //if (idle_hit) + RET0() + } +RET(8) +} + + +extern int SekIsIdleReady(void); +extern int SekIsIdleCode(unsigned short *dst, int bytes); +extern int SekRegisterIdlePatch(unsigned int pc, int oldop, int newop, void *ctx); + +OPCODE(idle_detector_bcc8) +{ + int frame_count, cond_true, bytes, ret, newop; + u16 *dest_pc; + + dest_pc = PC + (((s8)(Opcode & 0xFE)) >> 1); + + if (!SekIsIdleReady()) + goto end; + + bytes = 0 - (s8)(Opcode & 0xFE) - 2; + ret = SekIsIdleCode(dest_pc, bytes); + newop = (Opcode & 0xfe) | 0x7100; + if (!ret) newop |= 0x200; + if ( Opcode & 0x0100) newop |= 0x400; // beq + if (!(Opcode & 0x0f00)) newop |= 0xc00; // bra + + ret = SekRegisterIdlePatch(GET_PC - 2, Opcode, newop, &m68kcontext); + switch (ret) + { + case 0: PC[-1] = newop; break; + case 1: break; + case 2: JumpTable[Opcode] = (Opcode & 0x0f00) ? + ((Opcode & 0x0100) ? CAST_OP(0x6701) : CAST_OP(0x6601)) : + CAST_OP(0x6001); break; + } + +end: + if ((Opcode & 0xff00) == 0x6000) cond_true = 1; + else cond_true = (Opcode & 0x0100) ? !flag_NotZ : flag_NotZ; // beq? + if (cond_true) + { + PC = dest_pc; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +#endif // PICODRIVE_HACK