public void PeekSequentialInstructions() { NextInstructions.Clear(); string instructionText; UInt32 rawInstr; StoredInstruction newInstruction; UInt32 instrSize = (UInt32)(gba.Cpu.State == Cpu.CpuState.Arm ? 4 : 2); UInt32 adjust = 0; int instructionPtr = gba.Cpu.NextPipelineInsturction; // Inefficient but we are not running at this point so what the hell rawInstr = gba.Cpu.InstructionPipeline[instructionPtr]; instructionText = gba.Cpu.State == Cpu.CpuState.Arm ? gba.Cpu.PeekArmInstruction(rawInstr) : gba.Cpu.PeekThumbInstruction((ushort)rawInstr); newInstruction = new StoredInstruction(rawInstr, instructionText, gba.Cpu.PC_Adjusted); NextInstructions.Add(newInstruction); instructionPtr++; if (instructionPtr >= Cpu.Pipeline_Size) { instructionPtr = 0; } adjust += instrSize; rawInstr = gba.Cpu.InstructionPipeline[instructionPtr]; instructionText = gba.Cpu.State == Cpu.CpuState.Arm ? gba.Cpu.PeekArmInstruction(rawInstr) : gba.Cpu.PeekThumbInstruction((ushort)rawInstr); newInstruction = new StoredInstruction(rawInstr, instructionText, (UInt32)(gba.Cpu.PC_Adjusted + adjust)); NextInstructions.Add(newInstruction); instructionPtr++; if (instructionPtr >= Cpu.Pipeline_Size) { instructionPtr = 0; } adjust += instrSize; rawInstr = gba.Cpu.InstructionPipeline[instructionPtr]; instructionText = gba.Cpu.State == Cpu.CpuState.Arm ? gba.Cpu.PeekArmInstruction(rawInstr) : gba.Cpu.PeekThumbInstruction((ushort)rawInstr); newInstruction = new StoredInstruction(rawInstr, instructionText, (UInt32)(gba.Cpu.PC_Adjusted + adjust)); NextInstructions.Add(newInstruction); }
public void PeekSequentialInstructions() { NextInstructions.Clear(); string instructionText; UInt32 rawInstr; StoredInstruction newInstruction; UInt32 instrSize = (UInt32)(gba.Cpu.State == Cpu.CpuState.Arm ? 4 : 2); UInt32 adjust = 0; int instructionPtr = gba.Cpu.NextPipelineInsturction; // Inefficient but we are not running at this point so what the hell rawInstr = gba.Cpu.InstructionPipeline[instructionPtr]; instructionText = gba.Cpu.State == Cpu.CpuState.Arm ? gba.Cpu.PeekArmInstruction(rawInstr) : gba.Cpu.PeekThumbInstruction((ushort)rawInstr); newInstruction = new StoredInstruction(rawInstr, instructionText, gba.Cpu.PC_Adjusted); NextInstructions.Add(newInstruction); instructionPtr++; if (instructionPtr >= Cpu.Pipeline_Size) { instructionPtr = 0; } adjust += instrSize; rawInstr = gba.Cpu.InstructionPipeline[instructionPtr]; instructionText = gba.Cpu.State == Cpu.CpuState.Arm ? gba.Cpu.PeekArmInstruction(rawInstr) : gba.Cpu.PeekThumbInstruction((ushort)rawInstr); newInstruction = new StoredInstruction(rawInstr, instructionText, (UInt32)(gba.Cpu.PC_Adjusted + adjust)); NextInstructions.Add(newInstruction); instructionPtr++; if (instructionPtr >= Cpu.Pipeline_Size) { instructionPtr = 0; } adjust += instrSize; rawInstr = gba.Cpu.InstructionPipeline[instructionPtr]; instructionText = gba.Cpu.State == Cpu.CpuState.Arm ? gba.Cpu.PeekArmInstruction(rawInstr) : gba.Cpu.PeekThumbInstruction((ushort)rawInstr); newInstruction = new StoredInstruction(rawInstr, instructionText, (UInt32)(gba.Cpu.PC_Adjusted + adjust)); NextInstructions.Add(newInstruction); /* * UInt32 lookAheadBytes = 0; * for (int i = 0; i < Cpu.Pipeline_Size; i++) * { * UInt32 pc = (UInt32)(gba.Cpu.PC_Adjusted + lookAheadBytes); * UInt32 rawInstr = gba.Memory.ReadWord(pc); * lookAheadBytes+= 4; * * string instructionText; * try * { * instructionText = gba.Cpu.PeekArmInstruction(rawInstr); * var newInstruction = new StoredInstruction(instructionText, pc); * NextInstructions.Add(newInstruction); * } * catch (ArgumentException) { } * } */ }