notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
drc: revive x86 dynarec, support x86-64
[picodrive.git]
/
cpu
/
fame
/
famec_opcodes.h
diff --git
a/cpu/fame/famec_opcodes.h
b/cpu/fame/famec_opcodes.h
index
c690b45
..
e069e9e
100644
(file)
--- a/
cpu/fame/famec_opcodes.h
+++ b/
cpu/fame/famec_opcodes.h
@@
-1,6
+1,6
@@
#ifdef PICODRIVE_HACK
#ifdef PICODRIVE_HACK
-#define NOT_POLLING
g_m68kcontext
->not_polling = 1;
+#define NOT_POLLING
ctx
->not_polling = 1;
#else
#define NOT_POLLING
#endif
#else
#define NOT_POLLING
#endif
@@
-644,7
+644,7
@@
OPCODE(0x007C)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
#ifdef USE_CYCLONE_TIMING
RET(0)
#else
#ifdef USE_CYCLONE_TIMING
RET(0)
#else
@@
-1302,7
+1302,7
@@
OPCODE(0x027C)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(20)
RET(4)
}
RET(20)
@@
-1952,7
+1952,7
@@
OPCODE(0x0A7C)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(0)
}
RET(20)
RET(0)
}
RET(20)
@@
-5484,8
+5484,8
@@
OPCODE(0x1008)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5504,8
+5504,8
@@
OPCODE(0x1088)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5527,8
+5527,8
@@
OPCODE(0x10C8)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5551,8
+5551,8
@@
OPCODE(0x1108)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5575,8
+5575,8
@@
OPCODE(0x1148)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5599,8
+5599,8
@@
OPCODE(0x1188)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5623,8
+5623,8
@@
OPCODE(0x11C8)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5646,8
+5646,8
@@
OPCODE(0x13C8)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5669,8
+5669,8
@@
OPCODE(0x1EC8)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-5693,8
+5693,8
@@
OPCODE(0x1F08)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
flag_C = 0;
/*
goto famec_Exec_End;
flag_C = 0;
@@
-16570,7
+16570,7
@@
OPCODE(0x46C0)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(12)
RET(4)
}
RET(12)
@@
-16599,7
+16599,7
@@
OPCODE(0x46D0)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(16)
RET(4)
}
RET(16)
@@
-16629,7
+16629,7
@@
OPCODE(0x46D8)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(16)
RET(4)
}
RET(16)
@@
-16659,7
+16659,7
@@
OPCODE(0x46E0)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(18)
RET(4)
}
RET(18)
@@
-16689,7
+16689,7
@@
OPCODE(0x46E8)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(20)
RET(4)
}
RET(20)
@@
-16719,7
+16719,7
@@
OPCODE(0x46F0)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(22)
RET(4)
}
RET(22)
@@
-16749,7
+16749,7
@@
OPCODE(0x46F8)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(20)
RET(4)
}
RET(20)
@@
-16778,7
+16778,7
@@
OPCODE(0x46F9)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(24)
RET(4)
}
RET(24)
@@
-16808,7
+16808,7
@@
OPCODE(0x46FA)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(20)
RET(4)
}
RET(20)
@@
-16838,7
+16838,7
@@
OPCODE(0x46FB)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(22)
RET(4)
}
RET(22)
@@
-16864,7
+16864,7
@@
OPCODE(0x46FC)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(16)
RET(4)
}
RET(16)
@@
-16894,7
+16894,7
@@
OPCODE(0x46DF)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(16)
RET(4)
}
RET(16)
@@
-16924,7
+16924,7
@@
OPCODE(0x46E7)
}
else
{
}
else
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(18)
RET(4)
}
RET(18)
@@
-16936,18
+16936,20
@@
OPCODE(0x4800)
u32 adr, res;
u32 src, dst;
u32 adr, res;
u32 src, dst;
-
res
= DREGu8((Opcode >> 0) & 7);
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+
dst
= DREGu8((Opcode >> 0) & 7);
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- DREGu8((Opcode >> 0) & 7) = res;
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ DREGu8((Opcode >> 0) & 7) = res;
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
RET(6)
}
flag_N = res;
RET(6)
}
@@
-16960,18
+16962,20
@@
OPCODE(0x4810)
adr = AREG((Opcode >> 0) & 7);
PRE_IO
adr = AREG((Opcode >> 0) & 7);
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(12)
flag_N = res;
POST_IO
RET(12)
@@
-16986,18
+16990,20
@@
OPCODE(0x4818)
adr = AREG((Opcode >> 0) & 7);
AREG((Opcode >> 0) & 7) += 1;
PRE_IO
adr = AREG((Opcode >> 0) & 7);
AREG((Opcode >> 0) & 7) += 1;
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(12)
flag_N = res;
POST_IO
RET(12)
@@
-17012,18
+17018,20
@@
OPCODE(0x4820)
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
PRE_IO
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(14)
flag_N = res;
POST_IO
RET(14)
@@
-17038,18
+17046,20
@@
OPCODE(0x4828)
FETCH_SWORD(adr);
adr += AREG((Opcode >> 0) & 7);
PRE_IO
FETCH_SWORD(adr);
adr += AREG((Opcode >> 0) & 7);
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(16)
flag_N = res;
POST_IO
RET(16)
@@
-17064,18
+17074,20
@@
OPCODE(0x4830)
adr = AREG((Opcode >> 0) & 7);
DECODE_EXT_WORD
PRE_IO
adr = AREG((Opcode >> 0) & 7);
DECODE_EXT_WORD
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(18)
flag_N = res;
POST_IO
RET(18)
@@
-17089,18
+17101,20
@@
OPCODE(0x4838)
FETCH_SWORD(adr);
PRE_IO
FETCH_SWORD(adr);
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(16)
flag_N = res;
POST_IO
RET(16)
@@
-17114,18
+17128,20
@@
OPCODE(0x4839)
FETCH_LONG(adr);
PRE_IO
FETCH_LONG(adr);
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(20)
flag_N = res;
POST_IO
RET(20)
@@
-17140,18
+17156,20
@@
OPCODE(0x481F)
adr = AREG(7);
AREG(7) += 2;
PRE_IO
adr = AREG(7);
AREG(7) += 2;
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(12)
flag_N = res;
POST_IO
RET(12)
@@
-17166,18
+17184,20
@@
OPCODE(0x4827)
adr = AREG(7) - 2;
AREG(7) = adr;
PRE_IO
adr = AREG(7) - 2;
AREG(7) = adr;
PRE_IO
- READ_BYTE_F(adr,
res
)
- res =
0x9a - res
- ((flag_X >> M68K_SR_X_SFT) & 1);
+ READ_BYTE_F(adr,
dst
)
+ res =
-dst
- ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res != 0
x9a
)
+ if (res != 0)
{
{
- if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
- res &= 0xFF;
- WRITE_BYTE_F(adr, res)
+ flag_V = res;
+ if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
+ res = (res + 0x9a) & 0xFF;
+ WRITE_BYTE_F(adr, res)
+ flag_V &= ~res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
- else flag_X = flag_C = 0;
+ else flag_
V = flag_
X = flag_C = 0;
flag_N = res;
POST_IO
RET(14)
flag_N = res;
POST_IO
RET(14)
@@
-17317,7
+17337,7
@@
OPCODE(0x4890)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
@@
-17349,7
+17369,7
@@
OPCODE(0x48A0)
} while (res >>= 1);
AREG((Opcode >> 0) & 7) = adr;
POST_IO
} while (res >>= 1);
AREG((Opcode >> 0) & 7) = adr;
POST_IO
-
m68kcontext.
io_cycle_counter -= (dst - adr) * 2;
+
ctx->
io_cycle_counter -= (dst - adr) * 2;
RET(8)
}
RET(8)
}
@@
-17377,7
+17397,7
@@
OPCODE(0x48A8)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
@@
-17409,7
+17429,7
@@
OPCODE(0x48B0)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
@@
-17440,7
+17460,7
@@
OPCODE(0x48B8)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
@@
-17471,7
+17491,7
@@
OPCODE(0x48B9)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
@@
-17503,7
+17523,7
@@
OPCODE(0x48A7)
} while (res >>= 1);
AREG(7) = adr;
POST_IO
} while (res >>= 1);
AREG(7) = adr;
POST_IO
-
m68kcontext.
io_cycle_counter -= (dst - adr) * 2;
+
ctx->
io_cycle_counter -= (dst - adr) * 2;
RET(8)
}
RET(8)
}
@@
-17530,7
+17550,7
@@
OPCODE(0x48D0)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
@@
-17562,7
+17582,7
@@
OPCODE(0x48E0)
} while (res >>= 1);
AREG((Opcode >> 0) & 7) = adr;
POST_IO
} while (res >>= 1);
AREG((Opcode >> 0) & 7) = adr;
POST_IO
-
m68kcontext.
io_cycle_counter -= (dst - adr) * 2;
+
ctx->
io_cycle_counter -= (dst - adr) * 2;
RET(8)
}
RET(8)
}
@@
-17590,7
+17610,7
@@
OPCODE(0x48E8)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
@@
-17622,7
+17642,7
@@
OPCODE(0x48F0)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
@@
-17653,7
+17673,7
@@
OPCODE(0x48F8)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
@@
-17684,7
+17704,7
@@
OPCODE(0x48F9)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
@@
-17716,7
+17736,7
@@
OPCODE(0x48E7)
} while (res >>= 1);
AREG(7) = adr;
POST_IO
} while (res >>= 1);
AREG(7) = adr;
POST_IO
-
m68kcontext.
io_cycle_counter -= (dst - adr) * 2;
+
ctx->
io_cycle_counter -= (dst - adr) * 2;
RET(8)
}
RET(8)
}
@@
-18299,7
+18319,7
@@
OPCODE(0x4AD0)
flag_NotZ = res;
flag_N = res;
#ifdef PICODRIVE_HACK
flag_NotZ = res;
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18329,7
+18349,7
@@
OPCODE(0x4AD8)
flag_N = res;
#ifdef PICODRIVE_HACK
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18359,7
+18379,7
@@
OPCODE(0x4AE0)
flag_N = res;
#ifdef PICODRIVE_HACK
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18389,7
+18409,7
@@
OPCODE(0x4AE8)
flag_N = res;
#ifdef PICODRIVE_HACK
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18419,7
+18439,7
@@
OPCODE(0x4AF0)
flag_N = res;
#ifdef PICODRIVE_HACK
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18448,7
+18468,7
@@
OPCODE(0x4AF8)
flag_N = res;
#ifdef PICODRIVE_HACK
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18477,7
+18497,7
@@
OPCODE(0x4AF9)
flag_N = res;
#ifdef PICODRIVE_HACK
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18507,7
+18527,7
@@
OPCODE(0x4ADF)
flag_N = res;
#ifdef PICODRIVE_HACK
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18537,7
+18557,7
@@
OPCODE(0x4AE7)
flag_N = res;
#ifdef PICODRIVE_HACK
flag_N = res;
#ifdef PICODRIVE_HACK
- if (
g_m68kcontext
== &PicoCpuFS68k) {
+ if (
ctx
== &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
@@
-18554,21
+18574,25
@@
RET(8)
// ILLEGAL
OPCODE(0x4AFC)
{
// ILLEGAL
OPCODE(0x4AFC)
{
- SET_PC(execute_exception(M68K_ILLEGAL_INSTRUCTION_EX, GET_PC-2, GET_SR));
+#ifdef PICODRIVE_HACK
+ extern void SekFinishIdleDet(void);
+ SekFinishIdleDet();
+#endif
+ SET_PC(execute_exception(ctx, M68K_ILLEGAL_INSTRUCTION_EX, GET_PC-2, GET_SR));
RET(0)
}
// ILLEGAL A000-AFFF
OPCODE(0xA000)
{
RET(0)
}
// ILLEGAL A000-AFFF
OPCODE(0xA000)
{
- SET_PC(execute_exception(M68K_1010_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_1010_EX, GET_PC-2, GET_SR));
RET(0)
}
// ILLEGAL F000-FFFF
OPCODE(0xF000)
{
RET(0)
}
// ILLEGAL F000-FFFF
OPCODE(0xF000)
{
- SET_PC(execute_exception(M68K_1111_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_1111_EX, GET_PC-2, GET_SR));
RET(0) // 4 already taken by exc. handler
}
RET(0) // 4 already taken by exc. handler
}
@@
-18595,7
+18619,7
@@
OPCODE(0x4C90)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
@@
-18627,7
+18651,7
@@
OPCODE(0x4C98)
} while (res >>= 1);
AREG((Opcode >> 0) & 7) = adr;
POST_IO
} while (res >>= 1);
AREG((Opcode >> 0) & 7) = adr;
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
RET(12)
}
RET(12)
}
@@
-18655,7
+18679,7
@@
OPCODE(0x4CA8)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
@@
-18687,7
+18711,7
@@
OPCODE(0x4CB0)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
@@
-18718,7
+18742,7
@@
OPCODE(0x4CB8)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
@@
-18749,7
+18773,7
@@
OPCODE(0x4CB9)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
@@
-18781,7
+18805,7
@@
OPCODE(0x4CBA)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
@@
-18813,7
+18837,7
@@
OPCODE(0x4CBB)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
@@
-18845,7
+18869,7
@@
OPCODE(0x4C9F)
} while (res >>= 1);
AREG(7) = adr;
POST_IO
} while (res >>= 1);
AREG(7) = adr;
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
RET(12)
}
RET(12)
}
@@
-18872,7
+18896,7
@@
OPCODE(0x4CD0)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
@@
-18904,7
+18928,7
@@
OPCODE(0x4CD8)
} while (res >>= 1);
AREG((Opcode >> 0) & 7) = adr;
POST_IO
} while (res >>= 1);
AREG((Opcode >> 0) & 7) = adr;
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
RET(12)
}
RET(12)
}
@@
-18932,7
+18956,7
@@
OPCODE(0x4CE8)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
@@
-18964,7
+18988,7
@@
OPCODE(0x4CF0)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
@@
-18995,7
+19019,7
@@
OPCODE(0x4CF8)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
@@
-19026,7
+19050,7
@@
OPCODE(0x4CF9)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
@@
-19058,7
+19082,7
@@
OPCODE(0x4CFA)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
@@
-19090,7
+19114,7
@@
OPCODE(0x4CFB)
psrc++;
} while (res >>= 1);
POST_IO
psrc++;
} while (res >>= 1);
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
@@
-19122,14
+19146,14
@@
OPCODE(0x4CDF)
} while (res >>= 1);
AREG(7) = adr;
POST_IO
} while (res >>= 1);
AREG(7) = adr;
POST_IO
-
m68kcontext.
io_cycle_counter -= (adr - dst) * 2;
+
ctx->
io_cycle_counter -= (adr - dst) * 2;
RET(12)
}
// TRAP
OPCODE(0x4E40)
{
RET(12)
}
// TRAP
OPCODE(0x4E40)
{
- SET_PC(execute_exception(M68K_TRAP_BASE_EX + (Opcode & 0xF), GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_TRAP_BASE_EX + (Opcode & 0xF), GET_PC, GET_SR));
RET(4)
}
RET(4)
}
@@
-19200,7
+19224,7
@@
OPCODE(0x4E60)
if (!flag_S)
{
if (!flag_S)
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
res = AREGu32((Opcode >> 0) & 7);
RET(4)
}
res = AREGu32((Opcode >> 0) & 7);
@@
-19216,7
+19240,7
@@
OPCODE(0x4E68)
if (!flag_S)
{
if (!flag_S)
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
res = ASP;
RET(4)
}
res = ASP;
@@
-19232,11
+19256,11
@@
OPCODE(0x4E70)
if (!flag_S)
{
if (!flag_S)
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
PRE_IO
RET(4)
}
PRE_IO
- if (
m68kcontext.reset_handler) m68kcontext.
reset_handler();
+ if (
ctx->reset_handler) ctx->
reset_handler();
// CPU->Reset_CallBack();
POST_IO
RET(132)
// CPU->Reset_CallBack();
POST_IO
RET(132)
@@
-19256,7
+19280,7
@@
OPCODE(0x4E72)
if (!flag_S)
{
if (!flag_S)
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
FETCH_WORD(res);
RET(4)
}
FETCH_WORD(res);
@@
-19268,7
+19292,7
@@
OPCODE(0x4E72)
AREG(7) = ASP;
ASP = res;
}
AREG(7) = ASP;
ASP = res;
}
-
m68kcontext.
execinfo |= FM68K_HALTED;
+
ctx->
execinfo |= FM68K_HALTED;
RET0()
}
RET0()
}
@@
-19280,7
+19304,7
@@
OPCODE(0x4E73)
if (!flag_S)
{
if (!flag_S)
{
- SET_PC(execute_exception(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
PRE_IO
RET(4)
}
PRE_IO
@@
-19295,7
+19319,7
@@
OPCODE(0x4E73)
ASP = res;
}
POST_IO
ASP = res;
}
POST_IO
-
m68kcontext.
execinfo &= ~(FM68K_EMULATE_GROUP_0|FM68K_EMULATE_TRACE|FM68K_DO_TRACE);
+
ctx->
execinfo &= ~(FM68K_EMULATE_GROUP_0|FM68K_EMULATE_TRACE|FM68K_DO_TRACE);
CHECK_INT_TO_JUMP(20)
RET(20)
}
CHECK_INT_TO_JUMP(20)
RET(20)
}
@@
-19318,7
+19342,7
@@
RET(16)
OPCODE(0x4E76)
{
if (flag_V & 0x80)
OPCODE(0x4E76)
{
if (flag_V & 0x80)
- SET_PC(execute_exception(M68K_TRAPV_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_TRAPV_EX, GET_PC, GET_SR));
RET(4)
}
RET(4)
}
@@
-19573,15
+19597,14
@@
RET(14)
// CHK
OPCODE(0x4180)
{
// CHK
OPCODE(0x4180)
{
- u32 adr, res;
- u32 src, dst;
+ s32 src, res;
- src = DREG
u
16((Opcode >> 0) & 7);
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ src = DREG
s
16((Opcode >> 0) & 7);
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
RET(10)
}
}
RET(10)
}
@@
-19589,17
+19612,17
@@
RET(10)
// CHK
OPCODE(0x4190)
{
// CHK
OPCODE(0x4190)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
adr = AREG((Opcode >> 0) & 7);
PRE_IO
adr = AREG((Opcode >> 0) & 7);
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(14)
}
POST_IO
RET(14)
@@
-19608,18
+19631,18
@@
RET(14)
// CHK
OPCODE(0x4198)
{
// 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
adr = AREG((Opcode >> 0) & 7);
AREG((Opcode >> 0) & 7) += 2;
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(14)
}
POST_IO
RET(14)
@@
-19628,18
+19651,18
@@
RET(14)
// CHK
OPCODE(0x41A0)
{
// 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
adr = AREG((Opcode >> 0) & 7) - 2;
AREG((Opcode >> 0) & 7) = adr;
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(16)
}
POST_IO
RET(16)
@@
-19648,18
+19671,18
@@
RET(16)
// CHK
OPCODE(0x41A8)
{
// CHK
OPCODE(0x41A8)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
FETCH_SWORD(adr);
adr += AREG((Opcode >> 0) & 7);
PRE_IO
FETCH_SWORD(adr);
adr += AREG((Opcode >> 0) & 7);
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(18)
}
POST_IO
RET(18)
@@
-19668,18
+19691,18
@@
RET(18)
// CHK
OPCODE(0x41B0)
{
// CHK
OPCODE(0x41B0)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
adr = AREG((Opcode >> 0) & 7);
DECODE_EXT_WORD
PRE_IO
adr = AREG((Opcode >> 0) & 7);
DECODE_EXT_WORD
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(20)
}
POST_IO
RET(20)
@@
-19688,17
+19711,17
@@
RET(20)
// CHK
OPCODE(0x41B8)
{
// CHK
OPCODE(0x41B8)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
FETCH_SWORD(adr);
PRE_IO
FETCH_SWORD(adr);
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(18)
}
POST_IO
RET(18)
@@
-19707,17
+19730,17
@@
RET(18)
// CHK
OPCODE(0x41B9)
{
// CHK
OPCODE(0x41B9)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
FETCH_LONG(adr);
PRE_IO
FETCH_LONG(adr);
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(22)
}
POST_IO
RET(22)
@@
-19726,18
+19749,18
@@
RET(22)
// CHK
OPCODE(0x41BA)
{
// CHK
OPCODE(0x41BA)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
adr = GET_SWORD + GET_PC;
PC++;
PRE_IO
adr = GET_SWORD + GET_PC;
PC++;
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(18)
}
POST_IO
RET(18)
@@
-19746,18
+19769,18
@@
RET(18)
// CHK
OPCODE(0x41BB)
{
// CHK
OPCODE(0x41BB)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
adr = GET_PC;
DECODE_EXT_WORD
PRE_IO
adr = GET_PC;
DECODE_EXT_WORD
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(20)
}
POST_IO
RET(20)
@@
-19766,15
+19789,15
@@
RET(20)
// CHK
OPCODE(0x41BC)
{
// CHK
OPCODE(0x41BC)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
- FETCH_WORD(src);
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ FETCH_
S
WORD(src);
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(14)
}
POST_IO
RET(14)
@@
-19783,18
+19806,18
@@
RET(14)
// CHK
OPCODE(0x419F)
{
// CHK
OPCODE(0x419F)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
adr = AREG(7);
AREG(7) += 2;
PRE_IO
adr = AREG(7);
AREG(7) += 2;
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(14)
}
POST_IO
RET(14)
@@
-19803,18
+19826,18
@@
RET(14)
// CHK
OPCODE(0x41A7)
{
// CHK
OPCODE(0x41A7)
{
-
u32 adr
, res;
- u32
src, dst
;
+
s32 src
, res;
+ u32
adr
;
adr = AREG(7) - 2;
AREG(7) = adr;
PRE_IO
adr = AREG(7) - 2;
AREG(7) = adr;
PRE_IO
- READ_WORD_F(adr, src)
- res = DREG
u
16((Opcode >> 9) & 7);
- if ((
(s32)
res < 0) || (res > src))
+ READ
SX
_WORD_F(adr, src)
+ res = DREG
s
16((Opcode >> 9) & 7);
+ if ((res < 0) || (res > src))
{
flag_N = res >> 8;
{
flag_N = res >> 8;
- SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(16)
}
POST_IO
RET(16)
@@
-25028,7
+25051,7
@@
OPCODE(0x6201)
if (flag_NotZ && (!(flag_C & 0x100)))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (flag_NotZ && (!(flag_C & 0x100)))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25042,7
+25065,7
@@
OPCODE(0x6301)
if ((!flag_NotZ) || (flag_C & 0x100))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if ((!flag_NotZ) || (flag_C & 0x100))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25056,7
+25079,7
@@
OPCODE(0x6401)
if (!(flag_C & 0x100))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (!(flag_C & 0x100))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25070,7
+25093,7
@@
OPCODE(0x6501)
if (flag_C & 0x100)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (flag_C & 0x100)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25084,7
+25107,7
@@
OPCODE(0x6601)
if (flag_NotZ)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (flag_NotZ)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25098,7
+25121,7
@@
OPCODE(0x6701)
if (!flag_NotZ)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (!flag_NotZ)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25112,7
+25135,7
@@
OPCODE(0x6801)
if (!(flag_V & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (!(flag_V & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25126,7
+25149,7
@@
OPCODE(0x6901)
if (flag_V & 0x80)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (flag_V & 0x80)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25140,7
+25163,7
@@
OPCODE(0x6A01)
if (!(flag_N & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (!(flag_N & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25154,7
+25177,7
@@
OPCODE(0x6B01)
if (flag_N & 0x80)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (flag_N & 0x80)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25168,7
+25191,7
@@
OPCODE(0x6C01)
if (!((flag_N ^ flag_V) & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (!((flag_N ^ flag_V) & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25182,7
+25205,7
@@
OPCODE(0x6D01)
if ((flag_N ^ flag_V) & 0x80)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if ((flag_N ^ flag_V) & 0x80)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25196,7
+25219,7
@@
OPCODE(0x6E01)
if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-25210,7
+25233,7
@@
OPCODE(0x6F01)
if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}
@@
-26934,19
+26957,19
@@
OPCODE(0x8100)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
src = DREGu8((Opcode >> 0) & 7);
dst = DREGu8((Opcode >> 9) & 7);
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
src = DREGu8((Opcode >> 0) & 7);
dst = DREGu8((Opcode >> 9) & 7);
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res >
9) res -
= 6;
+ if (res >
0xF) corf
= 6;
res += (dst & 0xF0) - (src & 0xF0);
res += (dst & 0xF0) - (src & 0xF0);
- if (res > 0x99)
- {
- res += 0xA0;
- flag_X = flag_C = M68K_SR_C;
- }
- else flag_X = flag_C = 0;
- flag_NotZ |= res & 0xFF;
+ flag_V = res;
+ flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
+ if (res > 0xff) res += 0xA0;
+ res = (res - corf) & 0xFF;
+ flag_V &= ~res;
+ flag_NotZ |= res;
flag_N = res;
DREGu8((Opcode >> 9) & 7) = res;
RET(6)
flag_N = res;
DREGu8((Opcode >> 9) & 7) = res;
RET(6)
@@
-26957,6
+26980,7
@@
OPCODE(0x8108)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
@@
-26966,15
+26990,14
@@
OPCODE(0x8108)
AREG((Opcode >> 9) & 7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
AREG((Opcode >> 9) & 7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res >
9) res -
= 6;
+ if (res >
0xF) corf
= 6;
res += (dst & 0xF0) - (src & 0xF0);
res += (dst & 0xF0) - (src & 0xF0);
- if (res > 0x99)
- {
- res += 0xA0;
- flag_X = flag_C = M68K_SR_C;
- }
- else flag_X = flag_C = 0;
- flag_NotZ |= res & 0xFF;
+ flag_V = res;
+ flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
+ if (res > 0xff) res += 0xA0;
+ res = (res - corf) & 0xFF;
+ flag_V &= ~res;
+ flag_NotZ |= res;
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
@@
-26986,6
+27009,7
@@
OPCODE(0x810F)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
adr = AREG(7) - 2;
AREG(7) = adr;
adr = AREG(7) - 2;
AREG(7) = adr;
@@
-26995,15
+27019,14
@@
OPCODE(0x810F)
AREG((Opcode >> 9) & 7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
AREG((Opcode >> 9) & 7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res >
9) res -
= 6;
+ if (res >
0xF) corf
= 6;
res += (dst & 0xF0) - (src & 0xF0);
res += (dst & 0xF0) - (src & 0xF0);
- if (res > 0x99)
- {
- res += 0xA0;
- flag_X = flag_C = M68K_SR_C;
- }
- else flag_X = flag_C = 0;
- flag_NotZ |= res & 0xFF;
+ flag_V = res;
+ flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
+ if (res > 0xff) res += 0xA0;
+ res = (res - corf) & 0xFF;
+ flag_V &= ~res;
+ flag_NotZ |= res;
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
@@
-27015,6
+27038,7
@@
OPCODE(0x8F08)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
@@
-27024,15
+27048,14
@@
OPCODE(0x8F08)
AREG(7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
AREG(7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res >
9) res -
= 6;
+ if (res >
0xF) corf
= 6;
res += (dst & 0xF0) - (src & 0xF0);
res += (dst & 0xF0) - (src & 0xF0);
- if (res > 0x99)
- {
- res += 0xA0;
- flag_X = flag_C = M68K_SR_C;
- }
- else flag_X = flag_C = 0;
- flag_NotZ |= res & 0xFF;
+ flag_V = res;
+ flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
+ if (res > 0xff) res += 0xA0;
+ res = (res - corf) & 0xFF;
+ flag_V &= ~res;
+ flag_NotZ |= res;
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
@@
-27044,6
+27067,7
@@
OPCODE(0x8F0F)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
adr = AREG(7) - 2;
AREG(7) = adr;
adr = AREG(7) - 2;
AREG(7) = adr;
@@
-27053,15
+27077,14
@@
OPCODE(0x8F0F)
AREG(7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
AREG(7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res >
9) res -
= 6;
+ if (res >
0xF) corf
= 6;
res += (dst & 0xF0) - (src & 0xF0);
res += (dst & 0xF0) - (src & 0xF0);
- if (res > 0x99)
- {
- res += 0xA0;
- flag_X = flag_C = M68K_SR_C;
- }
- else flag_X = flag_C = 0;
- flag_NotZ |= res & 0xFF;
+ flag_V = res;
+ flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
+ if (res > 0xff) res += 0xA0;
+ res = (res - corf) & 0xFF;
+ flag_V &= ~res;
+ flag_NotZ |= res;
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
@@
-27077,7
+27100,7
@@
OPCODE(0x80C0)
src = DREGu16((Opcode >> 0) & 7);
if (src == 0)
{
src = DREGu16((Opcode >> 0) & 7);
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(140)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(140)
#else
@@
-27125,7
+27148,7
@@
OPCODE(0x80D0)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
@@
-27174,7
+27197,7
@@
OPCODE(0x80D8)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
@@
-27223,7
+27246,7
@@
OPCODE(0x80E0)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
@@
-27272,7
+27295,7
@@
OPCODE(0x80E8)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
@@
-27321,7
+27344,7
@@
OPCODE(0x80F0)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(150)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(150)
#else
@@
-27369,7
+27392,7
@@
OPCODE(0x80F8)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
@@
-27417,9
+27440,9
@@
OPCODE(0x80F9)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
#ifdef USE_CYCLONE_TIMING_DIV
-RET(1
6
2)
+RET(1
5
2)
#else
RET(22)
#endif
#else
RET(22)
#endif
@@
-27435,7
+27458,7
@@
RET(22)
{
flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
{
flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
-RET(1
6
2)
+RET(1
5
2)
#else
RET(82)
#endif
#else
RET(82)
#endif
@@
-27448,7
+27471,7
@@
RET(162)
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-RET(1
6
2)
+RET(1
5
2)
#else
RET(102)
#endif
#else
RET(102)
#endif
@@
-27466,7
+27489,7
@@
OPCODE(0x80FA)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
@@
-27515,9
+27538,9
@@
OPCODE(0x80FB)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
#ifdef USE_CYCLONE_TIMING_DIV
-RET(1
6
0)
+RET(1
5
0)
#else
RET(20)
#endif
#else
RET(20)
#endif
@@
-27533,7
+27556,7
@@
RET(20)
{
flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
{
flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
-RET(1
6
0)
+RET(1
5
0)
#else
RET(80)
#endif
#else
RET(80)
#endif
@@
-27546,7
+27569,7
@@
RET(160)
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-RET(1
6
0)
+RET(1
5
0)
#else
RET(100)
#endif
#else
RET(100)
#endif
@@
-27561,7
+27584,7
@@
OPCODE(0x80FC)
FETCH_WORD(src);
if (src == 0)
{
FETCH_WORD(src);
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
@@
-27610,7
+27633,7
@@
OPCODE(0x80DF)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
@@
-27659,7
+27682,7
@@
OPCODE(0x80E7)
READ_WORD_F(adr, src)
if (src == 0)
{
READ_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
@@
-27705,7
+27728,7
@@
OPCODE(0x81C0)
src = (s32)DREGs16((Opcode >> 0) & 7);
if (src == 0)
{
src = (s32)DREGs16((Opcode >> 0) & 7);
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81C0;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81C0;
#endif
@@
-27745,7
+27768,7
@@
goto end81C0;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81C0:
m68kcontext.
io_cycle_counter -= 50;
+end81C0:
ctx->
io_cycle_counter -= 50;
#endif
RET(108)
}
#endif
RET(108)
}
@@
-27761,7
+27784,7
@@
OPCODE(0x81D0)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D0;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D0;
#endif
@@
-27801,7
+27824,7
@@
goto end81D0;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81D0:
m68kcontext.
io_cycle_counter -= 50;
+end81D0:
ctx->
io_cycle_counter -= 50;
#endif
RET(112)
}
#endif
RET(112)
}
@@
-27818,7
+27841,7
@@
OPCODE(0x81D8)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D8;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D8;
#endif
@@
-27858,7
+27881,7
@@
goto end81D8;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81D8:
m68kcontext.
io_cycle_counter -= 50;
+end81D8:
ctx->
io_cycle_counter -= 50;
#endif
RET(112)
}
#endif
RET(112)
}
@@
-27875,7
+27898,7
@@
OPCODE(0x81E0)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E0;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E0;
#endif
@@
-27915,7
+27938,7
@@
goto end81E0;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81E0:
m68kcontext.
io_cycle_counter -= 50;
+end81E0:
ctx->
io_cycle_counter -= 50;
#endif
RET(114)
}
#endif
RET(114)
}
@@
-27932,7
+27955,7
@@
OPCODE(0x81E8)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E8;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E8;
#endif
@@
-27972,7
+27995,7
@@
goto end81E8;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81E8:
m68kcontext.
io_cycle_counter -= 50;
+end81E8:
ctx->
io_cycle_counter -= 50;
#endif
RET(116)
}
#endif
RET(116)
}
@@
-27989,7
+28012,7
@@
OPCODE(0x81F0)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F0;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F0;
#endif
@@
-28029,7
+28052,7
@@
goto end81F0;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81F0:
m68kcontext.
io_cycle_counter -= 50;
+end81F0:
ctx->
io_cycle_counter -= 50;
#endif
RET(118)
}
#endif
RET(118)
}
@@
-28045,7
+28068,7
@@
OPCODE(0x81F8)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F8;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F8;
#endif
@@
-28085,7
+28108,7
@@
goto end81F8;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81F8:
m68kcontext.
io_cycle_counter -= 50;
+end81F8:
ctx->
io_cycle_counter -= 50;
#endif
RET(116)
}
#endif
RET(116)
}
@@
-28101,7
+28124,7
@@
OPCODE(0x81F9)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F9;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F9;
#endif
@@
-28141,7
+28164,7
@@
goto end81F9;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81F9:
m68kcontext.
io_cycle_counter -= 50;
+end81F9:
ctx->
io_cycle_counter -= 50;
#endif
RET(120)
}
#endif
RET(120)
}
@@
-28158,7
+28181,7
@@
OPCODE(0x81FA)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FA;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FA;
#endif
@@
-28198,7
+28221,7
@@
goto end81FA;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81FA:
m68kcontext.
io_cycle_counter -= 50;
+end81FA:
ctx->
io_cycle_counter -= 50;
#endif
RET(116)
}
#endif
RET(116)
}
@@
-28215,7
+28238,7
@@
OPCODE(0x81FB)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FB;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FB;
#endif
@@
-28255,7
+28278,7
@@
goto end81FB;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81FB:
m68kcontext.
io_cycle_counter -= 50;
+end81FB:
ctx->
io_cycle_counter -= 50;
#endif
RET(118)
}
#endif
RET(118)
}
@@
-28269,7
+28292,7
@@
OPCODE(0x81FC)
FETCH_SWORD(src);
if (src == 0)
{
FETCH_SWORD(src);
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FC;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FC;
#endif
@@
-28309,7
+28332,7
@@
goto end81FC;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81FC:
m68kcontext.
io_cycle_counter -= 50;
+end81FC:
ctx->
io_cycle_counter -= 50;
#endif
RET(112)
}
#endif
RET(112)
}
@@
-28326,7
+28349,7
@@
OPCODE(0x81DF)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81DF;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81DF;
#endif
@@
-28366,7
+28389,7
@@
goto end81DF;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81DF:
m68kcontext.
io_cycle_counter -= 50;
+end81DF:
ctx->
io_cycle_counter -= 50;
#endif
RET(112)
}
#endif
RET(112)
}
@@
-28383,7
+28406,7
@@
OPCODE(0x81E7)
READSX_WORD_F(adr, src)
if (src == 0)
{
READSX_WORD_F(adr, src)
if (src == 0)
{
- SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
+ SET_PC(execute_exception(
ctx,
M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E7;
#endif
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E7;
#endif
@@
-28423,7
+28446,7
@@
goto end81E7;
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
DREGu32((Opcode >> 9) & 7) = res;
}
#ifdef USE_CYCLONE_TIMING_DIV
-end81E7:
m68kcontext.
io_cycle_counter -= 50;
+end81E7:
ctx->
io_cycle_counter -= 50;
#endif
RET(114)
}
#endif
RET(114)
}
@@
-28452,8
+28475,8
@@
OPCODE(0x9008)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
dst = DREGu8((Opcode >> 9) & 7);
/*
goto famec_Exec_End;
dst = DREGu8((Opcode >> 9) & 7);
@@
-30626,8
+30649,8
@@
OPCODE(0xB008)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
dst = DREGu8((Opcode >> 9) & 7);
/*
goto famec_Exec_End;
dst = DREGu8((Opcode >> 9) & 7);
@@
-34121,18
+34144,22
@@
OPCODE(0xC100)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
src = DREGu8((Opcode >> 0) & 7);
dst = DREGu8((Opcode >> 9) & 7);
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
src = DREGu8((Opcode >> 0) & 7);
dst = DREGu8((Opcode >> 9) & 7);
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res > 9)
res +
= 6;
+ if (res > 9)
corf
= 6;
res += (dst & 0xF0) + (src & 0xF0);
res += (dst & 0xF0) + (src & 0xF0);
- if (res > 0x99)
+ flag_V = ~res;
+ res += corf;
+ if (res > 0x9F)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
+ flag_V &= res;
flag_NotZ |= res & 0xFF;
flag_N = res;
DREGu8((Opcode >> 9) & 7) = res;
flag_NotZ |= res & 0xFF;
flag_N = res;
DREGu8((Opcode >> 9) & 7) = res;
@@
-34144,6
+34171,7
@@
OPCODE(0xC108)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
@@
-34153,14
+34181,17
@@
OPCODE(0xC108)
AREG((Opcode >> 9) & 7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
AREG((Opcode >> 9) & 7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res > 9)
res +
= 6;
+ if (res > 9)
corf
= 6;
res += (dst & 0xF0) + (src & 0xF0);
res += (dst & 0xF0) + (src & 0xF0);
- if (res > 0x99)
+ flag_V = ~res;
+ res += corf;
+ if (res > 0x9F)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
+ flag_V &= res;
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
@@
-34173,6
+34204,7
@@
OPCODE(0xC10F)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
adr = AREG(7) - 2;
AREG(7) = adr;
adr = AREG(7) - 2;
AREG(7) = adr;
@@
-34182,14
+34214,17
@@
OPCODE(0xC10F)
AREG((Opcode >> 9) & 7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
AREG((Opcode >> 9) & 7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res > 9)
res +
= 6;
+ if (res > 9)
corf
= 6;
res += (dst & 0xF0) + (src & 0xF0);
res += (dst & 0xF0) + (src & 0xF0);
- if (res > 0x99)
+ flag_V = ~res;
+ res += corf;
+ if (res > 0x9F)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
+ flag_V &= res;
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
@@
-34202,6
+34237,7
@@
OPCODE(0xCF08)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
adr = AREG((Opcode >> 0) & 7) - 1;
AREG((Opcode >> 0) & 7) = adr;
@@
-34211,14
+34247,17
@@
OPCODE(0xCF08)
AREG(7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
AREG(7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res > 9)
res +
= 6;
+ if (res > 9)
corf
= 6;
res += (dst & 0xF0) + (src & 0xF0);
res += (dst & 0xF0) + (src & 0xF0);
- if (res > 0x99)
+ flag_V = ~res;
+ res += corf;
+ if (res > 0x9F)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
+ flag_V &= res;
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
@@
-34231,6
+34270,7
@@
OPCODE(0xCF0F)
{
u32 adr, res;
u32 src, dst;
{
u32 adr, res;
u32 src, dst;
+ u32 corf = 0;
adr = AREG(7) - 2;
AREG(7) = adr;
adr = AREG(7) - 2;
AREG(7) = adr;
@@
-34240,14
+34280,17
@@
OPCODE(0xCF0F)
AREG(7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
AREG(7) = adr;
READ_BYTE_F(adr, dst)
res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
- if (res > 9)
res +
= 6;
+ if (res > 9)
corf
= 6;
res += (dst & 0xF0) + (src & 0xF0);
res += (dst & 0xF0) + (src & 0xF0);
- if (res > 0x99)
+ flag_V = ~res;
+ res += corf;
+ if (res > 0x9F)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
+ flag_V &= res;
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
@@
-34923,8
+34966,8
@@
OPCODE(0xD008)
u32 src, dst;
// can't read byte from Ax registers !
u32 src, dst;
// can't read byte from Ax registers !
-
m68kcontext.
execinfo |= M68K_FAULTED;
-
m68kcontext.
io_cycle_counter = 0;
+
ctx->
execinfo |= M68K_FAULTED;
+
ctx->
io_cycle_counter = 0;
/*
goto famec_Exec_End;
dst = DREGu8((Opcode >> 9) & 7);
/*
goto famec_Exec_End;
dst = DREGu8((Opcode >> 9) & 7);
@@
-37083,7
+37126,7
@@
OPCODE(0xE000)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = (s32)DREGs8((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = (s32)DREGs8((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37103,7
+37146,7
@@
OPCODE(0xE040)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = (s32)DREGs16((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = (s32)DREGs16((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37123,7
+37166,7
@@
OPCODE(0xE080)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = (s32)DREGs32((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = (s32)DREGs32((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37143,7
+37186,7
@@
OPCODE(0xE008)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu8((Opcode >> 0) & 7);
flag_N = flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = DREGu8((Opcode >> 0) & 7);
flag_N = flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37162,7
+37205,7
@@
OPCODE(0xE048)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu16((Opcode >> 0) & 7);
flag_N = flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = DREGu16((Opcode >> 0) & 7);
flag_N = flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37181,7
+37224,7
@@
OPCODE(0xE088)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu32((Opcode >> 0) & 7);
flag_N = flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = DREGu32((Opcode >> 0) & 7);
flag_N = flag_V = 0;
flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37200,7
+37243,7
@@
OPCODE(0xE010)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu8((Opcode >> 0) & 7);
src |= (flag_X & M68K_SR_X) << 0;
res = (src >> sft) | (src << (9 - sft));
src = DREGu8((Opcode >> 0) & 7);
src |= (flag_X & M68K_SR_X) << 0;
res = (src >> sft) | (src << (9 - sft));
@@
-37221,7
+37264,7
@@
OPCODE(0xE050)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu16((Opcode >> 0) & 7);
src |= (flag_X & M68K_SR_X) << 8;
res = (src >> sft) | (src << (17 - sft));
src = DREGu16((Opcode >> 0) & 7);
src |= (flag_X & M68K_SR_X) << 8;
res = (src >> sft) | (src << (17 - sft));
@@
-37242,7
+37285,7
@@
OPCODE(0xE090)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu32((Opcode >> 0) & 7);
flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
src = DREGu32((Opcode >> 0) & 7);
flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
@@
-37264,7
+37307,7
@@
OPCODE(0xE018)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu8((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = DREGu8((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37284,7
+37327,7
@@
OPCODE(0xE058)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu16((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = DREGu16((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37304,7
+37347,7
@@
OPCODE(0xE098)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu32((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
src = DREGu32((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
@@
-37324,7
+37367,7
@@
OPCODE(0xE100)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu8((Opcode >> 0) & 7);
if (sft < 8)
{
src = DREGu8((Opcode >> 0) & 7);
if (sft < 8)
{
@@
-37363,7
+37406,7
@@
OPCODE(0xE140)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu16((Opcode >> 0) & 7);
flag_X = flag_C = src >> (8 - sft);
res = src << sft;
src = DREGu16((Opcode >> 0) & 7);
flag_X = flag_C = src >> (8 - sft);
res = src << sft;
@@
-37388,7
+37431,7
@@
OPCODE(0xE180)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu32((Opcode >> 0) & 7);
flag_X = flag_C = src >> (24 - sft);
res = src << sft;
src = DREGu32((Opcode >> 0) & 7);
flag_X = flag_C = src >> (24 - sft);
res = src << sft;
@@
-37413,7
+37456,7
@@
OPCODE(0xE108)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu8((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src << (0 + sft);
src = DREGu8((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src << (0 + sft);
@@
-37433,7
+37476,7
@@
OPCODE(0xE148)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu16((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src >> (8 - sft);
src = DREGu16((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src >> (8 - sft);
@@
-37453,7
+37496,7
@@
OPCODE(0xE188)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu32((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src >> (24 - sft);
src = DREGu32((Opcode >> 0) & 7);
flag_V = 0;
flag_X = flag_C = src >> (24 - sft);
@@
-37473,7
+37516,7
@@
OPCODE(0xE110)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu8((Opcode >> 0) & 7);
src |= (flag_X & M68K_SR_X) << 0;
res = (src << sft) | (src >> (9 - sft));
src = DREGu8((Opcode >> 0) & 7);
src |= (flag_X & M68K_SR_X) << 0;
res = (src << sft) | (src >> (9 - sft));
@@
-37494,7
+37537,7
@@
OPCODE(0xE150)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu16((Opcode >> 0) & 7);
src |= (flag_X & M68K_SR_X) << 8;
res = (src << sft) | (src >> (17 - sft));
src = DREGu16((Opcode >> 0) & 7);
src |= (flag_X & M68K_SR_X) << 8;
res = (src << sft) | (src >> (17 - sft));
@@
-37515,7
+37558,7
@@
OPCODE(0xE190)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu32((Opcode >> 0) & 7);
flag_C = src >> ((32 - M68K_SR_C_SFT) - sft);
if (sft == 1) res = (src << 1) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - 1));
src = DREGu32((Opcode >> 0) & 7);
flag_C = src >> ((32 - M68K_SR_C_SFT) - sft);
if (sft == 1) res = (src << 1) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - 1));
@@
-37537,7
+37580,7
@@
OPCODE(0xE118)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu8((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src << (0 + sft);
src = DREGu8((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src << (0 + sft);
@@
-37557,7
+37600,7
@@
OPCODE(0xE158)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu16((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src >> (8 - sft);
src = DREGu16((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src >> (8 - sft);
@@
-37577,7
+37620,7
@@
OPCODE(0xE198)
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
u32 sft;
sft = (((Opcode >> 9) - 1) & 7) + 1;
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
src = DREGu32((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src >> (24 - sft);
src = DREGu32((Opcode >> 0) & 7);
flag_V = 0;
flag_C = src >> (24 - sft);
@@
-37600,7
+37643,7
@@
OPCODE(0xE020)
src = (s32)DREGs8((Opcode >> 0) & 7);
if (sft)
{
src = (s32)DREGs8((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft < 8)
{
flag_V = 0;
if (sft < 8)
{
flag_V = 0;
@@
-37653,7
+37696,7
@@
OPCODE(0xE060)
src = (s32)DREGs16((Opcode >> 0) & 7);
if (sft)
{
src = (s32)DREGs16((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft < 16)
{
flag_V = 0;
if (sft < 16)
{
flag_V = 0;
@@
-37711,7
+37754,7
@@
OPCODE(0xE0A0)
src = (s32)DREGs32((Opcode >> 0) & 7);
if (sft)
{
src = (s32)DREGs32((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft < 32)
{
flag_V = 0;
if (sft < 32)
{
flag_V = 0;
@@
-37765,7
+37808,7
@@
OPCODE(0xE028)
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft <= 8)
{
flag_N = flag_V = 0;
if (sft <= 8)
{
flag_N = flag_V = 0;
@@
-37804,7
+37847,7
@@
OPCODE(0xE068)
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft <= 16)
{
flag_N = flag_V = 0;
if (sft <= 16)
{
flag_N = flag_V = 0;
@@
-37848,7
+37891,7
@@
OPCODE(0xE0A8)
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft < 32)
{
flag_N = flag_V = 0;
if (sft < 32)
{
flag_N = flag_V = 0;
@@
-37890,7
+37933,7
@@
OPCODE(0xE030)
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft %= 9;
src |= (flag_X & M68K_SR_X) << 0;
sft %= 9;
src |= (flag_X & M68K_SR_X) << 0;
@@
-37922,7
+37965,7
@@
OPCODE(0xE070)
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft %= 17;
src |= (flag_X & M68K_SR_X) << 8;
sft %= 17;
src |= (flag_X & M68K_SR_X) << 8;
@@
-37959,14
+38002,14
@@
OPCODE(0xE0B0)
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft %= 33;
if (sft != 0)
{
if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
else res = (src >> sft) | (src << (33 - sft)) | (((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))) >> (sft - 1));
sft %= 33;
if (sft != 0)
{
if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
else res = (src >> sft) | (src << (33 - sft)) | (((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))) >> (sft - 1));
- flag_X = (src >> (
32 - sft
)) << M68K_SR_X_SFT;
+ flag_X = (src >> (
sft - 1
)) << M68K_SR_X_SFT;
}
else res = src;
flag_C = flag_X;
}
else res = src;
flag_C = flag_X;
@@
-37997,7
+38040,7
@@
OPCODE(0xE038)
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft &= 0x07;
flag_C = src << (M68K_SR_C_SFT - ((sft - 1) & 7));
sft &= 0x07;
flag_C = src << (M68K_SR_C_SFT - ((sft - 1) & 7));
@@
-38028,7
+38071,7
@@
OPCODE(0xE078)
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft &= 0x0F;
flag_C = (src >> ((sft - 1) & 15)) << M68K_SR_C_SFT;
sft &= 0x0F;
flag_C = (src >> ((sft - 1) & 15)) << M68K_SR_C_SFT;
@@
-38064,7
+38107,7
@@
OPCODE(0xE0B8)
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft &= 0x1F;
flag_C = (src >> ((sft - 1) & 31)) << M68K_SR_C_SFT;
sft &= 0x1F;
flag_C = (src >> ((sft - 1) & 31)) << M68K_SR_C_SFT;
@@
-38096,7
+38139,7
@@
OPCODE(0xE120)
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft < 8)
{
flag_X = flag_C = (src << sft) >> 0;
if (sft < 8)
{
flag_X = flag_C = (src << sft) >> 0;
@@
-38144,7
+38187,7
@@
OPCODE(0xE160)
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft < 16)
{
flag_X = flag_C = (src << sft) >> 8;
if (sft < 16)
{
flag_X = flag_C = (src << sft) >> 8;
@@
-38197,7
+38240,7
@@
OPCODE(0xE1A0)
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft < 32)
{
flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
if (sft < 32)
{
flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
@@
-38246,7
+38289,7
@@
OPCODE(0xE128)
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft <= 8)
{
flag_X = flag_C = (src << sft) >> 0;
if (sft <= 8)
{
flag_X = flag_C = (src << sft) >> 0;
@@
-38286,7
+38329,7
@@
OPCODE(0xE168)
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft <= 16)
{
flag_X = flag_C = (src << sft) >> 8;
if (sft <= 16)
{
flag_X = flag_C = (src << sft) >> 8;
@@
-38331,7
+38374,7
@@
OPCODE(0xE1A8)
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft < 32)
{
flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
if (sft < 32)
{
flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
@@
-38374,7
+38417,7
@@
OPCODE(0xE130)
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft %= 9;
src |= (flag_X & M68K_SR_X) << 0;
sft %= 9;
src |= (flag_X & M68K_SR_X) << 0;
@@
-38406,7
+38449,7
@@
OPCODE(0xE170)
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft %= 17;
src |= (flag_X & M68K_SR_X) << 8;
sft %= 17;
src |= (flag_X & M68K_SR_X) << 8;
@@
-38443,7
+38486,7
@@
OPCODE(0xE1B0)
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
sft %= 33;
if (sft != 0)
sft %= 33;
if (sft != 0)
@@
-38481,7
+38524,7
@@
OPCODE(0xE138)
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft &= 0x07)
{
flag_C = (src << sft) >> 0;
if (sft &= 0x07)
{
flag_C = (src << sft) >> 0;
@@
-38519,7
+38562,7
@@
OPCODE(0xE178)
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
src = DREGu16((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft &= 0x0F)
{
flag_C = (src << sft) >> 8;
if (sft &= 0x0F)
{
flag_C = (src << sft) >> 8;
@@
-38562,7
+38605,7
@@
OPCODE(0xE1B8)
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
src = DREGu32((Opcode >> 0) & 7);
if (sft)
{
-
m68kcontext.
io_cycle_counter -= sft * 2;
+
ctx->
io_cycle_counter -= sft * 2;
if (sft &= 0x1F)
{
flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
if (sft &= 0x1F)
{
flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
@@
-40069,7
+40112,7
@@
OPCODE(idle_detector_bcc8)
if ( Opcode & 0x0100) newop |= 0x400; // beq
if (!(Opcode & 0x0f00)) newop |= 0xc00; // bra
if ( Opcode & 0x0100) newop |= 0x400; // beq
if (!(Opcode & 0x0f00)) newop |= 0xc00; // bra
- ret = SekRegisterIdlePatch(GET_PC - 2, Opcode, newop,
&m68kcontext
);
+ ret = SekRegisterIdlePatch(GET_PC - 2, Opcode, newop,
ctx
);
switch (ret)
{
case 0: PC[-1] = newop; break;
switch (ret)
{
case 0: PC[-1] = newop; break;
@@
-40085,7
+40128,7
@@
end:
if (cond_true)
{
PC = dest_pc;
if (cond_true)
{
PC = dest_pc;
-
m68kcontext.
io_cycle_counter -= 2;
+
ctx->
io_cycle_counter -= 2;
}
RET(8)
}
}
RET(8)
}