public void WillBeAbleToCreateEachOpCode(OpCodeItem opCode)
        {
            var addressMode = addressModeFactory.Create(opCode.Mode);

            addressMode.Should().NotBeNull();

            addressMode.Name.Should().Be(opCode.Mode);
        }
Example #2
0
        /// <summary>
        /// Add a library inherited from <see>IMuftecClassLibrary</see>
        /// </summary>
        /// <param name="classLibrary">Class containing opcodes</param>
        public void AddLibrary(IMuftecClassLibrary classLibrary)
        {
            // Ignore if already loaded
            if (_libraryList.Contains(classLibrary)) return;

            // Get all opcode methods
            var methods = classLibrary.Classes.SelectMany(t => t.GetMethods()).Where(m => m.GetCustomAttributes(typeof(OpCodeAttribute), false).Length > 0);

            // Add opcodes to index
            foreach (var info in methods)
            {
                var code = info.GetCustomAttributes(typeof(OpCodeAttribute), false).FirstOrDefault() as OpCodeAttribute;
                if (code != null)
                {
                    var opc = (OpCodePointer)Delegate.CreateDelegate(typeof(OpCodePointer), info);
                    var opi = new OpCodeItem {Attribute = code, Pointer = opc};

                    try
                    {
                        AddOpToCache(opi);
                    }
                    catch (ArgumentException)
                    {
                        // OpCode already exists, ignore
                        if (!Shared.IsDebug()) continue;
                    }
                }

                Console.WriteLine();
            }

            // Add fixed defines to index
            foreach (var def in classLibrary.Defines)
            {
                if (_globalDefineList.ContainsKey(def.Key))
                {
                    _globalDefineList[def.Key] = def.Value;
                }
                else
                {
                    _globalDefineList.Add(def.Key, def.Value);
                }
            }

            // Add to library list
            _libraryList.Add(classLibrary);
        }
Example #3
0
        /// <summary>
        /// Add an opcode to the cache.
        /// </summary>
        /// <param name="pointer">Opcode pointer to add.</param>
        private void AddOpToCache(OpCodePointer pointer)
        {
            var newItem = new OpCodeItem
            {
                Pointer = pointer,
                Attribute = pointer.Method.GetCustomAttributes(typeof(OpCodeAttribute), false).FirstOrDefault() as OpCodeAttribute
            };

            AddOpToCache(newItem);
        }
Example #4
0
        /// <summary>
        /// Add an opcode to the cache.
        /// </summary>
        /// <param name="item">Opcode item to add.</param>
        private void AddOpToCache(OpCodeItem item)
        {
            _opcodeCache.Add(item.Attribute.OpCodeName, item);

            if (item.Attribute.Aliases != null)
            {
                foreach (var alias in item.Attribute.Aliases)
                {
                    _opcodeCache.Add(alias, item);
                }
            }
        }
        public void WillConvertToOpCodeCorrectly(OpCodeItem expectedOpCode)
        {
            var opCodes = opCodeReader.GetAll();

            opCodes.Should().ContainEquivalentOf(expectedOpCode);
        }
        public void CanReturnOpCodeByAddress(OpCodeItem opCode)
        {
            var returnedOpCode = opCodeReader.Get(opCode.Value);

            returnedOpCode.Should().BeEquivalentTo(opCode);
        }