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 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 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 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; }