public static void NEG(Accumulator accumulator, StatusRegister statusRegister)
 {
     int operator1 = accumulator.accumulator;
     byte operator1MSB = (byte)((int)operator1 >> 7);
     accumulator.accumulator = (byte)~accumulator.accumulator;
     accumulator.accumulator++;
     byte resMSB = (byte)((int)accumulator.accumulator >> 7);
     statusRegister.overflow = (operator1MSB == 0) && (0 != resMSB);
     statusRegister.carry = ((operator1 + 1) > 255);
     setNegativeAndZeroFlags(accumulator, statusRegister);
 }
 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 NOT(Accumulator accumulator, StatusRegister statusRegister)
 {
     accumulator.accumulator = (byte)~accumulator.accumulator;
     resetCarryAndOverflow(statusRegister);
     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 LDI(Accumulator accumulator, byte constant, StatusRegister statusRegister)
 {
     accumulator.accumulator = constant;
     resetCarryAndOverflow(statusRegister);
     setNegativeAndZeroFlags(accumulator, statusRegister);
 }
 private static void setNegativeAndZeroFlags(Accumulator accumulator, StatusRegister statusRegister)
 {
     statusRegister.negative = (accumulator.accumulator & 128) == 128;
     statusRegister.zero = accumulator.accumulator == 0;
 }
 public static void LDAaddr(Accumulator accumulator, Memory memory, byte address, StatusRegister statusRegister)
 {
     accumulator.accumulator = memory.memory[address];
     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 VADD(Accumulator accumulator, VectorAdderBuffer vectorAdderBuffer, VectorStack vectorStack0, VectorStack vectorStack1, StatusRegister statusRegister)
 {
     ushort operator1 = vectorStack0.pop();
     ushort operator2 = vectorStack1.pop();
     byte operator1MSB = (byte)((int)operator1 >> 7);
     byte operator2MSB = (byte)((int)operator2 >> 7);
     accumulator.accumulator = (byte)((int)operator1 + operator2);
     byte resMSB = (byte)((int)accumulator.accumulator >> 7);
     statusRegister.overflow = (operator1MSB == operator2MSB) && (operator2MSB != resMSB);
     statusRegister.carry = ((operator1 + operator2) > 255);
     setNegativeAndZeroFlags(accumulator, statusRegister);
     vectorAdderBuffer.vectorAdderBuffer = (byte)((int)vectorStack0.pop() + vectorStack1.pop());
 }
 public static void STArf(Registers registers, byte registerAddress, Accumulator accumulator)
 {
     registers.R[registerAddress] = accumulator.accumulator;
 }
 public static void STAaddr(Memory memory, byte address, Accumulator accumulator)
 {
     memory.memory[address] = accumulator.accumulator;
 }
 public static void RRC(Accumulator accumulator, StatusRegister statusRegister)
 {
     byte accLSB = (byte)((int)accumulator.accumulator & 1);
     accumulator.accumulator >>= 1;
     accumulator.accumulator |= (byte)(statusRegister.carry ? 255 : 0);
     statusRegister.carry = accLSB == 1;
     setNegativeAndZeroFlags(accumulator, statusRegister);
 }
 public static void RLC(Accumulator accumulator, StatusRegister statusRegister)
 {
     byte accMSB = (byte)((int)accumulator.accumulator >> 7);
     accumulator.accumulator <<= 1;
     accumulator.accumulator |= (byte)(statusRegister.carry ? 1 : 0);
     statusRegister.carry = accMSB == 1;
     setNegativeAndZeroFlags(accumulator, statusRegister);
 }
 public static void PUSH(VectorStack vectorStack, Accumulator accumulator)
 {
     vectorStack.push(accumulator.accumulator);
 }