famec: fix CHK

This commit is contained in:
notaz 2017-09-13 01:57:37 +03:00
parent 8d998330d0
commit 5c5d89adbb

View file

@ -19573,12 +19573,11 @@ RET(14)
// CHK // CHK
OPCODE(0x4180) OPCODE(0x4180)
{ {
u32 adr, res; s32 src, res;
u32 src, dst;
src = DREGu16((Opcode >> 0) & 7); src = DREGs16((Opcode >> 0) & 7);
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19589,14 +19588,14 @@ RET(10)
// CHK // CHK
OPCODE(0x4190) OPCODE(0x4190)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
adr = AREG((Opcode >> 0) & 7); adr = AREG((Opcode >> 0) & 7);
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19608,15 +19607,15 @@ RET(14)
// CHK // CHK
OPCODE(0x4198) OPCODE(0x4198)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
adr = AREG((Opcode >> 0) & 7); adr = AREG((Opcode >> 0) & 7);
AREG((Opcode >> 0) & 7) += 2; AREG((Opcode >> 0) & 7) += 2;
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19628,15 +19627,15 @@ RET(14)
// CHK // CHK
OPCODE(0x41A0) OPCODE(0x41A0)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
adr = AREG((Opcode >> 0) & 7) - 2; adr = AREG((Opcode >> 0) & 7) - 2;
AREG((Opcode >> 0) & 7) = adr; AREG((Opcode >> 0) & 7) = adr;
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19648,15 +19647,15 @@ RET(16)
// CHK // CHK
OPCODE(0x41A8) OPCODE(0x41A8)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
FETCH_SWORD(adr); FETCH_SWORD(adr);
adr += AREG((Opcode >> 0) & 7); adr += AREG((Opcode >> 0) & 7);
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19668,15 +19667,15 @@ RET(18)
// CHK // CHK
OPCODE(0x41B0) OPCODE(0x41B0)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
adr = AREG((Opcode >> 0) & 7); adr = AREG((Opcode >> 0) & 7);
DECODE_EXT_WORD DECODE_EXT_WORD
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19688,14 +19687,14 @@ RET(20)
// CHK // CHK
OPCODE(0x41B8) OPCODE(0x41B8)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
FETCH_SWORD(adr); FETCH_SWORD(adr);
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19707,14 +19706,14 @@ RET(18)
// CHK // CHK
OPCODE(0x41B9) OPCODE(0x41B9)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
FETCH_LONG(adr); FETCH_LONG(adr);
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19726,15 +19725,15 @@ RET(22)
// CHK // CHK
OPCODE(0x41BA) OPCODE(0x41BA)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
adr = GET_SWORD + GET_PC; adr = GET_SWORD + GET_PC;
PC++; PC++;
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19746,15 +19745,15 @@ RET(18)
// CHK // CHK
OPCODE(0x41BB) OPCODE(0x41BB)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
adr = GET_PC; adr = GET_PC;
DECODE_EXT_WORD DECODE_EXT_WORD
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19766,12 +19765,12 @@ RET(20)
// CHK // CHK
OPCODE(0x41BC) OPCODE(0x41BC)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
FETCH_WORD(src); FETCH_SWORD(src);
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19783,15 +19782,15 @@ RET(14)
// CHK // CHK
OPCODE(0x419F) OPCODE(0x419F)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
adr = AREG(7); adr = AREG(7);
AREG(7) += 2; AREG(7) += 2;
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));
@ -19803,15 +19802,15 @@ RET(14)
// CHK // CHK
OPCODE(0x41A7) OPCODE(0x41A7)
{ {
u32 adr, res; s32 src, res;
u32 src, dst; u32 adr;
adr = AREG(7) - 2; adr = AREG(7) - 2;
AREG(7) = adr; AREG(7) = adr;
PRE_IO PRE_IO
READ_WORD_F(adr, src) READSX_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7); res = DREGs16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src)) 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(M68K_CHK_EX, GET_PC, GET_SR));