/// <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;
 }
示例#4
0
 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;
 }