cpu/decoder - Fix DAA
This commit is contained in:
parent
9c20befc60
commit
7bc272afb6
1 changed files with 6 additions and 4 deletions
|
@ -371,16 +371,18 @@ void Cpu::executeInstruction()
|
||||||
case 0x27: // DAA
|
case 0x27: // DAA
|
||||||
{
|
{
|
||||||
u16 corr = 0;
|
u16 corr = 0;
|
||||||
if (state.halfcarry || ((state.A & 0x0F) > 0x9))
|
if (state.halfcarry || (!state.subtract && (state.A & 0x0F) > 0x9))
|
||||||
corr |= 0x06;
|
|
||||||
if ((state.A & 0xF0) > 0x90)
|
|
||||||
corr |= 0x06;
|
corr |= 0x06;
|
||||||
|
if (state.carry || (!state.subtract && state.A > 0x99))
|
||||||
|
{
|
||||||
|
corr |= 0x60;
|
||||||
|
state.carry = true;
|
||||||
|
}
|
||||||
|
|
||||||
u32 res16 = (u16)state.A + (state.subtract ? (-corr) : corr);
|
u32 res16 = (u16)state.A + (state.subtract ? (-corr) : corr);
|
||||||
state.A = (u8)res16;
|
state.A = (u8)res16;
|
||||||
state.halfcarry = false;
|
state.halfcarry = false;
|
||||||
state.zero = (state.A == 0);
|
state.zero = (state.A == 0);
|
||||||
state.carry = (res16 & 0x100);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x2F: // CPL Complement accumulator
|
case 0x2F: // CPL Complement accumulator
|
||||||
|
|
Loading…
Reference in a new issue