Exemple #1
0
        private void RewriteLFSR()
        {
            var fsrnum = instrCurr.Operands[0] as PICOperandFSRNum ?? throw new InvalidOperationException($"Invalid FSR register number operand: {instrCurr.Operands[0]}");
            var k      = instrCurr.Operands[1] as PICOperandImmediate ?? throw new InvalidOperationException($"Invalid immediate operand: {instrCurr.Operands[1]}");
            var fsrreg = binder.EnsureRegister(PICRegisters.GetRegister($"FSR{fsrnum.FSRNum}"));

            m.Assign(fsrreg, k.ImmediateValue);
        }
Exemple #2
0
        protected void RewriteADDFSR()
        {
            var fsrnum = instrCurr.Operands[0] as PICOperandFSRNum ?? throw new InvalidOperationException($"Invalid FSR number operand: {instrCurr.Operands[0]}");
            var imm    = instrCurr.Operands[1] as PICOperandImmediate ?? throw new InvalidOperationException($"Invalid immediate operand: {instrCurr.Operands[1]}");
            var fsrreg = binder.EnsureRegister(PICRegisters.GetRegister($"FSR{fsrnum.FSRNum}"));

            m.Assign(fsrreg, m.IAdd(fsrreg, imm.ImmediateValue));
        }
Exemple #3
0
 public void PIC16arch_GetEnhancedCoreRegisterTests()
 {
     PICProcessorModel.GetModel(PIC16EnhancedName).CreateRegisters();
     Assert.AreSame(PICRegisters.WREG, PICRegisters.GetRegister("WREG"));
     Assert.AreSame(PICRegisters.STATUS, PICRegisters.GetRegister("STATUS"));
     Assert.AreSame(PICRegisters.PCL, PICRegisters.GetRegister("PCL"));
     Assert.AreSame(PICRegisters.BSR, PICRegisters.GetRegister("BSR"));
     Assert.AreSame(PIC16EnhancedRegisters.INDF0, PICRegisters.GetRegister("INDF0"));
 }
Exemple #4
0
 public void PIC16arch_GetBasicCoreRegisterTests()
 {
     PICProcessorModel.GetModel(PIC16BasicName).CreateRegisters();
     Assert.AreSame(PICRegisters.WREG, PICRegisters.GetRegister("WREG"));
     Assert.AreSame(PICRegisters.STATUS, PICRegisters.GetRegister("STATUS"));
     Assert.AreSame(PICRegisters.PCL, PICRegisters.GetRegister("PCL"));
     Assert.AreSame(PIC16BasicRegisters.INDF, PICRegisters.GetRegister("INDF"));
     Assert.AreSame(PIC16BasicRegisters.RP0, PICRegisters.GetBitField("RP0"));
     Assert.AreSame(PIC16BasicRegisters.RP1, PICRegisters.GetBitField("RP1"));
 }
Exemple #5
0
        public void PIC16arch_FailGetRegisterFromNameTests()
        {
            PICProcessorModel.GetModel(PIC16BasicName).CreateRegisters();
            Assert.Throws <ArgumentException>(() => PICRegisters.GetRegister("invalidregistername"));

            PICProcessorModel.GetModel(PIC16EnhancedName).CreateRegisters();
            Assert.Throws <ArgumentException>(() => PICRegisters.GetRegister("invalidregistername"));

            PICProcessorModel.GetModel(PIC16FullFeaturedName).CreateRegisters();
            Assert.Throws <ArgumentException>(() => PICRegisters.GetRegister("invalidregistername"));
        }
        public void PIC16arch_FailGetRegisterFromNameTests()
        {
            PICProcessorModel.GetModel(PIC16BasicName).CreateRegisters();
            Assert.IsNull(PICRegisters.GetRegister("invalidregistername"));

            PICProcessorModel.GetModel(PIC16EnhancedName).CreateRegisters();
            Assert.IsNull(PICRegisters.GetRegister("invalidregistername"));

            PICProcessorModel.GetModel(PIC16FullFeaturedName).CreateRegisters();
            Assert.IsNull(PICRegisters.GetRegister("invalidregistername"));
        }
Exemple #7
0
 public void PIC16arch_GetBasicRegisterFromNameTests()
 {
     PICProcessorModel.GetModel(PIC16BasicName).CreateRegisters();
     Assert.AreEqual("STATUS", PICRegisters.GetRegister("STATUS").Name);
     Assert.AreEqual("FSR", PICRegisters.GetRegister("FSR").Name);
     Assert.AreEqual("INDF", PICRegisters.GetRegister("INDF").Name);
     Assert.AreEqual("INTCON", PICRegisters.GetRegister("INTCON").Name);
     Assert.AreEqual("WREG", PICRegisters.GetRegister("WREG").Name);
     Assert.AreEqual("PCL", PICRegisters.GetRegister("PCL").Name);
     Assert.AreEqual("PCLATH", PICRegisters.GetRegister("PCLATH").Name);
     Assert.AreEqual("RP", PICRegisters.GetBitField("RP").Name);
 }
        public void PIC18arch_GetSubregisterTests()
        {
            var arch = GetArch(PIC18EggName);

            PICMemoryDescriptor.ExecMode = PICExecMode.Traditional;
            Assert.AreSame(PIC18Registers.FSR0L, arch.GetSubregister(PIC18Registers.FSR0, 0, 8));
            Assert.AreSame(PIC18Registers.FSR0H, arch.GetSubregister(PIC18Registers.FSR0, 8, 8));
            Assert.AreSame(PIC18Registers.FSR0, arch.GetSubregister(PIC18Registers.FSR0, 0, 16));

            PICMemoryDescriptor.ExecMode = PICExecMode.Extended;
            Assert.AreSame(PIC18Registers.FSR1L, arch.GetSubregister(PIC18Registers.FSR1, 0, 8));
            Assert.AreSame(PIC18Registers.FSR1H, arch.GetSubregister(PIC18Registers.FSR1, 8, 8));
            Assert.AreSame(PIC18Registers.FSR2L, arch.GetSubregister(PICRegisters.GetRegister("FSR2"), 0, 8));
            Assert.AreSame(PIC18Registers.FSR2H, arch.GetSubregister(PICRegisters.GetRegister("FSR2"), 8, 8));
            Assert.AreSame(PIC18Registers.FSR2, arch.GetSubregister(PICRegisters.GetRegister("FSR2"), 0, 16));
        }
Exemple #9
0
 public void PIC16arch_GetFullFeaturedRegisterFromNameTests()
 {
     PICProcessorModel.GetModel(PIC16FullFeaturedName).CreateRegisters();
     Assert.AreEqual("STATUS", PICRegisters.GetRegister("STATUS").Name);
     Assert.AreEqual("FSR1L", PICRegisters.GetRegister("FSR1L").Name);
     Assert.AreEqual("FSR1H", PICRegisters.GetRegister("FSR1H").Name);
     Assert.AreEqual("FSR0L", PICRegisters.GetRegister("FSR0L").Name);
     Assert.AreEqual("FSR0H", PICRegisters.GetRegister("FSR0H").Name);
     Assert.AreEqual("FSR0", PICRegisters.GetRegister("FSR0").Name);
     Assert.AreEqual("FSR1", PICRegisters.GetRegister("FSR1").Name);
     Assert.AreEqual("INDF0", PICRegisters.GetRegister("INDF0").Name);
     Assert.AreEqual("INDF1", PICRegisters.GetRegister("INDF1").Name);
     Assert.AreEqual("BSR", PICRegisters.GetRegister("BSR").Name);
     Assert.AreEqual("WREG", PICRegisters.GetRegister("WREG").Name);
     Assert.AreEqual("PCL", PICRegisters.GetRegister("PCL").Name);
     Assert.AreEqual("PCLATH", PICRegisters.GetRegister("PCLATH").Name);
 }
Exemple #10
0
        public void PIC18arch_GetSubregisterTests()
        {
            var arch = GetArch(PIC18EggName);

            PICMemoryDescriptor.ExecMode = PICExecMode.Traditional;
            var lowByte  = new BitRange(0, 8);
            var highByte = new BitRange(8, 16);
            var word     = new BitRange(0, 16);

            Assert.AreSame(PIC18Registers.FSR0L, arch.GetRegister(PIC18Registers.FSR0.Domain, lowByte));
            Assert.AreSame(PIC18Registers.FSR0H, arch.GetRegister(PIC18Registers.FSR0.Domain, highByte));
            Assert.AreSame(PIC18Registers.FSR0, arch.GetRegister(PIC18Registers.FSR0.Domain, word));

            PICMemoryDescriptor.ExecMode = PICExecMode.Extended;
            Assert.AreSame(PIC18Registers.FSR1L, arch.GetRegister(PIC18Registers.FSR1.Domain, lowByte));
            Assert.AreSame(PIC18Registers.FSR1H, arch.GetRegister(PIC18Registers.FSR1.Domain, highByte));
            Assert.AreSame(PIC18Registers.FSR2L, arch.GetRegister(PICRegisters.GetRegister("FSR2").Domain, lowByte));
            Assert.AreSame(PIC18Registers.FSR2H, arch.GetRegister(PICRegisters.GetRegister("FSR2").Domain, highByte));
            Assert.AreSame(PIC18Registers.FSR2, arch.GetRegister(PICRegisters.GetRegister("FSR2").Domain, word));
        }