private void Init(IDebuggable debugTarget) { if (debugTarget != m_spectrum) { if (m_spectrum != null) { m_spectrum.UpdateState -= new EventHandler(spectrum_OnUpdateState); m_spectrum.Breakpoint -= new EventHandler(spectrum_OnBreakpoint); } if (debugTarget != null) { m_spectrum = debugTarget; // ZEK +++ sprint_mmu = m_spectrum.Bus.FindDevice <SprinterMMU>(); sprint_ula = m_spectrum.Bus.FindDevice <SprinterULA>(); //pevo_bdi = m_spectrum.Bus.FindDevice(typeof(BDI)) as BDI; // ZEK --- m_dasmTool = new DasmTool(debugTarget.ReadMemory); m_timingTool = new TimingTool(m_spectrum.CPU, debugTarget.ReadMemory); m_spectrum.UpdateState += new EventHandler(spectrum_OnUpdateState); m_spectrum.Breakpoint += new EventHandler(spectrum_OnBreakpoint); } } }
public DisassemblyViewModel(IDebuggable target, ISynchronizeInvoke synchronizeInvoke) : base(target, synchronizeInvoke) { _dasmTool = new DasmTool(target.ReadMemory); _timingTool = new TimingTool(target.CPU, target.ReadMemory); CommandSetBreakpoint = new CommandDelegate( CommandSetBreakpoint_OnExecute, CommandSetBreakpoint_OnCanExecute); }
private void StepOver() { var tactLimit = _tactLimitStepOver; var t = CPU.Tact; var dasmTool = new DasmTool(DebugReadMemory); int len; var opCodeStr = dasmTool.GetMnemonic(CPU.regs.PC, out len); var nextAddr = (ushort)((CPU.regs.PC + len) & 0xFFFF); var donotStepOver = opCodeStr.IndexOf("J") >= 0 || opCodeStr.IndexOf("RET") >= 0; if (donotStepOver) { StepInto(); } else { while (true) { if (CPU.Tact - t >= tactLimit) { OnUpdateState(); if (OnMaxTactExceed(tactLimit)) { break; } else { t = CPU.Tact; tactLimit *= 2; } } StepInto(); if (CPU.regs.PC == nextAddr) { break; } if (CheckBreakpoint()) { OnUpdateState(); OnBreakpoint(); break; } } } }
private void Init(IDebuggable debugTarget) { if (debugTarget == m_spectrum) { return; } if (m_spectrum != null) { m_spectrum.UpdateState -= spectrum_OnUpdateState; m_spectrum.Breakpoint -= spectrum_OnBreakpoint; } if (debugTarget != null) { m_spectrum = debugTarget; m_dasmTool = new DasmTool(debugTarget.ReadMemory); m_timingTool = new TimingTool(m_spectrum.CPU, debugTarget.ReadMemory); m_spectrum.UpdateState += spectrum_OnUpdateState; m_spectrum.Breakpoint += spectrum_OnBreakpoint; } }