This commit is contained in:
Kevin Hamacher 2016-06-02 13:49:21 +02:00
parent 9508244447
commit a58e599c7a

View File

@ -1083,38 +1083,39 @@ impl CPU {
0x26 => self.ld_r_v(REG_N_H), 0x26 => self.ld_r_v(REG_N_H),
0x27 => { 0x27 => {
// Logic copied from some other emulator // Logic copied from some other emulator
let mut v = self.regs[REG_A] as u16; let a = self.regs[REG_A];
if self.debug { if self.debug {
println!("DAA"); println!("DAA");
} }
if self.flags & FLAG_N == 0 { let mut cor: u8 = 0;
// Lower nibble if (self.flags & FLAG_H) == FLAG_H {
if ((self.flags & FLAG_H) == FLAG_H) || (v & 0xF) > 9 { cor |= 0x06;
v += 0x06; }
} if (self.flags & FLAG_C) == FLAG_C {
cor |= 0x60;
}
// Higher nibble if (self.flags & FLAG_N) == FLAG_N {
if ((self.flags & FLAG_C) == FLAG_C) || v > 0x9F { self.regs[REG_A] = a.wrapping_sub(cor);
v += 0x60;
}
} else { } else {
// Lower nibble if (a & 0x0F) > 0x09 {
if (self.flags & FLAG_H) == FLAG_H { cor |= 0x06;
v = v.wrapping_sub(6) & 0xFF;
} }
if a > 0x99 {
// Higher nibble cor |= 0x60;
if (self.flags & FLAG_C) == FLAG_C {
v = v.wrapping_sub(0x60);
} }
self.regs[REG_A] = a.wrapping_add(cor);
} }
self.clear_flag(FLAG_H); self.clear_flag(FLAG_H);
self.set_clear_flag(FLAG_C, (v & 0x100) == 0x100); if cor & 0x60 == 0x60 {
self.set_clear_flag(FLAG_Z, v as u8 == 0); self.set_flag(FLAG_C);
self.regs[REG_A] = v as u8; }
let a = self.regs[REG_A];
self.set_clear_flag(FLAG_Z, a == 0);
4 4
}, },