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); }
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); }
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); } }
public int GetLocalIndex(ARegister Reg) { if (!Locals.TryGetValue(Reg, out int Index)) { Generator.DeclareLocal(GetLocalType(Reg)); Index = LocalsCount++; Locals.Add(Reg, Index); } return(Index); }
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); }
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); }
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)); } }
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)); } } }
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); }
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); }
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()); } } }
public Type GetLocalType(ARegister Reg) => GetFieldType(Reg.Type);