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; }