Beispiel #1
0
        //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;
                }
            }
        }
    }