コード例 #1
0
        public void MatchFormatTest()
        {
            var parts = MipsAssembler.Matcher("%d, %s, %t", "  r1,  r2,   r3  ");

            Assert.Equal(3, parts.Count);
            Assert.Equal("r1", parts["%d"]);
            Assert.Equal("r2", parts["%s"]);
            Assert.Equal("r3", parts["%t"]);
        }
コード例 #2
0
        public void MatchFormatTest()
        {
            var Parts = MipsAssembler.MatchFormat("%d, %s, %t", "  r1,  r2,   r3  ");

            Assert.AreEqual(3, Parts.Count);
            Assert.AreEqual("(%d, r1)", Parts[0].ToString());
            Assert.AreEqual("(%s, r2)", Parts[1].ToString());
            Assert.AreEqual("(%t, r3)", Parts[2].ToString());
        }
コード例 #3
0
        public void SetUp()
        {
            PspConfig          = new PspConfig();
            PspEmulatorContext = new PspEmulatorContext(PspConfig);
            PspEmulatorContext.SetInstanceType <PspMemory, LazyPspMemory>();

            Processor     = PspEmulatorContext.GetInstance <CpuProcessor>();
            MipsAssembler = new MipsAssembler(new PspMemoryStream(PspEmulatorContext.GetInstance <PspMemory>()));
        }
コード例 #4
0
        public void TestMethod2()
        {
            var processor   = new CpuProcessor();
            var state       = new CpuThreadState(processor);
            var interpreter = new CpuInterpreter(state);

            state.Gpr2 = 3;
            state.Gpr3 = 7;
            interpreter.Interpret(MipsAssembler.StaticAssembleInstructions(@"add r1, r2, r3").Instructions[0]);
            Assert.Equal(3 + 7, (int)state.Gpr1);
        }
コード例 #5
0
        public void TokenizeTest()
        {
            Assert.AreEqual(
                "add:r1:,:r2:,:r3",
                String.Join(":", MipsAssembler.Tokenize("  add r1, r2,   r3   ").ToArray())
                );

            Assert.AreEqual(
                ",:,:,:,:.:.:.:[:]",
                String.Join(":", MipsAssembler.Tokenize("  ,, , , .. .[]\t"))
                );

            Assert.AreEqual(
                "%s:,:%t",
                String.Join(":", MipsAssembler.Tokenize("%s, %t"))
                );
        }
コード例 #6
0
        static public Action <CpuThreadState> CreateDelegateForString(this CpuProcessor CpuProcessor, String Assembly, bool BreakPoint = false)
        {
            var MemoryStream = new MemoryStream();

            MemoryStream.PreservePositionAndLock(() =>
            {
                var MipsAssembler = new MipsAssembler(MemoryStream);

                MipsAssembler.Assemble(Assembly);
            });
            var Delegate = CpuProcessor.CreateDelegateForPC(MemoryStream, 0);

            return((_CpuThreadState) =>
            {
                _CpuThreadState.StepInstructionCount = 1000000;
                Delegate(_CpuThreadState);
            });
        }
コード例 #7
0
        public void AssembleTest()
        {
            var memoryStream = new MemoryStream();
            var binaryReader = new BinaryReader(memoryStream);

            memoryStream.PreservePositionAndLock(() =>
            {
                var mipsAssembler = new MipsAssembler(memoryStream);

                mipsAssembler.Assemble(@"
					add r1, r0, r2
					sub r3, r31, r7
				"                );
            });

            Assert.Equal(8, memoryStream.Length);
            Assert.Equal((uint)0x00020820, binaryReader.ReadUInt32());
            Assert.Equal((uint)0x03E71822, binaryReader.ReadUInt32());
        }
コード例 #8
0
        public void TestMethod1()
        {
            var cpuProcessor = CpuUtils.CreateCpuProcessor();

            var dynarecFunction = cpuProcessor.DynarecFunctionCompiler.CreateFunction(
                new InstructionArrayReader(MipsAssembler.StaticAssembleInstructions(@"
					addi r1, r1, 1
					jr r31
					nop
				"                ).Instructions),
                0, checkValidAddress: false
                );

            var cpuThreadState = new CpuThreadState(cpuProcessor);

            Assert.Equal(0, cpuThreadState.Gpr[1]);
            dynarecFunction.Delegate(cpuThreadState);
            Assert.Equal(1, cpuThreadState.Gpr[1]);
        }
コード例 #9
0
        public void DisassembleJumpInstruction()
        {
            var assemblerResult = MipsAssembler.StaticAssembleInstructions(@"
			label1:
				j label2
			label2:
				j label1
				nop
			"            );

            Assert.Equal((uint)4, assemblerResult.Labels["label2"]);
            Assert.Equal((uint)0, assemblerResult.Labels["label1"]);

            Assert.Equal(@"j 0x00000004",
                         new MipsDisassembler().Disassemble(pc: 0 * 4, instruction: assemblerResult.Instructions[0]).ToString());
            Assert.Equal(@"j 0x00000000",
                         new MipsDisassembler().Disassemble(pc: 1 * 4, instruction: assemblerResult.Instructions[1]).ToString());
            Assert.Equal(@"and r0, r0, r0",
                         new MipsDisassembler().Disassemble(pc: 2 * 4, instruction: assemblerResult.Instructions[2]).ToString());
        }
コード例 #10
0
        public HlePspThreadTest()
        {
            TestHleUtils.CreateInjectContext(this);

            MipsAssembler = new MipsAssembler(new PspMemoryStream(Memory));
        }
コード例 #11
0
 public HlePspThreadManagerTest()
 {
     TestHleUtils.CreateInjectContext(this);
     _mipsAssembler = new MipsAssembler(new PspMemoryStream(InjectContext.GetInstance <PspMemory>()));
 }
コード例 #12
0
 public void MatcherNoMatchTest()
 {
     Assert.Throws <Exception>(() => { MipsAssembler.Matcher("add %s, %t", "add 1, 2, 3"); });
 }
コード例 #13
0
        public void AssembleLineTest()
        {
            var mipsAssembler = new MipsAssembler(new MemoryStream());

            Assert.Equal((uint)0x00020820, mipsAssembler.AssembleInstruction("add r1, r0, r2").Value);
        }