- Fent proves amb DDA...

This commit is contained in:
2024-04-18 17:28:09 +02:00
parent 145a48b86b
commit 0b798189bc

29
z80.cpp
View File

@@ -479,11 +479,38 @@ namespace z80
t+=4;
}
void new_DAA()
{
uint8_t cf = rA > 0x99;
uint8_t diff = ((rF & fH) || (rA & 0xF) > 9) ? 6 : 0;
if ((rF & fC) || cf) diff |= 0x60;
diff = (rF & fN) ? rA - diff : rA + diff;
KEEP_FLAGS(fN | fC);
FLAGS_SZXY(diff);
SET_FLAGS(!(diff) << 6);
SET_FLAGS((rA ^ diff) & fH);
SET_PARITY_FLAG(diff);
SET_FLAGS(cf);
/* FLAGS = (zuint8)(
(F & (NF | CF)) | // NF unchanged; CF dominant
(t & SYXF) | // SF = sign; YF = Y; XF = X
ZF_ZERO(t) | // ZF = zero
((A ^ t) & HF) | // HF = Ai.4 != Ao.4
PF_PARITY(t) | // PF = parity
cf); // CF |= 1 (if BCD carry)
*/
rA = diff;
t+=4;
}
void DAA()
{
bool carry_set = false;
uint8_t old = rA;
if ( (rA & 0x0F)>9 || (rF & fH) ) rA += 0x06;
if ( (rA & 0x0F)>9 || (rF & fH) )
rA += 0x06;
if ( (rA >> 4)>9 || (rF & fC) ) { rA += 0x60; carry_set = true; }
KEEP_FLAGS(fN);
FLAGS_SZXY(rA);