ref: e35401278bed7397532f61d9e9f3ce84f039b852
parent: 94907f2baa343717485c614a1cd9b51151ac4d53
author: Jean-André Santoni <jean.andre.santoni@gmail.com>
date: Sun Jul 14 11:27:44 EDT 2024
Fix flags X Y on edb0
--- a/z80.c
+++ b/z80.c
@@ -409,10 +409,10 @@
ed(void)
{uint8_t op, v, u, l;
- uint16_t a;
+ uint16_t a, n;
op = fetch8();
- // printf("ed %.2x\n", op);+ printf("ed %.2x\n", op); switch(op){case 0xa0: case 0xa1: case 0xa8: case 0xa9:
case 0xb0: case 0xb1: case 0xb8: case 0xb9:
@@ -421,14 +421,13 @@
u = z80read(HL());
z80write(DE(), u);
s[rF] &= ~(FLAGN|FLAGH);
- uint16_t n = s[rA] + u;
- if ((n & 0x08) != 0) s[rF] |= FLAGX; else s[rF] &= ~FLAGX;
- if ((n & 0x20) != 0) s[rF] |= FLAGY; else s[rF] &= ~FLAGY;
+ n = s[rA] + u;
l = 1;
break;
case 1:
u = z80read(HL());
v = s[rA] - u;
+ n = s[rA] + u;
s[rF] = s[rF] & ~(FLAGS|FLAGZ|FLAGH) | FLAGN;
l = v != 0;
if((v & 0x80) != 0)
@@ -439,6 +438,8 @@
s[rF] |= FLAGH;
break;
}
+ if ((n & 0x08) != 0) s[rF] |= FLAGX; else s[rF] &= ~FLAGX;
+ if ((n & 0x02) != 0) s[rF] |= FLAGY; else s[rF] &= ~FLAGY;
if((op & 8) != 0){if((op & 3) == 0 && s[rE]-- == 0)
s[rD]--;
@@ -452,7 +453,7 @@
}
if(s[rC]-- == 0)
s[rB]--;
- if((s[rC] | s[rB]) != 0){+ if(BC() != 0){s[rF] |= FLAGV;
if((op & 0x10) != 0 && l){pc -= 2;
--
⑨