def _and_a_value(processor, value): result = processor.main_registers['a'] & value processor.main_registers['a'] = result set_condition = processor.set_condition set_condition('s', result & 0b10000000 > 0) set_condition('z', result == 0) set_condition('h', True) set_condition('p', has_parity(result)) set_condition('n', False) set_condition('c', False)
def execute(self, processor, memory, pc): value = self.io.read(self.processor.main_registers['c'], self.processor.main_registers['b']) self.processor.main_registers[self.dest_reg] = value self.processor.set_condition('s', (value & 0b10000000) > 0) self.processor.set_condition('z', value == 0) self.processor.set_condition('h', False) self.processor.set_condition('p', has_parity(value)) self.processor.set_condition('n', False) return 12, False, pc
def _daa_after_sub(processor, digits, fc, hc): if not fc and not hc: if digits[0] <= 0x9 and digits[1] <= 0x9: pass elif not fc and hc: if digits[0] <= 0x8 and digits[1] >= 0x6: processor.main_registers['a'] += 0xfa elif fc and not hc: if digits[0] >= 0x7 and digits[1] <= 0x9: processor.main_registers['a'] += 0xa0 processor.set_condition('c', True) elif fc and hc: if digits[0] >= 0x6 and digits[1] >= 0x6: processor.main_registers['a'] += 0x9a processor.set_condition('c', True) processor.main_registers['a'] &= 0xff result = processor.main_registers['a'] processor.set_condition('s', (result & 0b10000000) > 0) processor.set_condition('z', result == 0) processor.set_condition('p', has_parity(result))