mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
famec: fix CHK
This commit is contained in:
parent
8d998330d0
commit
5c5d89adbb
1 changed files with 64 additions and 65 deletions
|
@ -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));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue