public static Action<CpuThreadState> CreateDelegateForString(this CpuProcessor CpuProcessor, String Assembly, bool BreakPoint = false)
        {
            CpuProcessor.MethodCache.Clear();

            Assembly += "\r\nbreak\r\n";
            var MemoryStream = new MemoryStream();
            MemoryStream.PreservePositionAndLock(() =>
            {
                var MipsAssembler = new MipsAssembler(MemoryStream);

                MipsAssembler.Assemble(Assembly);
            });

            //Console.WriteLine(Assembly);

            return (_CpuThreadState) =>
            {
                _CpuThreadState.PC = 0;

                //Console.WriteLine("PC: {0:X}", _CpuThreadState.PC);
                try
                {
                    while (true)
                    {
                        //Console.WriteLine("PC: {0:X}", _CpuThreadState.PC);
                        var Delegate = CpuProcessor.CreateDelegateForPC(MemoryStream, _CpuThreadState.PC);
                        _CpuThreadState.StepInstructionCount = 1000000;
                        Delegate.Delegate(_CpuThreadState);
                    }
                }
                catch (PspBreakException)
                {
                }
            };
        }
        public void TestMethod1()
        {
            var Config = new PspConfig();
            var PspEmulatorContext = new PspEmulatorContext(Config);
            PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();

            var PspMemory = PspEmulatorContext.GetInstance<PspMemory>();
            var PspMemoryStream = new PspMemoryStream(PspMemory);
            var MipsAssembler = new MipsAssembler(PspMemoryStream);
            var DynarecFunctionCompilerTask = PspEmulatorContext.GetInstance<DynarecFunctionCompilerTask>();
            var CpuProcessor = PspEmulatorContext.GetInstance<CpuProcessor>();
            var CpuThreadState = new CpuThreadState(CpuProcessor);

            MipsAssembler.Assemble(@"
                .code 0x08000000
                addi r1, r1, 1
                jr r31
                nop
            ");

            var DynarecFunction = DynarecFunctionCompilerTask.GetFunctionForAddress(PspMemory.MainSegment.Low);

            Assert.AreEqual(0, CpuThreadState.GPR[1]);
            DynarecFunction.Delegate(CpuThreadState);
            Assert.AreEqual(1, CpuThreadState.GPR[1]);
        }
		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>()));
		}
Exemple #4
0
        public static AssemblerResult StaticAssembleInstructions(string program)
        {
            var memory = new MemoryStream();
            var result = new AssemblerResult
            {
                Instructions = new StreamStructArrayWrapper <Instruction>(memory),
            };
            var mipsAssembler = new MipsAssembler(memory);

            mipsAssembler.Assemble(program, result);
            return(result);
        }
Exemple #5
0
		public void SetUp()
		{
			PspConfig = new PspConfig();
			PspConfig.HleModulesDll = Assembly.GetExecutingAssembly();
			PspEmulatorContext = new PspEmulatorContext(PspConfig);
			PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();
			PspEmulatorContext.SetInstanceType<GpuImpl, GpuImplNull>();
			PspEmulatorContext.SetInstanceType<PspAudioImpl, AudioImplNull>();
			Memory = PspEmulatorContext.GetInstance<PspMemory>();
			ThreadManager = PspEmulatorContext.GetInstance<HleThreadManager>();

			Processor = PspEmulatorContext.GetInstance<CpuProcessor>();
			MipsAssembler = new MipsAssembler(new PspMemoryStream(Memory));
		}
        public static 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);
            };
        }
        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.AreEqual(8, MemoryStream.Length);
            Assert.AreEqual((uint)0x00020820, BinaryReader.ReadUInt32());
            Assert.AreEqual((uint)0x03E71822, BinaryReader.ReadUInt32());
        }
 public void AssembleLineTest()
 {
     var MipsAssembler = new MipsAssembler(new MemoryStream());
     Assert.AreEqual((uint)0x00020820, (uint)MipsAssembler.AssembleInstruction("add r1, r0, r2").Value);
 }
Exemple #9
0
        public void SetUp()
        {
            TestHleUtils.CreateInjectContext(this);

            MipsAssembler = new MipsAssembler(new PspMemoryStream(Memory));
        }
Exemple #10
0
 public static AssemblerResult StaticAssembleInstructions(string Program)
 {
     var Memory = new MemoryStream();
     var Result = new AssemblerResult()
     {
         Instructions = new StreamStructArrayWrapper<Instruction>(Memory),
     };
     var MipsAssembler = new MipsAssembler(Memory);
     MipsAssembler.Assemble(Program, Result);
     return Result;
 }
 public void SetUp()
 {
     TestHleUtils.CreateInjectContext(this);
     MipsAssembler = new MipsAssembler(new PspMemoryStream(InjectContext.GetInstance<PspMemory>()));
 }