notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
famec: adjust divu timing
[picodrive.git]
/
cpu
/
fame
/
famec_opcodes.h
diff --git
a/cpu/fame/famec_opcodes.h
b/cpu/fame/famec_opcodes.h
index
c690b45
..
bd2efb0
100644
(file)
--- a/
cpu/fame/famec_opcodes.h
+++ b/
cpu/fame/famec_opcodes.h
@@
-19573,12
+19573,11
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19589,14
+19588,14
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19608,15
+19607,15
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19628,15
+19627,15
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19648,15
+19647,15
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19668,15
+19667,15
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19688,14
+19687,14
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19707,14
+19706,14
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19726,15
+19725,15
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19746,15
+19745,15
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19766,12
+19765,12
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19783,15
+19782,15
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-19803,15
+19802,15
@@
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;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
@@
-27419,7
+27418,7
@@
OPCODE(0x80F9)
{
SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
{
SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
-RET(1
6
2)
+RET(1
5
2)
#else
RET(22)
#endif
#else
RET(22)
#endif
@@
-27435,7
+27434,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
+27447,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
@@
-27517,7
+27516,7
@@
OPCODE(0x80FB)
{
SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
{
SET_PC(execute_exception(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
-RET(1
6
0)
+RET(1
5
0)
#else
RET(20)
#endif
#else
RET(20)
#endif
@@
-27533,7
+27532,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
+27545,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