mirror of
https://github.com/holub/mame
synced 2025-07-02 08:39:21 +03:00
CPU M6800: CPX (compare X) instruction, fix behaviour of V flag #2. (nw)
Previous fix for CPX I posted a year ago was flawed and didn't handle overflow properly.
This commit is contained in:
parent
d6f96625af
commit
0810a75c23
@ -1085,11 +1085,12 @@ OP_HANDLER( cmpx_im )
|
||||
PAIR r,d,b;
|
||||
IMMWORD(b);
|
||||
d.d = X;
|
||||
r.d = d.d - b.d;
|
||||
r.w.l = d.b.h - b.b.h;
|
||||
CLR_NZV;
|
||||
SET_N8(r.b.l);
|
||||
SET_V8(d.b.h, b.b.h, r.w.l);
|
||||
r.d = d.d - b.d;
|
||||
SET_Z16(r.d);
|
||||
SET_N8(r.b.h);
|
||||
SET_V8(d.b.h, b.b.h, r.b.h);
|
||||
}
|
||||
|
||||
/* $8c CPX immediate -**** (6803) */
|
||||
@ -1252,11 +1253,12 @@ OP_HANDLER( cmpx_di )
|
||||
PAIR r,d,b;
|
||||
DIRWORD(b);
|
||||
d.d = X;
|
||||
r.d = d.d - b.d;
|
||||
r.w.l = d.b.h - b.b.h;
|
||||
CLR_NZV;
|
||||
SET_N8(r.b.l);
|
||||
SET_V8(d.b.h, b.b.h, r.w.l);
|
||||
r.d = d.d - b.d;
|
||||
SET_Z16(r.d);
|
||||
SET_N8(r.b.h);
|
||||
SET_V8(d.b.h, b.b.h, r.b.h);
|
||||
}
|
||||
|
||||
/* $9c CPX direct -**** (6803) */
|
||||
@ -1426,11 +1428,12 @@ OP_HANDLER( cmpx_ix )
|
||||
PAIR r,d,b;
|
||||
IDXWORD(b);
|
||||
d.d = X;
|
||||
r.d = d.d - b.d;
|
||||
r.w.l = d.b.h - b.b.h;
|
||||
CLR_NZV;
|
||||
SET_N8(r.b.l);
|
||||
SET_V8(d.b.h, b.b.h, r.w.l);
|
||||
r.d = d.d - b.d;
|
||||
SET_Z16(r.d);
|
||||
SET_N8(r.b.h);
|
||||
SET_V8(d.b.h, b.b.h, r.b.h);
|
||||
}
|
||||
|
||||
/* $ac CPX indexed -**** (6803)*/
|
||||
@ -1602,11 +1605,12 @@ OP_HANDLER( cmpx_ex )
|
||||
PAIR r,d,b;
|
||||
EXTWORD(b);
|
||||
d.d = X;
|
||||
r.d = d.d - b.d;
|
||||
r.w.l = d.b.h - b.b.h;
|
||||
CLR_NZV;
|
||||
SET_N8(r.b.l);
|
||||
SET_V8(d.b.h, b.b.h, r.w.l);
|
||||
r.d = d.d - b.d;
|
||||
SET_Z16(r.d);
|
||||
SET_N8(r.b.h);
|
||||
SET_V8(d.b.h, b.b.h, r.b.h);
|
||||
}
|
||||
|
||||
/* $bc CPX extended -**** (6803) */
|
||||
|
Loading…
Reference in New Issue
Block a user