Ejemplo n.º 1
0
        public void DataMovOperationsTests_StoreValueInRegisterToMemory_Success()
        {
            // Set register state to Registers[0,0,4,16,0,0,0,0]
            micro.MicroRegisters.SetRegisterValue(2, "04");
            micro.MicroRegisters.SetRegisterValue(3, "10");

            Console.WriteLine(micro.MicroRegisters);
            Assert.AreEqual("Registers[0,0,4,16,0,0,0,0]", micro.MicroRegisters.ToString());

            string memoryAddress1 = UnitConverter.IntToBinary(50);
            string memoryAddress2 = UnitConverter.IntToBinary(51);

            Console.WriteLine($"Memory1: {UnitConverter.BinaryToInt(memoryAddress1)}");
            Console.WriteLine($"Memory1: {UnitConverter.BinaryToInt(memoryAddress2)}");

            // {F2} STORE mem, Ra    [mem] <- R[Ra]
            MCInstructionF2 i1 = new MCInstructionF2(3, "00011", "010", memoryAddress1);
            MCInstructionF2 i2 = new MCInstructionF2(3, "00011", "011", memoryAddress2);

            // execute store
            InstructionSetExe.ExecuteInstruction(i1, micro);
            InstructionSetExe.ExecuteInstruction(i2, micro);

            Console.WriteLine($"VirtualMemory #{UnitConverter.BinaryToInt(memoryAddress1)}: " +
                              $"{UnitConverter.HexToInt(micro.ReadFromMemory(UnitConverter.BinaryToInt(memoryAddress1)))}");
            Console.WriteLine($"VirtualMemory #{UnitConverter.BinaryToInt(memoryAddress2)}: " +
                              $"{UnitConverter.HexToInt(micro.ReadFromMemory(UnitConverter.BinaryToInt(memoryAddress2)))}");

            Assert.AreEqual(4, UnitConverter.HexToInt(micro.ReadFromMemory(
                                                          UnitConverter.BinaryToInt(memoryAddress1)
                                                          )));
            Assert.AreEqual(16, UnitConverter.HexToInt(micro.ReadFromMemory(
                                                           UnitConverter.BinaryToInt(memoryAddress2)
                                                           )));
        }
Ejemplo n.º 2
0
        public void FlowControlOperationsTests_GRT_Success2()
        {
            // GRT Ra, Rb {F1} Cond <- R[Ra] > R[Rb]
            string ra = "001";          // 1
            string rb = "010";          // 2

            string valInA = "00000101"; // 5
            string valInB = "00000111"; // 7

            bool result = false;

            // set data in register
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(ra),
                UnitConverter.BinaryToHex(valInA));

            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rb),
                UnitConverter.BinaryToHex(valInB));

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual($"Registers[0,5,7,0,0,0,0,0]", micro.MicroRegisters.ToString());

            // start instruction
            MCInstructionF1 instructionF1 = new MCInstructionF1(4, "11001", ra, rb);

            Console.WriteLine(instructionF1);

            InstructionSetExe.ExecuteInstruction(instructionF1, micro);

            Console.WriteLine(micro);

            Assert.AreEqual(result, micro.ConditionalBit);
        }
Ejemplo n.º 3
0
        public MCInstructionF1(ushort decimalAddress, string opCodeBinary, string Ra, string Rb = null, string Rc = null)
        {
            OpCode = (byte)UnitConverter.BinaryToInt(opCodeBinary);

            this.Ra = Ra == null || Ra.Length == 0 ? (byte)0 : UnitConverter.BinaryToByte(Ra);
            this.Rb = Rb == null ? (byte)0 : UnitConverter.BinaryToByte(Rb);
            this.Rc = Rc == null ? (byte)0 : UnitConverter.BinaryToByte(Rc);

            InstructionAddressDecimal = decimalAddress;
        }
Ejemplo n.º 4
0
        public void DataMovOperationsTests_STOREFrom0_Success()
        {
            string addrs = "00000010";
            // STORE R0 02
            MCInstructionF2 i1 = new MCInstructionF2(3, "00011", "000", addrs);

            InstructionSetExe.ExecuteInstruction(i1, micro);

            Assert.AreEqual("00", micro.ReadFromMemory(
                                UnitConverter.BinaryToInt(addrs)
                                ));
        }
Ejemplo n.º 5
0
        public void LogicOperationsTests_OR_Success()
        {
            // AND Ra, Rb, Rc {F1} R[Ra]<- R[Rb]*R[Rc]
            string ra = "001"; // 1
            string rb = "011"; // 3
            string rc = "111"; // 7

            string valInB = "00100100";

            string valInC = "11101111";

            string resultA = "11101111";

            // set data in register
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rb),
                UnitConverter.BinaryToHex(valInB));

            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rc),
                UnitConverter.BinaryToHex(valInC));

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.BinaryToHex(valInB),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb))
                );

            Assert.AreEqual(
                UnitConverter.BinaryToHex(valInC),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rc))
                );

            MCInstructionF1 i1 = new MCInstructionF1(3, "01100", ra, rb, rc);

            Console.WriteLine(i1);

            // execute instruction
            InstructionSetExe.ExecuteInstruction(i1, micro);

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.BinaryToHex(resultA),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))
                );
        }
        public void InstructionSetExeTester_SUB_Success()
        {
            // ADD Ra, Rb, Rc {F1} R[Ra]<- R[Rb]+R[Rc] 
            string ra = "110"; // 6
            string rb = "011"; // 3
            string rc = "101"; // 5

            sbyte valInB = 20;
            sbyte valInC = 83;

            sbyte resultA = (sbyte)(valInB - valInC);

            // set data in register
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rb),
                UnitConverter.IntToHex(valInB));

            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rc),
                UnitConverter.IntToHex(valInC));

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.IntToHex(valInB),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb))
                );

            Assert.AreEqual(
                UnitConverter.IntToHex(valInC),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rc))
                );

            MCInstructionF1 i1 = new MCInstructionF1(3, "01000", ra, rb, rc);

            InstructionSetExe.ExecuteInstruction(i1, micro);

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.ByteToHex(resultA),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))
                );
        }
        public void InstructionSetExeTester_SUBIM_Success()
        {
            // SUBIM Ra,  cons {F2} R[Ra] <- R[Ra]-cons 
            string ra = "001"; // 1

            sbyte valInA = 20;
            sbyte constVal = -33;

            sbyte resultA = (sbyte)(valInA - constVal);

            // set data in register
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(ra),
                UnitConverter.ByteToHex(valInA));

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.IntToHex(valInA),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))
                );

            MCInstructionF2 i2 = new MCInstructionF2(3, "01010", ra,
                UnitConverter.ByteToBinary(constVal)
                );
            Console.WriteLine(i2);

            // execute instruction

            InstructionSetExe.ExecuteInstruction(i2, micro);

            Console.WriteLine(micro.MicroRegisters);
            Console.WriteLine($"Result in 0x{UnitConverter.ByteToHex((byte)resultA)}");
            Console.WriteLine($"Result in binary: {UnitConverter.ByteToHex((byte)resultA)}");

            Assert.AreEqual(
                UnitConverter.ByteToHex((byte)resultA),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))
                );
        }
Ejemplo n.º 8
0
        public void LogicOperationsTests_NOT_Success()
        {
            // NOT Ra,Rb {F1}   R[Ra] <- Complement(R[Rb])
            string ra = "001"; // 1
            string rb = "011"; // 3

            string valInB = "00100100";

            string resultA = "11011011";

            // set data in register
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rb),
                UnitConverter.BinaryToHex(valInB));

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.BinaryToHex(valInB),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb))
                );

            MCInstructionF1 i1 = new MCInstructionF1(3, "01110", ra, rb);

            Console.WriteLine(i1);

            // execute instruction
            InstructionSetExe.ExecuteInstruction(i1, micro);

            Console.WriteLine(micro.MicroRegisters);

            Console.WriteLine($"Expected: {UnitConverter.BinaryToHex(resultA)}," +
                              $"Actual: {micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))}");

            Assert.AreEqual(
                UnitConverter.BinaryToHex(resultA),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))
                );
        }
        public void InstructionSetExeTester_ADDIM_Success()
        {
            // ADDIM Ra, cons {F2} R[Ra] <- R[Ra]+cons
            string ra = "110"; // 6

            sbyte valInA = 20;
            sbyte constVal = -33;

            sbyte resultA = (sbyte)(valInA + constVal);

            // set data in register
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(ra),
                UnitConverter.ByteToHex(valInA));

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.ByteToHex(valInA),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))
                );

            MCInstructionF2 i2 = new MCInstructionF2(3, "01001", ra,
                UnitConverter.ByteToBinary(constVal)
                );

            Console.WriteLine(i2);

            InstructionSetExe.ExecuteInstruction(i2, micro);

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.ByteToHex(resultA),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra))
                );
        }
Ejemplo n.º 10
0
        public void LogicOperationsTests_ROTAL_Success()
        {
            // ROTAL Ra, Rb, Rc {F1} R[Ra]<- R[Rb] rtl R[Rc]
            string ra1 = "001"; // 1
            string rb1 = "010"; // 2
            string rc1 = "011"; // 3

            string ra2 = "101"; // 5
            string rb2 = "110"; // 6
            string rc2 = "111"; // 7


            MCInstructionF1 i1 = new MCInstructionF1(3, "10011", ra1, rb1, rc1);
            MCInstructionF1 i2 = new MCInstructionF1(3, "10011", ra2, rb2, rc2);

            string valInB1  = "10111100";
            string valInC1  = UnitConverter.ByteToBinary(2);
            string resultA1 = "11110010";

            string valInB2  = "10011100";
            string valInC2  = UnitConverter.ByteToBinary(2);
            string resultA2 = "01110010";


            // set data in register
            ////////////
            /// Test 1
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rb1),
                UnitConverter.BinaryToHex(valInB1));

            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rc1),
                UnitConverter.BinaryToHex(valInC1));
            ////////////

            ////////////
            /// Test 2
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rb2),
                UnitConverter.BinaryToHex(valInB2));

            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rc2),
                UnitConverter.BinaryToHex(valInC2));
            ///////////

            Console.WriteLine(micro.MicroRegisters);

            // Assert Registers
            Assert.AreEqual("Registers[0,0,-68,2,0,0,-100,2]",
                            micro.MicroRegisters.ToString());
            Console.WriteLine(i1);
            Console.WriteLine(i2);

            // execute instruction
            InstructionSetExe.ExecuteInstruction(i1, micro);
            InstructionSetExe.ExecuteInstruction(i2, micro);

            Console.WriteLine(micro.MicroRegisters);

            Console.WriteLine($"Expected1: {UnitConverter.BinaryToHex(resultA1)}," +
                              $"Actual: {micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra1))}");
            Console.WriteLine($"Expected1: {UnitConverter.HexToBinary(micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra1)))}");

            Console.WriteLine($"Expected2: {UnitConverter.BinaryToHex(resultA2)}," +
                              $"Actual: {micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra2))}");
            Console.WriteLine($"Expected2: {UnitConverter.HexToBinary(micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra2)))}");

            Assert.AreEqual(
                UnitConverter.BinaryToHex(resultA1),
                micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra1))
                );

            Assert.AreEqual(
                UnitConverter.BinaryToHex(resultA2),
                micro.MicroRegisters.GetRegisterValue(UnitConverter.BinaryToByte(ra2))
                );
        }
Ejemplo n.º 11
0
        public void LogicOperationsTests_NEG_Success()
        {
            // NEG Ra,Rb {F1} R[Ra]<- - R[Rb]
            string ra1 = "001"; // 1
            string rb1 = "011"; // 3

            string ra2 = "110"; // 6
            string rb2 = "111"; // 7


            string valInB1  = UnitConverter.ByteToBinary(-13);
            string resultA1 = UnitConverter.ByteToBinary(13);

            string valInB2  = UnitConverter.ByteToBinary(-45);
            string resultA2 = UnitConverter.ByteToBinary(45);


            // set data in register
            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rb1),
                UnitConverter.BinaryToHex(valInB1));

            micro.MicroRegisters.SetRegisterValue(
                (byte)UnitConverter.BinaryToInt(rb2),
                UnitConverter.BinaryToHex(valInB2));

            Console.WriteLine(micro.MicroRegisters);

            Assert.AreEqual(
                UnitConverter.BinaryToHex(valInB1),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb1))
                );

            Assert.AreEqual(
                UnitConverter.BinaryToHex(valInB2),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(rb2))
                );

            MCInstructionF1 i1 = new MCInstructionF1(3, "01111", ra1, rb1);
            MCInstructionF1 i2 = new MCInstructionF1(3, "01111", ra2, rb2);

            Console.WriteLine(i1);
            Console.WriteLine(i2);

            // execute instruction
            InstructionSetExe.ExecuteInstruction(i1, micro);
            InstructionSetExe.ExecuteInstruction(i2, micro);

            Console.WriteLine(micro.MicroRegisters);

            Console.WriteLine($"Expected1: {UnitConverter.BinaryToHex(resultA1)}," +
                              $"Actual: {micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra1))}");
            Console.WriteLine($"Expected2: {UnitConverter.BinaryToHex(resultA2)}," +
                              $"Actual: {micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra2))}");

            Assert.AreEqual(
                UnitConverter.BinaryToHex(resultA1),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra1))
                );

            Assert.AreEqual(
                UnitConverter.BinaryToHex(resultA2),
                micro.MicroRegisters.GetRegisterValue((byte)UnitConverter.BinaryToInt(ra2))
                );
        }