- Fent proves amb DDA...
This commit is contained in:
29
z80.cpp
29
z80.cpp
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user