CPU M6800: CPX (compare X) instruction, fix behaviour of N and V flags.

These two flags are only affected by the data comparison of the upper 8 bits, and not the whole 16 bits.
This commit is contained in:
Quench0 2016-06-02 01:55:33 +10:00
parent fd9a619167
commit 47eaa73ad6

View File

@ -1054,13 +1054,14 @@ OP_HANDLER( adda_im )
/* $8c CMPX immediate -***- */ /* $8c CMPX immediate -***- */
OP_HANDLER( cmpx_im ) OP_HANDLER( cmpx_im )
{ {
UINT32 r,d; PAIR r,d,b;
PAIR b;
IMMWORD(b); IMMWORD(b);
d = X; d.d = X;
r = d - b.d; r.d = d.d - b.d;
CLR_NZV; CLR_NZV;
SET_NZ16(r); SET_V16(d,b.d,r); SET_Z16(r.d);
SET_N8(r.b.h);
SET_V8(d.b.h, b.b.h, r.b.h);
} }
/* $8c CPX immediate -**** (6803) */ /* $8c CPX immediate -**** (6803) */
@ -1220,14 +1221,14 @@ OP_HANDLER( adda_di )
/* $9c CMPX direct -***- */ /* $9c CMPX direct -***- */
OP_HANDLER( cmpx_di ) OP_HANDLER( cmpx_di )
{ {
UINT32 r,d; PAIR r,d,b;
PAIR b;
DIRWORD(b); DIRWORD(b);
d = X; d.d = X;
r = d - b.d; r.d = d.d - b.d;
CLR_NZV; CLR_NZV;
SET_NZ16(r); SET_Z16(r.d);
SET_V16(d,b.d,r); SET_N8(r.b.h);
SET_V8(d.b.h, b.b.h, r.b.h);
} }
/* $9c CPX direct -**** (6803) */ /* $9c CPX direct -**** (6803) */
@ -1394,14 +1395,14 @@ OP_HANDLER( adda_ix )
/* $ac CMPX indexed -***- */ /* $ac CMPX indexed -***- */
OP_HANDLER( cmpx_ix ) OP_HANDLER( cmpx_ix )
{ {
UINT32 r,d; PAIR r,d,b;
PAIR b;
IDXWORD(b); IDXWORD(b);
d = X; d.d = X;
r = d - b.d; r.d = d.d - b.d;
CLR_NZV; CLR_NZV;
SET_NZ16(r); SET_Z16(r.d);
SET_V16(d,b.d,r); SET_N8(r.b.h);
SET_V8(d.b.h, b.b.h, r.b.h);
} }
/* $ac CPX indexed -**** (6803)*/ /* $ac CPX indexed -**** (6803)*/
@ -1570,14 +1571,14 @@ OP_HANDLER( adda_ex )
/* $bc CMPX extended -***- */ /* $bc CMPX extended -***- */
OP_HANDLER( cmpx_ex ) OP_HANDLER( cmpx_ex )
{ {
UINT32 r,d; PAIR r,d,b;
PAIR b;
EXTWORD(b); EXTWORD(b);
d = X; d.d = X;
r = d - b.d; r.d = d.d - b.d;
CLR_NZV; CLR_NZV;
SET_NZ16(r); SET_Z16(r.d);
SET_V16(d,b.d,r); SET_N8(r.b.h);
SET_V8(d.b.h, b.b.h, r.b.h);
} }
/* $bc CPX extended -**** (6803) */ /* $bc CPX extended -**** (6803) */