X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Ffame%2Ffamec_opcodes.h;h=0d6700400b7913d39ca9ef63490ac0ad9af1e3f9;hb=5c5d89adbb0cd269828496350d49ddc8e7be589f;hp=03a64de5f3bd3941d93a6f6303cb3996ccba540e;hpb=b5e5172d049a83251874fb33e65a53c9654dc0bc;p=picodrive.git diff --git a/cpu/fame/famec_opcodes.h b/cpu/fame/famec_opcodes.h index 03a64de..0d67004 100644 --- a/cpu/fame/famec_opcodes.h +++ b/cpu/fame/famec_opcodes.h @@ -1,4 +1,10 @@ +#ifdef PICODRIVE_HACK +#define NOT_POLLING g_m68kcontext->not_polling = 1; +#else +#define NOT_POLLING +#endif + // ORI OPCODE(0x0000) { @@ -3826,7 +3832,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) @@ -3843,7 +3849,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) @@ -4572,7 +4578,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) @@ -4589,7 +4595,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) @@ -7116,7 +7122,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) @@ -7135,7 +7141,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) @@ -7155,7 +7161,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) @@ -7176,7 +7182,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) @@ -7197,7 +7203,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) @@ -7218,7 +7224,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) @@ -7239,7 +7245,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) @@ -7259,7 +7265,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) @@ -7279,7 +7285,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) @@ -7300,7 +7306,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) @@ -7321,7 +7327,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) @@ -7340,7 +7346,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) @@ -7360,7 +7366,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) @@ -7381,7 +7387,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) @@ -7402,7 +7408,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) @@ -7423,7 +7429,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) @@ -7444,7 +7450,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) @@ -7464,7 +7470,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) @@ -7484,7 +7490,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) @@ -7505,7 +7511,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) @@ -9890,7 +9896,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) @@ -9909,7 +9915,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) @@ -9929,7 +9935,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) @@ -9950,7 +9956,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) @@ -9971,7 +9977,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) @@ -9992,7 +9998,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) @@ -10013,7 +10019,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) @@ -10033,7 +10039,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) @@ -10053,7 +10059,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) @@ -10074,7 +10080,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) @@ -10095,7 +10101,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) @@ -10114,7 +10120,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) @@ -10134,7 +10140,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) @@ -10155,7 +10161,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) @@ -10176,7 +10182,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) @@ -10197,7 +10203,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) @@ -10218,7 +10224,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) @@ -10238,7 +10244,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) @@ -10258,7 +10264,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) @@ -10279,7 +10285,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) @@ -11017,7 +11023,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) @@ -11032,7 +11038,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) @@ -12859,7 +12865,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) @@ -12878,7 +12884,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) @@ -12898,7 +12904,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) @@ -12919,7 +12925,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) @@ -12940,7 +12946,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) @@ -12961,7 +12967,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) @@ -12982,7 +12988,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) @@ -13002,7 +13008,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) @@ -13022,7 +13028,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) @@ -13043,7 +13049,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) @@ -13064,7 +13070,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) @@ -13083,7 +13089,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) @@ -13103,7 +13109,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) @@ -13124,7 +13130,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) @@ -13145,7 +13151,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) @@ -13166,7 +13172,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) @@ -13187,7 +13193,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) @@ -13207,7 +13213,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) @@ -13227,7 +13233,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) @@ -13248,7 +13254,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) @@ -13986,7 +13992,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) @@ -14001,7 +14007,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) @@ -16479,7 +16485,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) @@ -16494,7 +16500,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) @@ -16786,7 +16792,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) @@ -16816,7 +16822,7 @@ OPCODE(0x46FB) if (flag_S) { - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO READ_WORD_F(adr, res) @@ -17250,7 +17256,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) @@ -17264,7 +17270,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) @@ -18760,7 +18766,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; @@ -18792,7 +18798,7 @@ OPCODE(0x4CBB) s32 *psrc; FETCH_WORD(res); - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD psrc = &DREGs32(0); dst = adr; @@ -19037,7 +19043,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; @@ -19069,7 +19075,7 @@ OPCODE(0x4CFB) u32 *psrc; FETCH_WORD(res); - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD psrc = &DREGu32(0); dst = adr; @@ -19263,8 +19269,7 @@ OPCODE(0x4E72) ASP = res; } m68kcontext.execinfo |= FM68K_HALTED; - m68kcontext.io_cycle_counter = 0; -RET(4) +RET0() } // RTE @@ -19343,7 +19348,7 @@ OPCODE(0x4E90) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19364,7 +19369,7 @@ OPCODE(0x4EA8) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19385,7 +19390,7 @@ OPCODE(0x4EB0) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19405,7 +19410,7 @@ OPCODE(0x4EB8) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19425,7 +19430,7 @@ OPCODE(0x4EB9) { u32 oldPC; - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PRE_IO PUSH_32_F(oldPC) } @@ -19441,12 +19446,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) } @@ -19462,12 +19467,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) } @@ -19545,7 +19550,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) @@ -19558,7 +19563,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) @@ -19568,12 +19573,11 @@ RET(14) // CHK OPCODE(0x4180) { - u32 adr, res; - u32 src, dst; + s32 src, res; - src = DREGu16((Opcode >> 0) & 7); - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + src = DREGs16((Opcode >> 0) & 7); + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19584,14 +19588,14 @@ RET(10) // CHK OPCODE(0x4190) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; adr = AREG((Opcode >> 0) & 7); PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19603,15 +19607,15 @@ RET(14) // CHK OPCODE(0x4198) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; adr = AREG((Opcode >> 0) & 7); AREG((Opcode >> 0) & 7) += 2; PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19623,15 +19627,15 @@ RET(14) // CHK OPCODE(0x41A0) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; adr = AREG((Opcode >> 0) & 7) - 2; AREG((Opcode >> 0) & 7) = adr; PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19643,15 +19647,15 @@ RET(16) // CHK OPCODE(0x41A8) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; FETCH_SWORD(adr); adr += AREG((Opcode >> 0) & 7); PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19663,15 +19667,15 @@ RET(18) // CHK OPCODE(0x41B0) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; adr = AREG((Opcode >> 0) & 7); DECODE_EXT_WORD PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19683,14 +19687,14 @@ RET(20) // CHK OPCODE(0x41B8) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; FETCH_SWORD(adr); PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19702,14 +19706,14 @@ RET(18) // CHK OPCODE(0x41B9) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; FETCH_LONG(adr); PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19721,15 +19725,15 @@ RET(22) // CHK OPCODE(0x41BA) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; - adr = GET_SWORD + ((u32)(PC) - BasePC); + adr = GET_SWORD + GET_PC; PC++; PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19741,15 +19745,15 @@ RET(18) // CHK OPCODE(0x41BB) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; - adr = (u32)(PC) - BasePC; + adr = GET_PC; DECODE_EXT_WORD PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19761,12 +19765,12 @@ RET(20) // CHK OPCODE(0x41BC) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; - FETCH_WORD(src); - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + FETCH_SWORD(src); + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19778,15 +19782,15 @@ RET(14) // CHK OPCODE(0x419F) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; adr = AREG(7); AREG(7) += 2; PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19798,15 +19802,15 @@ RET(14) // CHK OPCODE(0x41A7) { - u32 adr, res; - u32 src, dst; + s32 src, res; + u32 adr; adr = AREG(7) - 2; AREG(7) = adr; PRE_IO - READ_WORD_F(adr, src) - res = DREGu16((Opcode >> 9) & 7); - if (((s32)res < 0) || (res > src)) + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) { flag_N = res >> 8; SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR)); @@ -19883,7 +19887,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; @@ -19896,7 +19900,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; @@ -23299,6 +23303,8 @@ OPCODE(0x51C8) u32 adr, res; u32 src, dst; + NOT_POLLING + res = DREGu16((Opcode >> 0) & 7); res--; DREGu16((Opcode >> 0) & 7) = res; @@ -23306,7 +23312,7 @@ OPCODE(0x51C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23322,6 +23328,8 @@ OPCODE(0x52C8) u32 adr, res; u32 src, dst; + NOT_POLLING + if ((!flag_NotZ) || (flag_C & 0x100)) { res = DREGu16((Opcode >> 0) & 7); @@ -23331,7 +23339,7 @@ OPCODE(0x52C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23353,6 +23361,8 @@ OPCODE(0x53C8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (flag_NotZ && (!(flag_C & 0x100))) { res = DREGu16((Opcode >> 0) & 7); @@ -23362,7 +23372,7 @@ OPCODE(0x53C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23384,6 +23394,8 @@ OPCODE(0x54C8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (flag_C & 0x100) { res = DREGu16((Opcode >> 0) & 7); @@ -23393,7 +23405,7 @@ OPCODE(0x54C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23415,6 +23427,8 @@ OPCODE(0x55C8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (!(flag_C & 0x100)) { res = DREGu16((Opcode >> 0) & 7); @@ -23424,7 +23438,7 @@ OPCODE(0x55C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23446,6 +23460,8 @@ OPCODE(0x56C8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (!flag_NotZ) { res = DREGu16((Opcode >> 0) & 7); @@ -23455,7 +23471,7 @@ OPCODE(0x56C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23477,6 +23493,8 @@ OPCODE(0x57C8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (flag_NotZ) { res = DREGu16((Opcode >> 0) & 7); @@ -23486,7 +23504,7 @@ OPCODE(0x57C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23508,6 +23526,8 @@ OPCODE(0x58C8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (flag_V & 0x80) { res = DREGu16((Opcode >> 0) & 7); @@ -23517,7 +23537,7 @@ OPCODE(0x58C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23539,6 +23559,8 @@ OPCODE(0x59C8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (!(flag_V & 0x80)) { res = DREGu16((Opcode >> 0) & 7); @@ -23548,7 +23570,7 @@ OPCODE(0x59C8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23570,6 +23592,8 @@ OPCODE(0x5AC8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (flag_N & 0x80) { res = DREGu16((Opcode >> 0) & 7); @@ -23579,7 +23603,7 @@ OPCODE(0x5AC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23601,6 +23625,8 @@ OPCODE(0x5BC8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (!(flag_N & 0x80)) { res = DREGu16((Opcode >> 0) & 7); @@ -23610,7 +23636,7 @@ OPCODE(0x5BC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23632,6 +23658,8 @@ OPCODE(0x5CC8) u32 adr, res; u32 src, dst; + NOT_POLLING + if ((flag_N ^ flag_V) & 0x80) { res = DREGu16((Opcode >> 0) & 7); @@ -23641,7 +23669,7 @@ OPCODE(0x5CC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23663,6 +23691,8 @@ OPCODE(0x5DC8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (!((flag_N ^ flag_V) & 0x80)) { res = DREGu16((Opcode >> 0) & 7); @@ -23672,7 +23702,7 @@ OPCODE(0x5DC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23694,6 +23724,8 @@ OPCODE(0x5EC8) u32 adr, res; u32 src, dst; + NOT_POLLING + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) { res = DREGu16((Opcode >> 0) & 7); @@ -23703,7 +23735,7 @@ OPCODE(0x5EC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -23725,6 +23757,8 @@ OPCODE(0x5FC8) u32 adr, res; u32 src, dst; + NOT_POLLING + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) { res = DREGu16((Opcode >> 0) & 7); @@ -23734,7 +23768,7 @@ OPCODE(0x5FC8) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25190,7 +25224,7 @@ OPCODE(0x6200) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25210,7 +25244,7 @@ OPCODE(0x6300) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25230,7 +25264,7 @@ OPCODE(0x6400) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25250,7 +25284,7 @@ OPCODE(0x6500) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25270,7 +25304,7 @@ OPCODE(0x6600) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25290,7 +25324,7 @@ OPCODE(0x6700) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25310,7 +25344,7 @@ OPCODE(0x6800) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25330,7 +25364,7 @@ OPCODE(0x6900) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25350,7 +25384,7 @@ OPCODE(0x6A00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25370,7 +25404,7 @@ OPCODE(0x6B00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25390,7 +25424,7 @@ OPCODE(0x6C00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25410,7 +25444,7 @@ OPCODE(0x6D00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25430,7 +25464,7 @@ OPCODE(0x6E00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25450,7 +25484,7 @@ OPCODE(0x6F00) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25464,7 +25498,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); @@ -25484,7 +25518,7 @@ OPCODE(0x6000) { u32 newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; newPC += GET_SWORD; SET_PC(newPC); CHECK_BRANCH_EXCEPTION(newPC) @@ -25502,7 +25536,7 @@ OPCODE(0x6101) PRE_IO - oldPC = (u32)(PC) - BasePC; + oldPC = GET_PC; PUSH_32_F(oldPC) #ifdef FAMEC_CHECK_BRANCHES offs = Opcode; @@ -25526,7 +25560,7 @@ OPCODE(0x6100) { u32 oldPC, newPC; - newPC = (u32)(PC) - BasePC; + newPC = GET_PC; oldPC = newPC + 2; PUSH_32_F(oldPC) newPC += GET_SWORD; @@ -25717,7 +25751,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) @@ -25738,7 +25772,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) @@ -25979,7 +26013,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) @@ -26000,7 +26034,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) @@ -26241,7 +26275,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) @@ -26262,7 +26296,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) @@ -27425,7 +27459,7 @@ 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) @@ -27474,7 +27508,7 @@ 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) @@ -28117,7 +28151,7 @@ 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) @@ -28174,7 +28208,7 @@ 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) @@ -28575,7 +28609,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) @@ -28595,7 +28629,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) @@ -28840,7 +28874,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) @@ -28860,7 +28894,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) @@ -29114,7 +29148,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) @@ -29135,7 +29169,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) @@ -30242,7 +30276,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) @@ -30263,7 +30297,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) @@ -30489,7 +30523,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) @@ -30506,7 +30540,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) @@ -30741,7 +30775,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) @@ -30760,7 +30794,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) @@ -30992,7 +31026,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) @@ -31011,7 +31045,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) @@ -31252,7 +31286,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) @@ -31272,7 +31306,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) @@ -32382,7 +32416,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) @@ -32402,7 +32436,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) @@ -32647,7 +32681,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) @@ -32667,7 +32701,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) @@ -32904,7 +32938,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) @@ -32925,7 +32959,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) @@ -33166,7 +33200,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) @@ -33187,7 +33221,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) @@ -33428,7 +33462,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) @@ -33449,7 +33483,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) @@ -34411,7 +34445,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) @@ -34435,7 +34469,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) @@ -34712,7 +34746,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) @@ -34736,7 +34770,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) @@ -35046,7 +35080,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) @@ -35066,7 +35100,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) @@ -35311,7 +35345,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) @@ -35331,7 +35365,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) @@ -35585,7 +35619,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) @@ -35606,7 +35640,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) @@ -36713,7 +36747,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) @@ -36734,7 +36768,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) @@ -36960,7 +36994,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) @@ -36977,7 +37011,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) @@ -39961,3 +39995,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