diff --git a/Readme.md b/Readme.md index 8b5837b..5816f5b 100644 --- a/Readme.md +++ b/Readme.md @@ -11,7 +11,7 @@ Display is able to render tiles + sprites, 8x16 sprites are implemented but unte - Test 01 fails because of DAA - Test 02 fails because interrupts are not fully implemented. - - Test 03 fails, probably because of flags. + - Test 03 passes - Test 04 passes - Test 05 fails - Test 06 passes (LD R, R) diff --git a/src/cpu.rs b/src/cpu.rs index 186746c..b5fd4f3 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -1168,9 +1168,8 @@ impl CPU { self.set_pair_value(REG_N_H, REG_N_L, v); self.clear_flag(FLAG_N); - self.set_clear_flag(FLAG_C, old > v); - // Is this correct? I don't know: - self.set_clear_flag(FLAG_H, (old & 0x8 | sp & 0x8) == 1 && v & 0x8 == 0); + self.set_clear_flag(FLAG_C, old > v && sp > 0); + self.set_clear_flag(FLAG_H, ((old & 0xFFF) + (sp & 0xFFF)) > 0xFFF); 8 }, 0x3A => {