/// <summary> /// Creates a new BitTestOperation (1,2 Cycle Instruction) /// </summary> /// <param name="_sourceAddress">The byte's address containing the targeted bit</param> /// <param name="_bitNumber">[0,7]</param> /// <param name="_op">BTFSC / BTFSS</param> /// <param name="_registerFileMap"></param> /// <param name="_address">code address</param> public BitTestOperation(short _sourceAddress, short _bitNumber, BitTestOperator _op, Register.ProgramCounter _programCounter, Register.RegisterFileMap _registerFileMap, short _address) : base(_registerFileMap, CYCLES, _address) { programCounter = _programCounter; op = _op; bitValue = (registerFileMap.Get(_sourceAddress) & (1 << _bitNumber)) != 0; }
/// <summary> /// Creates a new TestOperation. (INCFSZ f,d / DECFSZ f,d) /// </summary> /// <param name="_sourceAddress">f</param> /// <param name="_op">INC / DEC</param> /// <param name="_targetAddress">the address where the result should be stored in</param> /// <param name="_registerFileMap"></param> /// <param name="_address">code address</param> public TestOperation(short _sourceAddress, TestOperator _op, short _targetAddress, Register.ProgramCounter _programCounter, Register.RegisterFileMap _registerFileMap, short _address) : base(_registerFileMap, CYCLES, _address) { op = _op; sourceAddress = _sourceAddress; targetAddress = _targetAddress; programCounter = _programCounter; }
/// <summary> /// Creates a new instance of ReturnOperation with an argument. Use this for RETLW. /// </summary> /// <param name="_op"></param> /// <param name="_arg"></param> /// <param name="_registerFileMap"></param> /// <param name="_address"></param> public ReturnOperation(Register.ProgramCounter _programCounter, Data.OperationStack _operationStack, ReturnOperator _op, byte _arg, Register.RegisterFileMap _registerFileMap, short _address) : base(_registerFileMap, CYCLES, _address) { this.programCounter = _programCounter; this.operationStack = _operationStack; op = _op; arg = _arg; }
public Parser(PIC _pic) { this.pic = _pic; this.registerFileMap = pic.getRegisterFileMap(); this.programMemory = pic.getProgramMemory(); this.operationStack = pic.getOperationStack(); this.programCounter = pic.getProgramCounter(); }
/// <summary> /// Creates a new instance of ReturnOperation without an argument. Use this for RETURN, RETFIE. /// </summary> /// <param name="_op">enum RETURN / RETFIE</param> /// <param name="_registerFileMap"></param> /// <param name="_address"></param> public ReturnOperation(Register.ProgramCounter _programCounter, Data.OperationStack _operationStack, ReturnOperator _op, Register.RegisterFileMap _registerFileMap, short _address) : base(_registerFileMap, CYCLES, _address) { this.programCounter = _programCounter; this.operationStack = _operationStack; op = _op; arg = 0; if (_op == ReturnOperator.RETLW) { new Exception("Cannot create ReturnOperation with Operator RETLW without passing an argument. (Hint: use different constructor)."); } }
public GotoOperation(short _targetAddress, Register.ProgramCounter _programCounter, Register.RegisterFileMap _registerFileMap, short _address) : base(_registerFileMap, CYCLES, _address) { this.programCounter = _programCounter; this.targetAddress = _targetAddress; }