private Image GetVarImage(IWabbitcodeDebugger debugger, int address, Size size) { ImageSize = size; Screen = new Bitmap(size.Width, size.Height); int row = 0, col = 0; for (int i = 0; i < size.Width / 8 * size.Height; i++) { var bytes = ReadBytes(debugger, address + i); for (int bit = 128; bit > 0; bit /= 2) { SetPixel(bytes, bit, row, col); col++; } if (col < size.Width) { continue; } col = 0; row++; } return(Screen.ResizeImage(size.Width * 2, size.Height * 2)); }
protected override string GetDisplayValue(IWabbitcodeDebugger debugger, int address, int size) { string outputValue = string.Empty; if (size == ReadToEnd) { int i = 0; char charToAdd; do { charToAdd = (char)debugger.ReadByte((ushort)(address + i)); outputValue += charToAdd.ToString(); i++; } while (charToAdd != '\0'); } else { var bytes = debugger.ReadMemory((ushort)address, (ushort)size); for (int i = 0; i < size; i++) { outputValue += (char)bytes[i]; } } return(outputValue); }
private void gotoCurrentToolButton_Click(object sender, EventArgs e) { IWabbitcodeDebugger debugger = _debuggerService.CurrentDebugger; DocumentLocation location = debugger.GetAddressLocation(debugger.CPU.PC); AbstractUiAction.RunCommand(new GotoLineAction(location)); }
protected override string GetDisplayValue(IWabbitcodeDebugger debugger, int address, int size) { var data = debugger.ReadShort((ushort)address); var symbolList = _symbolService.SymbolTable.GetLabelsFromAddress(data); return(symbolList.Count == 0 ? data.ToString("X") : symbolList.First()); }
private void DebuggerService_OnDebuggingStarted(object sender, DebuggingEventArgs e) { _valueTypeBox.DropDownItems.Clear(); _valueTypeBox.DropDownItems.AddRange(VariableDisplayManager.Instance.ControllerNames); _debugger = e.Debugger; _debugger.DebuggerStep += OnDebuggerOnDebuggerStep; _debugger.DebuggerRunningChanged += OnDebuggerOnDebuggerRunningChanged; }
protected override byte[] ReadBytes(IWabbitcodeDebugger debugger, int address) { var bytes = new byte[2]; int grayscaleOffset = (ImageSize.Width / 8) * ImageSize.Height; bytes[0] = debugger.ReadByte((ushort)address); bytes[1] = debugger.ReadByte((ushort)(address + grayscaleOffset)); return(bytes); }
public TrackingVariableRowModel(IDebuggerService debuggerService, VariableDisplayManager variableDisplayManager) { _debuggerService = debuggerService; _variableDisplayManager = variableDisplayManager; DisplayController = variableDisplayManager.DefaultController; Debugger = _debuggerService.CurrentDebugger; _debuggerService.OnDebuggingStarted += DebuggerService_OnDebuggingStarted; _debuggerService.OnDebuggingEnded += DebuggerService_OnDebuggingEnded; }
private void DebuggerService_OnDebuggingEnded(object sender, DebuggingEventArgs e) { _debugger.DebuggerStep -= OnDebuggerOnDebuggerStep; _debugger.DebuggerRunningChanged -= OnDebuggerOnDebuggerRunningChanged; _debugger = null; EnablePanel(false); foreach (var viewer in _fullViewers) { viewer.Close(); } }
public void EndDebugging() { if (OnDebuggingEnded != null) { OnDebuggingEnded(this, new DebuggingEventArgs(CurrentDebugger)); } CurrentDebugger.EndDebug(); CurrentDebugger.Dispose(); CurrentDebugger = null; }
private void mainForm_OnDebuggingStarted(object sender, DebuggingEventArgs e) { _debugger = e.Debugger; _debugger.DebuggerStep += (o, args) => { this.Invoke(UpdateStack); EnablePanel(true); }; _debugger.DebuggerRunningChanged += (o, args) => { this.Invoke(UpdateStack); EnablePanel(!args.Running); }; }
private static string GetVarValue(IWabbitcodeDebugger debugger, int address, int size, int scale) { string outputValue = string.Empty; var values = debugger.ReadMemory((ushort)address, (ushort)(size * scale)); for (int i = 0; i < size * scale; i += scale) { int total = 0; for (int j = 0; j < scale; j++) { total += values[i + j] << (8 * j); } outputValue += Convert.ToString(total, Base).PadLeft(2 * scale, '0') + " "; } return(outputValue); }
private void DebuggerService_OnDebuggingStarted(object sender, DebuggingEventArgs e) { _debugger = e.Debugger; _debugger.DebuggerRunningChanged += (o, args) => { EnablePanel(!args.Running); if (!args.Running) { UpdatePanel(); } }; _debugger.DebuggerStep += (o, args) => { EnablePanel(true); UpdatePanel(); }; }
private void UpdateDebugHighlight() { IWabbitcodeDebugger debugger = _debuggerService.CurrentDebugger; if (debugger == null) { return; } DocumentLocation debugLine = debugger.GetAddressLocation(_debuggerService.CurrentDebugger.CPU.PC); if (debugLine == null || debugLine.FileName != FileName) { return; } editorBox.HighlightDebugLine(debugLine.LineNumber - 1); }
public void StartDebugging() { IProject project = _projectService.Project; if (project.IsInternal) { throw new DebuggingException("Debugging single files is not supported"); } string outputFile = GetOutputFileDetails(project); try { Debug.WriteLine("Creating wabbitocde debugger"); CurrentDebugger = new WabbitcodeDebugger(outputFile); CurrentDebugger.DebuggerStep += CurrentDebugger_DebuggerStep; CurrentDebugger.DebuggerRunningChanged += CurrentDebugger_DebuggerRunningChanged; } catch (Exception) { throw new DebuggingException("Unable to create the debuger"); } if (OnDebuggingStarted != null) { OnDebuggingStarted(this, new DebuggingEventArgs(CurrentDebugger)); } try { Debug.WriteLine("Starting debug"); CurrentDebugger.StartDebug(); } catch (DebuggingException) { EndDebugging(); throw; } }
protected override string GetDisplayValue(IWabbitcodeDebugger debugger, int address, int size) { byte readByte = debugger.ReadByte((ushort)address); var enumValues = new List <string>(); foreach (var maskKey in _enum.EnumMapping) { string label; byte maskedValue = (byte)(readByte & maskKey.Key); if (_symbolCache.TryGetValue(new ByteMaskKey(maskedValue, maskKey.Key), out label)) { enumValues.Add(label); } } if (enumValues.Count == 0) { throw new ArgumentException("Invalid enum type: " + readByte); } return(string.Join(" | ", enumValues)); }
private void mainForm_OnDebuggingStarted(object sender, DebuggingEventArgs e) { _debugger = e.Debugger; _debugger.DebuggerStep += OnDebuggerOnDebuggerStep; _debugger.DebuggerRunningChanged += OnDebuggerOnDebuggerRunningChanged; }
private void mainForm_OnDebuggingEnded(object sender, DebuggingEventArgs e) { _debugger.DebuggerRunningChanged -= OnDebuggerOnDebuggerRunningChanged; _debugger.DebuggerStep -= OnDebuggerOnDebuggerStep; _debugger = null; }
private void mainForm_OnDebuggingEnded(object sender, DebuggingEventArgs e) { _debugger = null; }
protected abstract byte[] ReadBytes(IWabbitcodeDebugger debugger, int address);
protected override string GetDisplayValue(IWabbitcodeDebugger debugger, int address, int size) { return(GetVarValue(debugger, address, size, Size)); }
private void DebuggerService_OnDebuggingStarted(object sender, DebuggingEventArgs e) { Debugger = e.Debugger; }
private int EvaluateElement(string element) { if (!Settings.Default.CaseSensitive) { element = element.ToUpper(); } int value; if (int.TryParse(element, out value)) { return(value); } var label = _symbolService.SymbolTable.GetAddressFromLabel(element); if (label != null) { return(label.Value); } IWabbitcodeDebugger debugger = _debuggerService.CurrentDebugger; if (debugger == null) { return(0); } switch (element) { case "$A": return(debugger.CPU.A); case "$F": return(debugger.CPU.F); case "$B": return(debugger.CPU.B); case "$C": return(debugger.CPU.C); case "$D": return(debugger.CPU.D); case "$E": return(debugger.CPU.E); case "$H": return(debugger.CPU.H); case "$L": return(debugger.CPU.L); case "$IXH": return(debugger.CPU.IXH); case "$IXL": return(debugger.CPU.IXL); case "$IYH": return(debugger.CPU.IYH); case "$IYL": return(debugger.CPU.IYL); case "$AF": return(debugger.CPU.AF); case "$BC": return(debugger.CPU.BC); case "$DE": return(debugger.CPU.DE); case "$HL": return(debugger.CPU.HL); case "$IX": return(debugger.CPU.IX); case "$IY": return(debugger.CPU.IY); case "$PC": return(debugger.CPU.PC); case "$SP": return(debugger.CPU.SP); default: if (element.StartsWith("$") || element.EndsWith("h")) { element = element.Replace('$', ' ').Replace('h', ' ').Trim(); if (!int.TryParse(element, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out value)) { break; } return(value); } break; } throw new FormatException(string.Format("Can't recognize symbol {0}", element)); }
protected override byte[] ReadBytes(IWabbitcodeDebugger debugger, int address) { return(new[] { debugger.ReadByte((ushort)address) }); }
public string GetDisplayValue(IWabbitcodeDebugger debugger, string address, string size) { return(string.Empty); }
public object GetActualValue(IWabbitcodeDebugger debugger, string address, string size) { return(null); }
protected override string GetDisplayValue(IWabbitcodeDebugger debugger, int address, Size size) { return("Double click for image"); }
protected override object GetActualValue(IWabbitcodeDebugger debugger, int address, int size) { return(GetDisplayValue(debugger, address, size)); }
protected override object GetActualValue(IWabbitcodeDebugger debugger, int address, Size size) { return(GetVarImage(debugger, address, size)); }
private void DebuggerService_OnDebuggingEnded(object sender, DebuggingEventArgs e) { Debugger = null; }
public object GetActualValue(IWabbitcodeDebugger debugger, string address, string size) { return(GetActualValue(debugger, ParseAddress(address), ParseValidSize(size))); }