mirror of
https://github.com/holub/mame
synced 2025-07-03 09:06:08 +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;
|
PAIR r,d,b;
|
||||||
IMMWORD(b);
|
IMMWORD(b);
|
||||||
d.d = X;
|
d.d = X;
|
||||||
r.d = d.d - b.d;
|
r.w.l = d.b.h - b.b.h;
|
||||||
CLR_NZV;
|
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_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) */
|
||||||
@ -1252,11 +1253,12 @@ OP_HANDLER( cmpx_di )
|
|||||||
PAIR r,d,b;
|
PAIR r,d,b;
|
||||||
DIRWORD(b);
|
DIRWORD(b);
|
||||||
d.d = X;
|
d.d = X;
|
||||||
r.d = d.d - b.d;
|
r.w.l = d.b.h - b.b.h;
|
||||||
CLR_NZV;
|
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_Z16(r.d);
|
||||||
SET_N8(r.b.h);
|
|
||||||
SET_V8(d.b.h, b.b.h, r.b.h);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* $9c CPX direct -**** (6803) */
|
/* $9c CPX direct -**** (6803) */
|
||||||
@ -1426,11 +1428,12 @@ OP_HANDLER( cmpx_ix )
|
|||||||
PAIR r,d,b;
|
PAIR r,d,b;
|
||||||
IDXWORD(b);
|
IDXWORD(b);
|
||||||
d.d = X;
|
d.d = X;
|
||||||
r.d = d.d - b.d;
|
r.w.l = d.b.h - b.b.h;
|
||||||
CLR_NZV;
|
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_Z16(r.d);
|
||||||
SET_N8(r.b.h);
|
|
||||||
SET_V8(d.b.h, b.b.h, r.b.h);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* $ac CPX indexed -**** (6803)*/
|
/* $ac CPX indexed -**** (6803)*/
|
||||||
@ -1602,11 +1605,12 @@ OP_HANDLER( cmpx_ex )
|
|||||||
PAIR r,d,b;
|
PAIR r,d,b;
|
||||||
EXTWORD(b);
|
EXTWORD(b);
|
||||||
d.d = X;
|
d.d = X;
|
||||||
r.d = d.d - b.d;
|
r.w.l = d.b.h - b.b.h;
|
||||||
CLR_NZV;
|
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_Z16(r.d);
|
||||||
SET_N8(r.b.h);
|
|
||||||
SET_V8(d.b.h, b.b.h, r.b.h);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* $bc CPX extended -**** (6803) */
|
/* $bc CPX extended -**** (6803) */
|
||||||
|
Loading…
Reference in New Issue
Block a user