//protected override void OnShown(EventArgs e) //{ // z80.ResetEventHandler -= Z80_ResetEventHandler; // z80.BeforeExecuteEventHandler -= Z80_BeforeExecuteEventHandler; // z80.AfterExecuteEventHandler -= Z80_AfterExecuteEventHandler; // z80.ResetEventHandler += Z80_ResetEventHandler; // z80.BeforeExecuteEventHandler += Z80_BeforeExecuteEventHandler; // z80.AfterExecuteEventHandler += Z80_AfterExecuteEventHandler; // ShowListing(); // base.OnShown(e); //} private void ScintillaZ80Monitor1_BreakpointsChanged(object sender, BreakpointsChangedEventArgs e) { ScintillaZ80Monitor MonitorWindow = sender as ScintillaZ80Monitor; int pc = MonitorWindow.LastBeakpointAddress; if (Disassembler.SourceLines[pc].Text == null) { e.SourceChanged = true; if (addresses == null) { addresses = new List <int>(); } addresses.Add(pc); Disassembler.Disassemble(z80.Memory); Disassembler.Disassemble(0, addresses, 0, 65535, z80.Memory, true, true, true); //MonitorWindow.ReadOnly = false; MonitorWindow.ForceText = Disassembler.Listing.ToString(); //MonitorWindow.ReadOnly = true; } else if (MonitorWindow.Text.Length == 0) { MonitorWindow.ForceText = Disassembler.Listing.ToString(); } breakpoints = MonitorWindow.Breakpoints; toolStripButton6.Text = "Clear Breakpoints"; toolStripButton6.Enabled = scintillaZ80Monitor1.CheckBreakpoints(); toolStripButton6.Visible = false; toolStripButton6.Visible = true; }
/// <summary> /// Breakpoints changed, so refresh the views /// </summary> private static Task OnBreakpointsChanged(object sender, BreakpointsChangedEventArgs args) { RefreshAllActive(); return(Task.FromResult(0)); }
void ToggleBreakpoint(int lineNo) { if (!ShowBreakpointsMargin) { return; } BreakpointsChangedEventArgs e; Line sline = Lines[lineNo]; const uint mask = (1 << BOOKMARK_MARKER); while (sline.Text.Length < 4 || sline.Text.Substring(0, 4) == " ") { lineNo++; sline = Lines[lineNo]; if (lineNo > Lines.Count) { return; } } string saddress = sline.Text.Substring(0, 4).Trim(); if (saddress.Length > 0) { try { LastBeakpointAddress = Convert.ToInt32(saddress, 16); } catch { return; } Breakpoints[LastBeakpointAddress] = !Breakpoints[LastBeakpointAddress]; if (!Breakpoints[LastBeakpointAddress]) { // Remove existing bookmark sline.MarkerDelete(BOOKMARK_MARKER); //if (Breakpoint != null) Breakpoint(address, false); Breakpoints[LastBeakpointAddress] = false; BreakpointsChanged?.Invoke(this, new BreakpointsChangedEventArgs(Breakpoints)); Refresh(); return; } else { // Add bookmark sline.MarkerAdd(BOOKMARK_MARKER); //if (Breakpoint != null) Breakpoint(address, true); Breakpoints[LastBeakpointAddress] = true; } e = new BreakpointsChangedEventArgs(Breakpoints); BreakpointsChanged?.Invoke(this, e); if (!e.SourceChanged) { return; } lineNo = 0; while (true) { sline = Lines[lineNo]; if (sline.Text.Length < 4 || sline.Text.Substring(0, 4) == " ") { lineNo++; continue; } if (sline.Text.Substring(0, 4).Trim() == saddress) { if ((sline.MarkerGet() & mask) > 0) { // Remove existing bookmark sline.MarkerDelete(BOOKMARK_MARKER); //if (Breakpoint != null) Breakpoint(address, false); Breakpoints[LastBeakpointAddress] = false; } else { // Add bookmark sline.MarkerAdd(BOOKMARK_MARKER); //if (Breakpoint != null) Breakpoint(address, true); Breakpoints[LastBeakpointAddress] = true; } BreakpointsChanged?.Invoke(this, new BreakpointsChangedEventArgs(Breakpoints)); break; } lineNo++; sline = Lines[lineNo]; if (lineNo > Lines.Count) { return; } } } }