Esempio n. 1
0
    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)
Esempio n. 2
0
    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