Beispiel #1
0
        //decode instruction based on 'code' parent variable and returns populated version of itself
        public override Instruction Decode()
        {
            IBit    = TestFlag(code, 25);
            P       = TestFlag(code, 24);
            U       = TestFlag(code, 23);
            S       = TestFlag(code, 22);
            W       = TestFlag(code, 21);
            L       = TestFlag(code, 20);
            Rn      = (char)ExtractBits(code, 16, 19);
            address = Regs.ReadWord(GetReg(Rn));

            regstr = "";
            bool first = true;

            for (int i = 0; i < regList.Length; i++)
            {
                regList[i] = TestFlag(code, i);
                if (regList[i])
                {
                    if (!first)
                    {
                        regstr += ", ";
                    }
                    regstr += "r" + i;
                    first   = false;
                }
            }
            return(this);
        }
Beispiel #2
0
 /// <summary> Получение информации об изделии из БД </summary>
 public Product GetProductInfo(string ProductID)
 {
     for (int i = 0; i < Prods.Count; i++)
     {
         Product p = (Product)Prods[i];
         if (p.ID == ProductID)
         {
             if (p.Registrations == null)
             {
                 return(new Product(p.ID, p.ModelID, p.Model, null));
             }
             ArrayList Regs = null;
             for (int j = 0; j < p.Registrations.Count; j++)
             {
                 Registration r = (Registration)p.Registrations[j];
                 if (DateTime.Now < r.Time.Add(ProgramSettings.ReentrancePeriod))
                 {
                     r = new Registration(r.Time, r.Line, r.DeffectID, r.WorkerID, r.IsChanged);
                     if (Regs == null)
                     {
                         Regs = new ArrayList();
                     }
                     Regs.Add(r);
                 }
             }
             return(new Product(p.ID, p.ModelID, p.Model, Regs));
         }
     }
     return(null);
 }
Beispiel #3
0
        //Extract adress according to register offset specification
        int DecodeRegisterOffset()
        {
            char Rm       = (char)ExtractBits(code, 0, 3);
            char Sh       = (char)ExtractBits(code, 5, 6);
            int  shiftVal = ExtractBits(code, 7, 11);

            shiftVal *= U ? 1 : -1;

            stringValue = ", " + (shiftVal == 0 ? (U ? "" : "-") : "") + "r" + (int)Rm;

            int regval = Regs.ReadWord(GetReg(Rm));

            if (Rm == 15)
            {
                regval += 8;
            }

            if (shiftVal != 0)
            {
                stringValue += ", " + BarrelShifter.CodeToString(Sh) + " #" + shiftVal;
            }
            else if (!U)
            {
                regval *= -1;
            }

            return(BarrelShifter.ShiftByCode(regval, shiftVal, Sh));
        }
Beispiel #4
0
 public static Operand GetMemory(Regs reg, int value)
 {
     return(new Operand()
     {
         OperandType = OperandType.Mem, Value = new Nbit(4, (int)reg) << 28 | new Nbit(28, value).Value
     });
 }
Beispiel #5
0
 public static Operand GetRegister(Regs reg)
 {
     return(new Operand()
     {
         OperandType = OperandType.Reg, Value = (int)reg
     });
 }
Beispiel #6
0
        //fire the interrupt
        //Interrupts are special. They get special access to the inner guts of the program...
        public override void Execute()
        {
            if (swiType == 0x11)
            {
                Flags[SysFlag.Running]     = false;
                Flags[SysFlag.Unsteppable] = true;
                return;
            }

            Regs.WriteWord(Reg.LR_SVC, Regs.ReadWord(Reg.R15));
            Regs.WriteWord(Reg.SPSR_SVC, Regs.ReadWord(Reg.CPSR));

            int cpsr = Regs.ReadWord(Reg.CPSR) & 0b1111111111111111111111111100000;

            Regs.WriteWord(Reg.CPSR, cpsr | Mode.Supervisor); //switch to superviser

            if (swiType == 0x0)
            {
                SetCPSRFlag(7, true);
            }
            else
            {
                SetCPSRFlag(7, false);
            }

            Regs.WriteWord(Reg.R15, 0x8);
        }
Beispiel #7
0
 //All these operations are unique in their own ways and I cannot simplify them into one function,
 //they all need their own functions. They are also highly dependent on the same instance variables, therefore
 //making a utilities class would mean many unnecessary arguments.
 //All the operations:
 //move value of op3 into Rd
 void MOV()
 {
     Regs.WriteWord(GetReg(Rd), op3);
     if (SBit && Rd == 15)
     {
         SwitchBackMode();
     }
 }
Beispiel #8
0
        private void ImgOzviat_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
        {
            // add tabitem
            Regs reg = new Regs();

            reg.Show();
            this.Hide();
        }
Beispiel #9
0
 //loads the values in the address pointed to by Rn into the active registers
 //in reglist[] while incrementing the address in Rn after loading
 void Load() //pop
 {
     for (int i = 0; i < regList.Length; i++)
     {
         if (regList[i])
         {
             Regs.WriteWord(GetReg(i), RAM.ReadWord(address));
             address += 4;
         }
     }
 }
Beispiel #10
0
 //Loads value pointed to by 'address' into register Rd
 void Load()
 {
     if (B)
     {
         Regs.WriteWord(GetReg(Rd), RAM.ReadByte(address));
     }
     else
     {
         Regs.WriteWord(GetReg(Rd), RAM.ReadWord(address));
     }
 }
Beispiel #11
0
        //Extract the operands op1, op2, op3 from the command
        void CalculateOperands()
        {
            opn = Regs.ReadWord(GetReg(Rn)); //What is stored in Rn
            if (Rn == 15)
            {
                opn += 8;
            }

            opd = Regs.ReadWord(GetReg(Rd)); //What is stored in Rd
            op3 = IBit ? CalulateImmediateOperand3() : CalculateRegisterOperand3();
        }
Beispiel #12
0
 //stores the values in the active registers in reglist[] into the address pinted to by Rn
 //while decrementing the value Rn before the store process
 void Store() //push
 {
     for (int i = regList.Length - 1; i >= 0; i--)
     {
         if (regList[i])
         {
             address -= 4;
             RAM.WriteWord(address, Regs.ReadWord(GetReg(i)));
         }
     }
 }
        private void SetSelectEffect(Regs reg, bool b)
        {
            var ItemContainer = gridView2.ContainerFromItem(reg);
            var selectedItem  = ItemContainer as ListViewItem;

            if (selectedItem != null)
            {
                var grid  = selectedItem.ContentTemplateRoot as Grid;
                var block = (TextBlock)VisualTreeHelper.GetChild(grid, 0);
                block.Foreground = b ? new SolidColorBrush(Colors.Yellow) : (Application.Current.Resources["SystemColorWindowTextColor"] as SolidColorBrush);
                //(IsLightTheme() ? new SolidColorBrush(Colors.Black) : new SolidColorBrush(Colors.White))
            }
        }
Beispiel #14
0
        //Change the value of the program counter,
        //if L is true, store previous PC value in R14
        public override void Execute()
        {
            if (isRet)
            {
                ExecuteReturn();
                return;
            }

            if (link)
            {
                Regs.WriteWord(GetReg(14), Regs.ReadWord(Reg.R15));
            }
            Regs.WriteWord(Reg.R15, address);
        }
Beispiel #15
0
        //caculated and returns the reister operand
        int CalulateRegValue()
        {
            char Rm = (char)ExtractBits(code, 0, 3);

            int val = Regs.ReadWord(GetReg(Rm));

            if (Rm == 15)
            {
                val += 8;
            }

            strVal = "r" + (int)Rm;
            return(val);
        }
Beispiel #16
0
        //Transfers value from CPSR or SPSR of the current mode into a general purpose register
        public override void Execute()
        {
            int value = Regs.ReadWord(Reg.CPSR);
            if (RBit)
            {
                char mode = CheckMode();
                if (mode == 'V') //supervisor
                    value = Regs.ReadWord(Reg.LR_SVC);
                else if (mode == 'R') //irq
                    value = Regs.ReadWord(Reg.LR_IRQ);
            }

            Regs.WriteWord(GetReg(Rd), value);
        }
Beispiel #17
0
        //Executes instruction by either store or load
        public override void Execute()
        {
            if (L)
            {
                Load();
            }
            else
            {
                Store();
            }

            if (W)
            {
                Regs.WriteWord(GetReg(Rn), address);
            }
        }
Beispiel #18
0
        //Calculate the address to jump to relative to PC
        void ProcessBranchAddress()
        {
            int pc = Regs.ReadWord(Reg.R15);

            link = TestFlag(code, 24);
            sign = TestFlag(code, 23);

            offset = ExtractBits(code, 0, 22);

            if (sign)
            {
                uint mask = 0xFFF00000;
                offset |= (int)mask; //mask to convert to signed FF000000
            }
            offset <<= 2;
            address  = pc + 8 + offset;
        }
Beispiel #19
0
        public uint Get(Regs reg)
        {
            switch (reg)
            {
            case Regs.EAX: return(EAX);

            case Regs.EBX: return(EBX);

            case Regs.ECX: return(ECX);

            case Regs.EDX: return(EDX);

            case Regs.ESP: return(ESP);

            case Regs.EBP: return(EBP);
            }
            throw new ArgumentException("Unknown register");
        }
Beispiel #20
0
 //transfers the value of a general-purpose register or an
 //immediate constant to the CPSR or the SPSR of the current mode.
 public override void Execute()
 {
     if (RBit)
     {
         char mode = CheckMode();
         if (mode == 'V')
         { //supervisor
             Regs.WriteWord(Reg.SPSR_SVC, value);
         }
         else if (mode == 'R')
         { //irq
             Regs.WriteWord(Reg.SPSR_IRQ, value);
         }
     }
     else
     {
         Regs.WriteWord(Reg.CPSR, value);
     }
 }
Beispiel #21
0
        //Stores value from register Rd in 'address'
        void Store()
        {
            if (B)
            {
                int storeVal = Regs.ReadWord(GetReg(Rd));
                if (Rd == 15)
                {
                    storeVal += 8;
                }
                RAM.WriteByte(address, (byte)storeVal);
            }
            else
            {
                int storeVal = Regs.ReadWord(GetReg(Rd));
                if (Rd == 15)
                {
                    storeVal += 8;
                }

                RAM.WriteWord(address, storeVal);
            }
        }
Beispiel #22
0
        //Calcultes and returns the register shift operand
        int CalculateRegisterOperand3()
        {
            int shiftVal;

            Rm = (char)ExtractBits(code, 0, 3);
            char Sh   = (char)ExtractBits(code, 5, 6);
            bool bit4 = TestFlag(code, 4);
            char Rs   = '0';

            strShift = "r" + (int)Rm;

            if (!bit4)
            {
                shiftVal = ExtractBits(code, 7, 11);
            }
            else
            {
                Rs       = (char)ExtractBits(code, 8, 11);
                shiftVal = Regs.ReadWord(GetReg(Rs));
                if (Rs == 15)
                {
                    shiftVal += 8;
                }
            }
            if (shiftVal != 0)
            {
                strShift += ", " + BarrelShifter.CodeToString(Sh) + (bit4 ? " r" + (int)Rs : " #" + shiftVal);
            }

            int val = Regs.ReadWord(GetReg(Rm));

            if (Rm == 15)
            {
                val += 8;
            }

            return(BarrelShifter.ShiftByCode(val, shiftVal, Sh));
        }
Beispiel #23
0
        /// <returns>Register was changed</returns>
        public bool Set(Regs reg, uint value)
        {
            uint old;

            switch (reg)
            {
            case Regs.EAX: old = EAX; EAX = value; break;

            case Regs.EBX: old = EBX; EBX = value; break;

            case Regs.ECX: old = ECX; ECX = value; break;

            case Regs.EDX: old = EDX; EDX = value; break;

            case Regs.ESP: old = ESP; ESP = value; break;

            case Regs.EBP: old = EBP; EBP = value; break;

            default:
                throw new ArgumentException("Unknown register");
            }
            return(old != value);
        }
Beispiel #24
0
        //Decodes loadstore instruction for 'code' parent variable and returns
        //itself as a fully populated instruction ready for execution
        public override Instruction Decode()
        {
            IBit = TestFlag(code, 25);
            P    = TestFlag(code, 24);
            U    = TestFlag(code, 23);
            B    = TestFlag(code, 22);
            W    = TestFlag(code, 21);
            L    = TestFlag(code, 20);
            Rn   = (char)ExtractBits(code, 16, 19);
            Rd   = (char)ExtractBits(code, 12, 15);

            int regContent = Regs.ReadWord(GetReg(Rn));

            if (Rn == 15)
            {
                regContent += 8;
            }

            offset = !IBit?DecodeImmediateOffset() : DecodeRegisterOffset();

            address = P ? regContent + offset : regContent;

            return(this);
        }
Beispiel #25
0
        public Regs RegsGrid(String CemexId)
        {
            Regs userse = new Regs();
            var param = new List<SqlParameter>();
            param.Add(new SqlParameter("@CemexId", CemexId));
            IRdmsConnection cnn = new SqlRdmsConnection<UserIdDTO>(UtilSh.strCnn2, "dbo.GetPermission", param);
            var result = cnn.Execute(true, CommandType.StoredProcedure);
            var res = (from r in result
                       select (UserIdDTO)r).ToArray();
            param.Clear();
            string connectionString = UtilSh.strCnn2;/* System.Configuration.ConfigurationManager.ConnectionStrings["cnnSql2"].ToString();*/
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand command = new SqlCommand())
                {
                    command.Connection = connection;
                    command.CommandText = "Exec dbo.RegsGrid @User="******"ID"]);
                            user.Llave = Convert.ToString(dataReader["Llave"]);
                            user.CodCliente = Convert.ToString(dataReader["CodCliente"]);
                            user.NCliente = Convert.ToString(dataReader["NCliente"]);
                            user.Pais = Convert.ToString(dataReader["Pais"]);
                            user.Cupo = Convert.ToString(dataReader["Cupo"]);
                            user.CupoOtorgado = Convert.ToString(dataReader["CupoOtorgado"]);
                            user.Plazo = Convert.ToString(dataReader["Plazo"]);
                            user.PlazoOtorgado = Convert.ToString(dataReader["PlazoOtorgado"]);
                            user.Tipo = Convert.ToString(dataReader["Tipo"]);
                            user.Estado = Convert.ToString(dataReader["Estado"]);
                            user.Vice = Convert.ToString(dataReader["Vice"]);
                            user.SolCre = Convert.ToString(dataReader["SolCre"]);
                            user.Pagare = Convert.ToString(dataReader["Pagare"]);
                            user.Cedula = Convert.ToString(dataReader["Cedula"]);
                            user.Camara = Convert.ToString(dataReader["Camara"]);
                            user.Rut = Convert.ToString(dataReader["Rut"]);
                            user.Comentarios = Convert.ToString(dataReader["Comentarios"]);
                            user.Fecha = Convert.ToString(dataReader["Fecha"]);
                            user.Hora = Convert.ToString(dataReader["Hora"]);
                            user.ComentarioCredito = Convert.ToString(dataReader["ComentarioCredito"]);
                            user.Comercial = Convert.ToString(dataReader["Comercial"]);
                            userse.Add(user);
                        }
                    }

                    //Convert.ToInt32(paramTotalRecords.Value);
                }
            }
            /* param = new List<SqlParameter>();
             param.Add(new SqlParameter("@User", CemexId));
             cnn = new SqlRdmsConnection<RegDTO>(UtilSh.strCnn2, "dbo.RegsGrid",param);//Procedimiento almacenado para inserción de solicitudes.
             var result2 = cnn.Execute(true, CommandType.StoredProcedure);
             var res2 = (from r in result2
                        select (RegDTO)r).ToArray();
             foreach(var x in res2)
             {
                 userse.Add(x);
             }*/
            return userse;
        }
Beispiel #26
0
 private static bool x8(Regs regs)
 {
     return regs.e || regs.p.x;
 }
Beispiel #27
0
 public static Match Match(string input, Regs regex)
 {
     return Regexes[(int)regex].Match(input);
 }
Beispiel #28
0
 // Rn - op3 and store in Rd
 void SUB()
 {
     Regs.WriteWord(GetReg(Rd), opn - op3);
 }
Beispiel #29
0
 // rn logical OR op3 store in rd
 void ORR()
 {
     //rd = rn || op3
     Regs.WriteWord(GetReg(Rd), opn | op3);
 }
Beispiel #30
0
 // op3 - Rn and store in Rd
 void RSB()
 {
     Regs.WriteWord(GetReg(Rd), op3 - opn);
 }
Beispiel #31
0
 //bit clear rd = rn & ~op3
 void BIC()
 {
     Regs.WriteWord(GetReg(Rd), opn & ~op3);
 }
Beispiel #32
0
 // move NOT op3 into rd
 void MVN()
 {
     Regs.WriteWord(GetReg(Rd), ~op3);
 }
Beispiel #33
0
 public static Regs GetUsers()
 {
     Regs userse = new Regs();
     ServHCR shcr = new ServHCR();
     userse = shcr.RegsGrid(HttpContext.Current.User.Identity.Name);
     return userse;
 }
Beispiel #34
0
 private static bool a8(Regs regs)
 {
     return regs.e || regs.p.m;
 }
Beispiel #35
0
 disassembly : $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out _) : "---")} ".PadRight(50),