public static void BRZ(StatusRegister statusRegister, ProgramCounter programCounter, Registers registers)
 {
     if (statusRegister.zero)
     {
         programCounter.programCounter = registers.R[7];
     }
 }
 public static void BRO(StatusRegister statusRegister, ProgramCounter programCounter, Registers registers)
 {
     if (statusRegister.overflow)
     {
         programCounter.programCounter = registers.R[7];
     }
 }
 public static void BRN(StatusRegister statusRegister, ProgramCounter programCounter, Registers registers)
 {
     if (statusRegister.negative)
     {
         programCounter.programCounter = registers.R[7];
     }
 }
 public static void BRC(StatusRegister statusRegister, ProgramCounter programCounter, Registers registers)
 {
     if (statusRegister.carry)
     {
         programCounter.programCounter = registers.R[7];
     }
 }
 public static void ADDC(Accumulator accumulator, Registers registers, byte registerAddress, StatusRegister statusRegister)
 {
     ushort operator1 = accumulator.accumulator;
     ushort operator2 = registers.R[registerAddress];
     byte operator1MSB = (byte)((int)operator1 >> 7);
     byte operator2MSB = (byte)((int)operator2 >> 7);
     accumulator.accumulator = (byte)((int)operator1 + operator2 + Convert.ToUInt16(statusRegister.carry));
     byte resMSB = (byte)((int)accumulator.accumulator >> 7);
     statusRegister.overflow = (operator1MSB == operator2MSB) && (operator2MSB != resMSB);
     statusRegister.carry = ((operator1 + operator2 + Convert.ToUInt16(statusRegister.carry)) > 255);
     setNegativeAndZeroFlags(accumulator, statusRegister);
 }
 public static void LDArf(Accumulator accumulator, Registers registers, byte registerAddress, StatusRegister statusRegister)
 {
     accumulator.accumulator = registers.R[registerAddress];
     resetCarryAndOverflow(statusRegister);
     setNegativeAndZeroFlags(accumulator, statusRegister);
 }
 public static void SUB(Accumulator accumulator, Registers registers, byte registerAddress, StatusRegister statusRegister)
 {
     int operator1 = accumulator.accumulator;
     int operator2 = registers.R[registerAddress];
     operator2 = ~operator2++;
     byte accMSb = (byte)((int)accumulator.accumulator >> 7);
     byte regMSb = (byte)((int)registers.R[registerAddress] >> 7);
     accumulator.accumulator += (byte)operator2;
     if (statusRegister.carry)
     {
         accumulator.accumulator++;
     }
     byte resMSb = (byte)((int)accumulator.accumulator >> 7);
     statusRegister.overflow = (accMSb == regMSb) && (resMSb != accMSb);
     statusRegister.carry = ((operator1 + operator2) > 255);
     setNegativeAndZeroFlags(accumulator, statusRegister);
 }
 public static void STArf(Registers registers, byte registerAddress, Accumulator accumulator)
 {
     registers.R[registerAddress] = accumulator.accumulator;
 }