예제 #1
0
        /// <summary>
        /// Функция, вызываемая при изменении пользователем текста в ячейке памяти.
        /// Помещает новое значение ячейки в память или выводит сообщение об ощибке, если введено некорректное число.
        /// </summary>
        /// <param name="row">Строка измененной ячейки.</param>
        /// <param name="collumn">Столбец измененной ячейки.</param>
        /// <param name="s">Строка, введенная в ячейку.</param>
        public void MemoryChanged(int row, int collumn, string s)
        {
            int num;

            try {
                num = Convert.ToInt32(s, 16);
                if (num > 255 || num < 0)
                {
                    _forms.First()?.ShowMessage("Число должно быть от 0 до FF");
                    _forms.ForEach(x => x.SetMemory(row, collumn, MemoryHex(row, collumn)));
                    return;
                }
            } catch {
                _forms.First()?.ShowMessage("Введено некорректное число");
                _forms.ForEach(x => x.SetMemory(row, collumn, MemoryHex(row, collumn)));
                return;
            }
            var bitArray = new ExtendedBitArray();

            CompilerSupport.FillBitArray(null, bitArray, num, 8);
            _memory[row * MemoryForm.ColumnCount + collumn] = bitArray;
            if (s.Length == 1)
            {
                s = "0" + s;
            }
            s = s.ToUpper();
            _forms.ForEach(x => x.SetMemory(row, collumn, s));
        }
예제 #2
0
        public void VideomemoryChange(int row, int column, object o)
        {
            if (o == null)

            {
                _form2.ShowMessage("Должно быть введено число от 0 до FF");
                _form2.SetMemory(row, column, VideomemoryHex(row, column));
                return;
            }
            string s = o.ToString();

            if (s.Length > 2)
            {
                _form2.ShowMessage("Должно быть введено число от 0 до FF");
                _form2.SetMemory(row, column, VideomemoryHex(row, column));
                return;
            }

            int num;

            try
            {
                num = Convert.ToInt32(s, 16);
                if (num > 255 || num < 0)
                {
                    _form2.SetMemory(row, column, VideomemoryHex(row, column));
                    return;
                }
            }
            catch
            {
                _form2.ShowMessage("Должно быть введено число от 0 до FF");
                _form2.SetMemory(row, column, VideomemoryHex(row, column));
                return;
            }
            var bitArray = new ExtendedBitArray();

            CompilerSupport.FillBitArray(null, bitArray, num, 8);
            _videomemory[row * VideomemoryForm.ColumnCount + column] = bitArray;
            if (s.Length == 1)
            {
                s = "0" + s;
            }
            s = s.ToUpper();
            _form2.SetMemory(row, column, s);


            if (IsRedraw())
            {
                ChangeTwoPixels(row, column);
                Draw();
            }

            UpdateForm();
        }
예제 #3
0
        public void FillAddressTest()
        {
            var inputs = new List <int> {
                8, 12, 43, 263
            };

            var lowOutputs = new List <ExtendedBitArray> {
                new ExtendedBitArray()
                {
                    [3] = true
                },
                new ExtendedBitArray()
                {
                    [2] = true, [3] = true
                },
                new ExtendedBitArray()
                {
                    [5] = true, [3] = true, [1] = true, [0] = true
                },
                new ExtendedBitArray()
                {
                    [2] = true, [1] = true, [0] = true
                }
            };

            var highOutputs = new List <ExtendedBitArray> {
                new ExtendedBitArray(),
                new ExtendedBitArray(),
                new ExtendedBitArray(),
                new ExtendedBitArray()
                {
                    [0] = true
                }
            };

            for (int i = 0; i < lowOutputs.Count; i++)
            {
                var highBitArray = new ExtendedBitArray();
                var lowBitArray  = new ExtendedBitArray();

                CompilerSupport.FillBitArray(highBitArray, lowBitArray, inputs[i], 10);

                for (int j = 0; j < 8; j++)
                {
                    Assert.AreEqual(lowOutputs[i][j], lowBitArray[j], $"low: i = {i}, j = {j}");
                    Assert.AreEqual(highOutputs[i][j], highBitArray[j], $"high: i = {i}, j = {j}");
                }
            }
        }