Skip to content

Commit 8eb893b

Browse files
committed
Fix bug in NEG cpu state
Was not updating C carry flag
1 parent 3260b23 commit 8eb893b

2 files changed

Lines changed: 23 additions & 0 deletions

File tree

src/arch/zx48k/optimizer/cpustate.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,7 @@ def execute(self, asm_code):
693693
val = -self.getv('a')
694694
self.set('a', val)
695695
self.Z = int(not val)
696+
self.C = int(not self.Z)
696697
val &= 0xFF
697698
self.S = val >> 7
698699
return

tests/arch/zx48k/optimizer/test_cpustate.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,3 +362,25 @@ def test_ex_de_hl_unknown(self):
362362
self.assertEqual(self.regs['l'], helpers.LO16_val(self.cpu_state.mem['y']))
363363
self.assertEqual(self.regs['d'], helpers.HI16_val(self.cpu_state.mem['x']))
364364
self.assertEqual(self.regs['e'], helpers.LO16_val(self.cpu_state.mem['x']))
365+
366+
def test_neg_nz(self):
367+
code = """
368+
xor a
369+
ld a, 1
370+
neg
371+
"""
372+
self._eval(code)
373+
self.assertEqual(self.regs['a'], str(0xFF))
374+
self.assertEqual(self.cpu_state.C, 1)
375+
self.assertEqual(self.cpu_state.Z, 0)
376+
377+
def test_neg_z(self):
378+
code = """
379+
xor a
380+
cp 1
381+
neg
382+
"""
383+
self._eval(code)
384+
self.assertEqual(self.regs['a'], str(0))
385+
self.assertEqual(self.cpu_state.C, 0)
386+
self.assertEqual(self.cpu_state.Z, 1)

0 commit comments

Comments
 (0)