- cfw("psw_clr_cy();");
- cfw("psw_clr_ac();");
- cfw("psw_clr_ov();");
- # The Overflow (OV) bit is set if there is a carry-out of bit 6 or
- # out of bit 7, but not both. In other words, if the addition of the
- # Accumulator, operand and (in the case of ADDC) the Carry flag
- # treated as signed values results in a value that is out of the
- # range of a signed byte (-128 through +127) the Overflow flag is
- # set. Otherwise, the Overflow flag is cleared.
- cfw("if ( destination + source > 0xFF ) {");
- # Carry from bit 7
- cfw(" psw_set_cy();");
- # If no carry from bit 6, set OV
- cfw(" if (((destination & 0x7F) + (source & 0x7F)) < 0x80)");
- cfw(" psw_set_ov();");
- # If no carry from bit 7, but caary from bit 6, set OV
- cfw("} else if (((destination & 0x7F) + (source & 0x7F)) > 0x7F ) psw_set_ov();");
- cfw("if (((destination & 0x0F) + (source & 0x0F)) > 0x0F) psw_set_ac();");
- cfw("destination += source;");