Fixed buf with CMP/CPX/CPY not setting carry correctly

This commit is contained in:
Andrew Jacobs 2018-06-18 18:08:09 +01:00
parent 00d7348482
commit a0bf1ecd6b

View File

@ -769,7 +769,7 @@ private:
if (e || p.f_m) { if (e || p.f_m) {
Byte data = getByte(ea); Byte data = getByte(ea);
Word temp = a.b - data; Word temp = data - a.b;
setc(temp & 0x100); setc(temp & 0x100);
setnz_b(lo(temp)); setnz_b(lo(temp));
@ -777,7 +777,7 @@ private:
} }
else { else {
Word data = getWord(ea); Word data = getWord(ea);
Addr temp = a.w - data; Addr temp = data - a.w;
setc(temp & 0x10000L); setc(temp & 0x10000L);
setnz_w((Word)temp); setnz_w((Word)temp);
@ -820,14 +820,18 @@ private:
if (e || p.f_x) { if (e || p.f_x) {
Byte data = getByte(ea); Byte data = getByte(ea);
setnz_b(x.b - data); Word temp = data - x.b;
setc(x.b >= data);
setc(temp & 0x100);
setnz_b(lo(temp));
cycles += 2; cycles += 2;
} }
else { else {
Word data = getWord(ea); Word data = getWord(ea);
setnz_w(x.w - data); Addr temp = data - x.w;
setc(x.w >= data);
setc(temp & 0x10000);
setnz_w((Word) temp);
cycles += 3; cycles += 3;
} }
} }
@ -838,14 +842,18 @@ private:
if (e || p.f_x) { if (e || p.f_x) {
Byte data = getByte(ea); Byte data = getByte(ea);
setnz_b(y.b - data); Word temp = data - y.b;
setc(y.b >= data);
setc(temp & 0x100);
setnz_b(lo(temp));
cycles += 2; cycles += 2;
} }
else { else {
Word data = getWord(ea); Word data = getWord(ea);
setnz_w(y.w - data); Addr temp = data - y.w;
setc(y.w >= data);
setc(temp & 0x10000);
setnz_w((Word) temp);
cycles += 3; cycles += 3;
} }
} }