Beispiel #1
0
        static private void Read(LadderNetworkViewModel lnvmodel)
        {
            int sz = ReadE32();

            sz += eid;
            if ((option & OPTION_COMMENT) != 0)
            {
                lnvmodel.NetworkBrief = ReadTextE8();
            }
            lnvmodel.RowCount = edata[eid++];
            int le = (lnvmodel.RowCount * GlobalSetting.LadderXCapacity) >> 2;

            for (int y = 0; y < lnvmodel.RowCount; y++)
            {
                for (int x = 0; x < GlobalSetting.LadderXCapacity; x++)
                {
                    int p  = y * GlobalSetting.LadderXCapacity + x;
                    int p1 = p >> 2;
                    int p2 = (p & 3) * 2;
                    if ((edata[eid + p1] & (1 << p2)) != 0)
                    {
                        HorizontalLineViewModel hlvmodel = new HorizontalLineViewModel();
                        hlvmodel.X = x; hlvmodel.Y = y;
                        lnvmodel.ReplaceElement(hlvmodel);
                    }
                    if ((edata[eid + p1] & (1 << (p2 + 1))) != 0)
                    {
                        VerticalLineViewModel vlvmodel = new VerticalLineViewModel();
                        vlvmodel.X = x; vlvmodel.Y = y;
                        lnvmodel.ReplaceVerticalLine(vlvmodel);
                    }
                }
            }
            while (eid < sz)
            {
                BaseViewModel bvmodel = null;
                int           x       = edata[eid++];
                int           y       = edata[eid++];
                int           catalog = LadderInstViewModelPrototype.GetCatalogFromOrder(edata[eid++]);
                bvmodel   = LadderInstViewModelPrototype.Clone(catalog);
                bvmodel.X = x;
                bvmodel.Y = y;
                for (int i = 0; i < bvmodel.Model.ParaCount; i++)
                {
                    IValueModel ivmold = bvmodel.Model.GetPara(i);
                    IValueModel ivmnew = regs[ReadE16()];
                    if (ivmnew is DWordValue || ivmnew is DDoubleWordValue || ivmnew is DFloatValue)
                    {
                        if (ivmold is WordValue)
                        {
                            ivmnew = new DWordValue(ivmnew.Index, ivmnew.Offset);
                        }
                        if (ivmold is DoubleWordValue)
                        {
                            ivmnew = new DDoubleWordValue(ivmnew.Index, ivmnew.Offset);
                        }
                        if (ivmold is FloatValue)
                        {
                            ivmnew = new DFloatValue(ivmnew.Index, ivmnew.Offset);
                        }
                    }
                    bvmodel.Model.SetPara(i, ivmnew);
                }
                lnvmodel.ReplaceElement(bvmodel);
            }
            InstructionCommentManager.RaiseMappedMessageChangedEvent();
        }
Beispiel #2
0
        unsafe static private void ReadRegisters()
        {
            int sz = ReadE16();

            for (int i = 0; i < sz; i++)
            {
                UploadRegisterType type    = (UploadRegisterType)(edata[eid++]);
                IValueModel        ivmodel = null;
                switch (type)
                {
                case UploadRegisterType.K:
                    ivmodel = new KWordValue(ReadE16());
                    break;

                case UploadRegisterType.K32:
                    ivmodel = new KDoubleWordValue(ReadE32());
                    break;

                case UploadRegisterType.H:
                    ivmodel = new HWordValue(ReadE16());
                    break;

                case UploadRegisterType.H32:
                    ivmodel = new HDoubleWordValue(ReadE32());
                    break;

                case UploadRegisterType.F:
                    int value = ReadE32();
                    ivmodel = new KFloatValue(*(float *)(&value));
                    break;

                case UploadRegisterType.STR:
                    ivmodel = new StringValue(ReadTextE8());
                    break;
                }
                if (ivmodel == null)
                {
                    int index = ReadE16();
                    UploadRegisterType itype = (UploadRegisterType)(edata[eid++]);
                    int       iindex         = edata[eid++];
                    WordValue intra          = null;
                    switch (itype)
                    {
                    case UploadRegisterType.V:
                        intra = new VWordValue((uint)iindex);
                        break;

                    case UploadRegisterType.Z:
                        intra = new ZWordValue((uint)iindex);
                        break;

                    default:
                        intra = WordValue.Null;
                        break;
                    }
                    switch (type)
                    {
                    case UploadRegisterType.X:
                        ivmodel = new XBitValue((uint)index, intra);
                        break;

                    case UploadRegisterType.Y:
                        ivmodel = new YBitValue((uint)index, intra);
                        break;

                    case UploadRegisterType.S:
                        ivmodel = new SBitValue((uint)index, intra);
                        break;

                    case UploadRegisterType.M:
                        ivmodel = new MBitValue((uint)index, intra);
                        break;

                    case UploadRegisterType.C:
                        ivmodel = new CBitValue((uint)index, intra);
                        break;

                    case UploadRegisterType.T:
                        ivmodel = new TBitValue((uint)index, intra);
                        break;

                    case UploadRegisterType.D:
                        ivmodel = new DWordValue((uint)index, intra);
                        break;

                    case UploadRegisterType.AI:
                        ivmodel = new AIWordValue((uint)index, intra);
                        break;

                    case UploadRegisterType.AO:
                        ivmodel = new AOWordValue((uint)index, intra);
                        break;

                    case UploadRegisterType.CV:
                        ivmodel = new CVWordValue((uint)index, intra);
                        break;

                    case UploadRegisterType.TV:
                        ivmodel = new TVWordValue((uint)index, intra);
                        break;

                    case UploadRegisterType.CV32:
                        ivmodel = new CV32DoubleWordValue((uint)index, intra);
                        break;

                    case UploadRegisterType.V:
                        ivmodel = new VWordValue((uint)index);
                        break;

                    case UploadRegisterType.Z:
                        ivmodel = new ZWordValue((uint)index);
                        break;
                    }
                }
                regs.Add(ivmodel);
                if ((option & OPTION_COMMENT) != 0)
                {
                    string comment = ReadTextE8();
                    ValueCommentManager.UpdateComment(ivmodel, comment);
                }
            }
        }