private void DebugPanel_Paint(object sender, PaintEventArgs e) { bool paint = false; int currentPC = kernel.CPU.PC; //if ((kernel.CPU.DebugPause)) if (true && codeList != null) { int queueLength = codeList.Count; int painted = 0; int index = 0; // Draw the position box if (position.X > 0 && position.Y > 0) { int row = position.Y / ROW_HEIGHT; int col = 12; e.Graphics.FillRectangle(Brushes.LightBlue, col, row * ROW_HEIGHT, 7 * 6, 14); } bool offsetPrinted = false; foreach (DebugLine line in codeList) { if (line != null) { if (line.PC == currentPC) { paint = true; TopLineIndex = index; if (!offsetPrinted) { if (index > 4) { TopLineIndex -= 5; for (int c = 5; c > 0; c--) { DebugLine q0 = codeList[index - c]; // Draw the label as a black box with white text if (q0.label != null) { e.Graphics.FillRectangle(Brushes.Blue, 1, painted * ROW_HEIGHT, LABEL_WIDTH + 2, ROW_HEIGHT + 2); e.Graphics.DrawString(q0.label, HeaderTextbox.Font, Brushes.Yellow, 2, painted * ROW_HEIGHT); } if (q0.PC == IRQPC) { e.Graphics.FillRectangle(Brushes.Orange, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } if (knl_breakpoints.ContainsKey(q0.PC)) { e.Graphics.DrawEllipse(Pens.White, LABEL_WIDTH - ROW_HEIGHT - 1, painted * ROW_HEIGHT, ROW_HEIGHT + 1, ROW_HEIGHT + 1); e.Graphics.FillEllipse(Brushes.DarkRed, LABEL_WIDTH - ROW_HEIGHT, painted * ROW_HEIGHT + 1, ROW_HEIGHT, ROW_HEIGHT); } // Check if the memory still matches the opcodes if (!q0.CheckOpcodes(kernel.MemMgr.RAM)) { e.Graphics.FillRectangle(Brushes.Red, LABEL_WIDTH + 3, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } e.Graphics.DrawString(q0.ToString(), HeaderTextbox.Font, Brushes.Black, LABEL_WIDTH + 2, painted * ROW_HEIGHT); if (q0.PC == ActiveLine[0]) { e.Graphics.DrawLine(Pens.Black, LABEL_WIDTH + ActiveLine[1], (painted + 1) * ROW_HEIGHT, LABEL_WIDTH + ActiveLine[1] + ActiveLine[2], (painted + 1) * ROW_HEIGHT); } painted++; } } offsetPrinted = true; } e.Graphics.FillRectangle(line.PC == IRQPC ? Brushes.Orange : Brushes.LightBlue, LABEL_WIDTH + 1, painted * ROW_HEIGHT, DebugPanel.Width, ROW_HEIGHT); } if (painted > 27) { paint = false; break; } if (paint) { if (line.label != null) { e.Graphics.FillRectangle(Brushes.Blue, 1, painted * ROW_HEIGHT, LABEL_WIDTH + 2, ROW_HEIGHT + 2); e.Graphics.DrawString(line.label, HeaderTextbox.Font, Brushes.Yellow, 2, painted * ROW_HEIGHT); } if (knl_breakpoints.ContainsKey(line.PC)) { e.Graphics.DrawEllipse(Pens.White, LABEL_WIDTH - ROW_HEIGHT - 1, painted * ROW_HEIGHT, ROW_HEIGHT + 1, ROW_HEIGHT + 1); e.Graphics.FillEllipse(Brushes.DarkRed, LABEL_WIDTH - ROW_HEIGHT, painted * ROW_HEIGHT + 1, ROW_HEIGHT, ROW_HEIGHT); } if (line.PC == IRQPC) { e.Graphics.FillRectangle(Brushes.Orange, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } // Check if the memory still matches the opcodes if (!line.CheckOpcodes(kernel.MemMgr.RAM)) { e.Graphics.FillRectangle(Brushes.Red, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } e.Graphics.DrawString(line.ToString(), HeaderTextbox.Font, Brushes.Black, 102, painted * ROW_HEIGHT); if (line.PC == ActiveLine[0]) { e.Graphics.DrawLine(Pens.Black, LABEL_WIDTH + ActiveLine[1], (painted + 1) * ROW_HEIGHT, LABEL_WIDTH + ActiveLine[1] + ActiveLine[2], (painted + 1) * ROW_HEIGHT); } painted++; } } index++; } } else { e.Graphics.FillRectangle(Brushes.LightBlue, 0, 0, this.Width, this.Height); e.Graphics.DrawString("Running code real fast ... no time to write!", HeaderTextbox.Font, Brushes.Black, 8, DebugPanel.Height / 2); } }
private void DebugPanel_Paint(object sender, PaintEventArgs e) { bool paint = false; int currentPC = system.CPU.GetLongPC(); //if ((kernel.CPU.DebugPause)) if (true && queue != null) { int queueLength = queue.Count; int painted = 0; int index = 0; // Draw the position box if (position.X > 0 && position.Y > 0) { int row = position.Y / ROW_HEIGHT; int col = 12; e.Graphics.FillRectangle(lightBlueBrush, col, row * ROW_HEIGHT, 7 * 6, 14); } bool offsetPrinted = false; foreach (DebugLine line in queue) { if (line != null) { if (line.PC == currentPC) { paint = true; TopLineIndex = index; if (!offsetPrinted) { if (index > 4) { TopLineIndex -= 5; for (int c = 5; c > 0; c--) { DebugLine q0 = queue[index - c]; if (q0.PC == IRQPC) { e.Graphics.FillRectangle(orangeBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } if (breakpoints.ContainsKey(q0.PC)) { e.Graphics.FillRectangle(yellowBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } // Check if the memory still matches the opcodes //if (!q0.CheckOpcodes(system.RAM)) if (!q0.CheckOpcodes()) { e.Graphics.FillRectangle(redBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } if (!q0.isLabel) { e.Graphics.DrawString(q0.ToString(), HeaderTextbox.Font, debugBrush, 2, painted * ROW_HEIGHT); } else { e.Graphics.FillRectangle(debugBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); e.Graphics.DrawString(q0.ToString(), HeaderTextbox.Font, labelBrush, 2, painted * ROW_HEIGHT); } painted++; } } offsetPrinted = true; } e.Graphics.FillRectangle(line.PC == IRQPC ? orangeBrush : lightBlueBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } if (painted > 26) { paint = false; break; } if (paint) { if (breakpoints.ContainsKey(line.PC)) { e.Graphics.FillRectangle(yellowBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } if (line.PC == IRQPC) { e.Graphics.FillRectangle(orangeBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } // Check if the memory still matches the opcodes //if (!line.CheckOpcodes(system.RAM)) if (!line.CheckOpcodes()) { e.Graphics.FillRectangle(redBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); } if (line.PC == currentPC || !line.isLabel) { e.Graphics.DrawString(line.ToString(), HeaderTextbox.Font, debugBrush, 2, painted * ROW_HEIGHT); } else { e.Graphics.FillRectangle(debugBrush, 0, painted * ROW_HEIGHT, this.Width, ROW_HEIGHT); e.Graphics.DrawString(line.ToString(), HeaderTextbox.Font, labelBrush, 2, painted * ROW_HEIGHT); } painted++; } } index++; } } else { e.Graphics.FillRectangle(lightBlueBrush, 0, 0, this.Width, this.Height); e.Graphics.DrawString("Running code real fast ... no time to write!", HeaderTextbox.Font, debugBrush, 8, DebugPanel.Height / 2); } }