Exemplo n.º 1
0
        public void SwTest1()
        {
            var instAddi1  = InstructionTypeFactory.CreateIType(C.OPIMM, 10, C.opOPIMMaddi, 0, 200);
            var instAddi2  = InstructionTypeFactory.CreateIType(C.OPIMM, 11, C.opOPIMMaddi, 0, 0xFFF);
            var instLui1   = InstructionTypeFactory.CreateUType(C.OPLUI, 11, 0xFFFF);
            var instStore1 = InstructionTypeFactory.CreateSType(C.OPSTORE, C.OPSTOREsw, 10, 11, 100);
            var instLoad1  = InstructionTypeFactory.CreateIType(C.OPLOAD, 12, C.OPLOADlwu, 10, 100);

            var program = new List <byte>();

            program.AddRange(instAddi1);    // x10 = x0 + 200
            program.AddRange(instAddi2);    // x11 = <Test Content>
            program.AddRange(instLui1);
            program.AddRange(instStore1);   // STORE x11 to address 100 + x10
            program.AddRange(instLoad1);    // x12 = LOAD (x10 + 100)


            core.Run(program);

            var register = core.Register;
            var x10      = register.ReadBlock(10);
            var x11      = register.ReadBlock(11);
            var x12      = register.ReadBlock(12);

            Assert.AreEqual(x10, new byte[] { 0xC8, 0x00, 0x00, 0x00 });
            Assert.AreEqual(x11, new byte[] { 0x00, 0xF0, 0xFF, 0x0F });
            Assert.AreEqual(x12, new byte[] { 0x00, 0xF0, 0xFF, 0x0F });
        }
Exemplo n.º 2
0
        public void ShWithMaxNegativeImmedateValueTest()
        {
            int value = 2048 * -1;
            var bytes = BitConverter.GetBytes(value);



            var instLui1 = InstructionTypeFactory.CreateUType(C.OPLUI, 10, 0xFF);
            //var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 10, C.opOPIMMaddi, 0, 0x7FF);   // 2K = 2047 = 0x7FF;
            var instAddi2  = InstructionTypeFactory.CreateIType(C.OPIMM, 11, C.opOPIMMaddi, 0, 0x07CD);
            var instStore1 = InstructionTypeFactory.CreateSType(C.OPSTORE, C.OPSTOREsh, 10, 11, 0xFFFFF8);
            var instLoad1  = InstructionTypeFactory.CreateIType(C.OPLOAD, 12, C.OPLOADlhu, 10, 0xFFFFF8);

            var program = new List <byte>();

            program.AddRange(instLui1);
            //program.AddRange(instAddi1);    // x10 = x0 + 200
            program.AddRange(instAddi2);    // x11 = <Test Content>
            program.AddRange(instStore1);   // STORE x11 to address 100 + x10
            program.AddRange(instLoad1);    // x12 = LOAD (x10 + 100)


            core.Run(program);

            var register = core.Register;
            var x10      = register.ReadBlock(10);
            var x11      = register.ReadBlock(11);
            var x12      = register.ReadBlock(12);

            Assert.AreEqual(x10, new byte[] { 0x00, 0xF0, 0x0F, 0x00 });
            Assert.AreEqual(x11, new byte[] { 0xCD, 0x07, 0x00, 0x00 });
            Assert.AreEqual(x12, new byte[] { 0xCD, 0x07, 0x00, 0x00 });
        }
Exemplo n.º 3
0
        public void LuiTest3()
        {
            var insLui1 = InstructionTypeFactory.CreateUType(C.OPLUI, 1, 0xFFFFF);
            var program = insLui1;

            core.Run(program);

            var register = core.Register;
            var x1       = register.ReadBlock(1);

            Assert.AreEqual(x1, new byte[] { 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF });
        }
Exemplo n.º 4
0
        public void AuipcTest2()
        {
            var insAuipc2 = InstructionTypeFactory.CreateUType(C.OPAUIPC, 2, 0x100);
            var program   = insAuipc2;

            // PC = 100
            core.Run(program);
            core.BaseAddres = 100;

            var register = core.Register;
            var x2       = register.ReadUnsignedInt(2);

            Assert.AreEqual(x2, 0x100100);
        }
Exemplo n.º 5
0
        public void AuipcTest2()
        {
            var insAuipc1 = InstructionTypeFactory.CreateUType(C.OPAUIPC, 1, 0x100);
            var program   = insAuipc1;

            // PC = 100
            core.Run(program);
            core.BaseAddres = 0x100;

            var register = core.Register;
            var x1       = register.ReadBlock(1);

            Assert.AreEqual(x1, new byte[] { 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 });
        }
Exemplo n.º 6
0
        public void AuipcTest3()
        {
            var insAuipc3 = InstructionTypeFactory.CreateUType(C.OPAUIPC, 3, 0xFFF);

            var program = insAuipc3;

            // PC = 100
            core.Run(program);
            core.BaseAddres = 100;

            var register = core.Register;
            var x3       = register.ReadUnsignedInt(3);

            Assert.AreEqual(x3, 0xFFF100);
        }
Exemplo n.º 7
0
        public void AuipcTest1()
        {
            var insAuipc1 = InstructionTypeFactory.CreateUType(C.OPAUIPC, 1, 0x01);

            var program = insAuipc1;

            // PC = 100
            core.Run(program);
            core.BaseAddres = 100;

            var register = core.Register;
            var x1       = register.ReadUnsignedInt(1);

            Assert.AreEqual(x1, 0x1100);
        }
Exemplo n.º 8
0
        public void LuiTest1()
        {
            var insLui1 = InstructionTypeFactory.CreateUType(C.OPLUI, 1, 0x01);
            var insLui2 = InstructionTypeFactory.CreateUType(C.OPLUI, 2, 0x100);

            var program = insLui1.Concat(insLui2);

            core.Run(program);

            var register = core.Register;
            var x1       = register.ReadBlock(1);
            var x2       = register.ReadBlock(2);

            Assert.AreEqual(x1, new byte[] { 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
            Assert.AreEqual(x2, new byte[] { 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 });
        }