Пример #1
0
        public GXDebugItem ReadPgmTrace(GXDebugItem dbgItem, byte cmd)
        {
            dbgItem         = dbgItem ?? new GXDebugItem();
            dbgItem.MsgType = GXDebugMsgType.PGM_TRACE;
            dbgItem.DbgInfo = dbgItem.DbgInfo ?? new GXDebugInfoLocal();
            dbgItem.ArgObj  = null;

            GXDebugMsgType cmdMsgType = (GXDebugMsgType)cmd;
            bool           hasSId     = (cmd & 0x30) == GXDebugMsgType.TRACE_HAS_SID.ToByte();
            bool           hasLine1   = (cmd & 0x0F) == GXDebugMsgType.TRACE_HAS_LINE1.ToByte();
            bool           hasCol     = cmdMsgType.HasFlag(GXDebugMsgType.TRACE_HAS_COL);

            dbgItem.Ticks = ReadScaledLong();
            if (hasSId)
            {
                dbgItem.DbgInfo.SId = ReadVLUInt();
            }
            else
            {
                switch ((cmd >> 4) & 0x3)
                {
                case 0: dbgItem.DbgInfo.SId = LastSId; break;

                case 1: dbgItem.DbgInfo.SId = LastSId + 1; break;

                case 2: dbgItem.DbgInfo.SId = LastSId - 1; break;
                }
            }
            if (hasLine1)
            {
                dbgItem.Arg1 = ReadVLUInt();
            }
            else
            {
                byte difLine1 = (byte)(cmd & 0xF);
                if ((difLine1 & 0x08) == 0x08)
                {
                    difLine1 |= 0xF0;
                }
                dbgItem.Arg1 = LastLine1 + (sbyte)difLine1;
            }
            if (hasCol)
            {
                dbgItem.Arg2 = ReadVLUInt();
            }
            else
            {
                dbgItem.Arg2 = 0;
            }

            LastSId   = dbgItem.DbgInfo.SId;
            LastLine1 = dbgItem.Arg1;
            return(dbgItem);
        }
Пример #2
0
 public static byte ToByte(this GXDebugMsgType item)
 {
     return((byte)item);
 }
Пример #3
0
        private GXDebugItem mPush(GXDebugInfo dbgInfo, GXDebugMsgType msgType, int arg1, int arg2, object argObj = null)
        {
            lock (saveLock)
            {
                if (ToSave != null)
                {
                    Save(ToSave);
                    ToSave = null;
                }
                GXDebugItem currentItem = Current[dbgIndex];
                currentItem.DbgInfo = dbgInfo;
                currentItem.MsgType = msgType;
                currentItem.Arg1    = arg1;
                currentItem.Arg2    = arg2;
                currentItem.ArgObj  = argObj;
                switch (msgType)
                {
                case GXDebugMsgType.SYSTEM:
                {
                    switch ((GXDebugMsgCode)arg1)
                    {
                    case GXDebugMsgCode.INITIALIZE:
                    case GXDebugMsgCode.EXIT:
                    case GXDebugMsgCode.OBJ_CLEANUP:
                    case GXDebugMsgCode.PGM_INFO:
                        currentItem.Ticks = TICKS_NOT_NEEDED;
                        break;

                    default: currentItem.Ticks = TICKS_NOT_SET; break;
                    }
                }
                break;

                case GXDebugMsgType.REGISTER_PGM:
                {
                    currentItem.Ticks = TICKS_NOT_NEEDED;
                }
                break;

                default:
                    currentItem.Ticks = TICKS_NOT_SET;
                    break;
                }
                dbgIndex++;
                if (dbgIndex == Current.Length)
                {
                    bool mSaving = false;
                    lock (mSaveLock)
                    {
                        mSaving = saving;
                    }
                    if (mSaving)
                    {
                        waitSaveEvent.WaitOne();
                    }
                    ToSave = Current;
                    GXDebugItem[] swap = Current;
                    Current = Next;
                    Next    = swap;
                    pgmInfoTable.Clear();
                    dbgIndex = 0;
                }
                return(currentItem);
            }
        }