Exemplo n.º 1
0
        private void EmitLdloc(AILEmitter Context, int Index, ARegisterType Type)
        {
            ARegister Reg = new ARegister(Index, Type);

            Context.Generator.EmitLdloc(Context.GetLocalIndex(Reg));

            AILConv.EmitConv(Context, Context.GetLocalType(Reg), OperType);
        }
Exemplo n.º 2
0
        private void Form1_Load(object sender, EventArgs e)
        {
            string[] fr = File.ReadAllLines("reg_def.txt");
            foreach (string s in fr)
            {
                string[] dat = s.Split('#');
                if (dat[0] != "")
                {
                    string[] eq = dat[0].Split('=');
                    if (eq.Length == 2)
                    {
                        UInt16 ad = Convert.ToUInt16(eq[1].Trim(), 16);
                        if (ad <= 256)
                        {
                            regs[ad]         = new ARegister();
                            regs[ad].Name    = eq[0];
                            regs[ad].address = ad;
                            if (dat.Length > 1)
                            {
                                regs[ad].desc = dat[1];
                            }

                            ListViewItem lvi = new ListViewItem(string.Format("{0:X2}", ad));
                            lvi.SubItems.Add(regs[ad].Name);
                            lvi.SubItems.Add("");
                            lvi.SubItems.Add(regs[ad].desc);

                            listView1.Items.Add(lvi);
                        }
                    }
                }
            }

            listView2.Items.Add("Urms (V)");
            listView2.Items.Add("Irms (A)");
            listView2.Items.Add("Pmean(W)");
            //listView2.Items.Add("Qmean(Kvar)");
            //listView2.Items.Add("Smean(Kva)");
            listView2.Items.Add("PF");
            listView2.Items.Add("PmeanF(kW)");
            listView2.Items.Add("PmeanH(kW)");
            listView2.Items.Add("Phase (°)");
            listView2.Items.Add("Freq (Hz)");
            listView2.Items.Add("Temp (°C)");
            listView2.Items.Add("SYS");

            foreach (ListViewItem l in listView2.Items)
            {
                l.SubItems.Add("");
                l.SubItems.Add("");
                l.SubItems.Add("");
                l.SubItems.Add("");
            }

            button1_Click(sender, e);
        }
Exemplo n.º 3
0
        private void EmitLdloc(AILEmitter Context, int Index, ARegisterType RegisterType)
        {
            ARegister Reg = new ARegister(Index, RegisterType);

            Context.Generator.EmitLdloc(Context.GetLocalIndex(Reg));

            if (RegisterType == ARegisterType.Int &&
                RegisterSize == ARegisterSize.Int32)
            {
                Context.Generator.Emit(OpCodes.Conv_U4);
            }
        }
Exemplo n.º 4
0
        public int GetLocalIndex(ARegister Reg)
        {
            if (!Locals.TryGetValue(Reg, out int Index))
            {
                Generator.DeclareLocal(GetLocalType(Reg));

                Index = LocalsCount++;

                Locals.Add(Reg, Index);
            }

            return(Index);
        }
Exemplo n.º 5
0
        public void ARegisterInputs()
        {
            DataBus   bus     = new DataBus();
            SignalBus signals = new SignalBus();

            Register a = new ARegister(bus, signals);

            bus.Value  = 255;
            signals.AI = true;

            a.ReadFromBus();
            Assert.AreEqual(255, a.Value);
        }
Exemplo n.º 6
0
        public void ARegisterOutputs()
        {
            DataBus   bus     = new DataBus();
            SignalBus signals = new SignalBus();

            Register a = new ARegister(bus, signals);

            a.Value    = 255;
            signals.AO = true;

            a.WriteToBus();
            Assert.AreEqual(255, bus.Value);
        }
Exemplo n.º 7
0
        private void InitLocals()
        {
            int ParamsStart = ATranslatedSub.FixedArgTypes.Length;

            Locals = new Dictionary <ARegister, int>();

            for (int Index = 0; Index < Subroutine.Params.Count; Index++)
            {
                ARegister Reg = Subroutine.Params[Index];

                Generator.EmitLdarg(Index + ParamsStart);
                Generator.EmitStloc(GetLocalIndex(Reg));
            }
        }
Exemplo n.º 8
0
        private void LoadLocals(AILEmitter Context, long Inputs, ARegisterType BaseType)
        {
            for (int Bit = 0; Bit < 64; Bit++)
            {
                long Mask = 1L << Bit;

                if ((Inputs & Mask) != 0)
                {
                    ARegister Reg = AILEmitter.GetRegFromBit(Bit, BaseType);

                    Context.Generator.EmitLdarg(ATranslatedSub.StateArgIdx);
                    Context.Generator.Emit(OpCodes.Ldfld, Reg.GetField());

                    Context.Generator.EmitStloc(Context.GetLocalIndex(Reg));
                }
            }
        }
Exemplo n.º 9
0
        public void SumRegisterOutputsSumOfAAndB()
        {
            DataBus   bus     = new DataBus();
            SignalBus signals = new SignalBus();
            FlagBus   flagBus = new FlagBus();

            Register a   = new ARegister(bus, signals);
            Register b   = new BRegister(bus, signals);
            Register sum = new SumRegister(a, b, bus, signals, flagBus);

            a.Value = 200;
            b.Value = 100;

            signals.EO = true;
            sum.WriteToBus();

            Assert.AreEqual(44, bus.Value);
            Assert.IsTrue(flagBus.Carry);
        }
Exemplo n.º 10
0
        public void SumRegisterOutputsSubstractionOfAAndB()
        {
            DataBus   bus     = new DataBus();
            SignalBus signals = new SignalBus();
            FlagBus   flagBus = new FlagBus();

            Register a   = new ARegister(bus, signals);
            Register b   = new BRegister(bus, signals);
            Register sum = new SumRegister(a, b, bus, signals, flagBus);

            a.Value = 166;
            b.Value = 166;

            signals.EO = true;
            signals.SU = true;
            sum.WriteToBus();

            Assert.AreEqual(0, bus.Value);
            Assert.IsTrue(flagBus.Zero);
        }
Exemplo n.º 11
0
        private void StoreLocals(AILEmitter Context, long Outputs, ARegisterType BaseType)
        {
            for (int Bit = 0; Bit < 64; Bit++)
            {
                long Mask = 1L << Bit;

                if ((Outputs & Mask) != 0)
                {
                    ARegister Reg = AILEmitter.GetRegFromBit(Bit, BaseType);

                    Context.Generator.EmitLdarg(ATranslatedSub.RegistersArgIdx);
                    Context.Generator.EmitLdloc(Context.GetLocalIndex(Reg));

                    AILConv.EmitConv(
                        Context,
                        Context.GetLocalType(Reg),
                        Context.GetFieldType(Reg.Type));

                    Context.Generator.Emit(OpCodes.Stfld, Reg.GetField());
                }
            }
        }
Exemplo n.º 12
0
 public Type GetLocalType(ARegister Reg) => GetFieldType(Reg.Type);