def op_adc(self, value): carry = self.reg.ps.carry # TODO: Decimal mode removed temporarily. result = signed_byte(value) + signed_byte(self.reg.ac) + carry self.reg.ps.overflow = result > 127 or result < -128 self.reg.ps.carry = value + self.reg.ac + carry > 255 result &= 0xFF self.reg.ac = result self._set_nz_flags(self.reg.ac)
def op_branch(self, value, opcode): flags = { 0x90: 'carry', 0xB0: 'carry', 0xD0: 'zero', 0xF0: 'zero', 0x10: 'negative', 0x30: 'negative', 0x50: 'overflow', 0x70: 'overflow', } cond = bool(getattr(self.reg.ps, flags[opcode])) branch_if_true = opcode in (0xB0, 0xF0, 0x30, 0x70) if cond == branch_if_true: old_pc = self.reg.pc new_pc = (self.reg.pc + signed_byte(value)) & 0xFFFF self.reg.pc = new_pc return 2 if (old_pc & 0xFF00) != (new_pc & 0xFF00) else 1