mirror of
https://github.com/fadden/6502bench.git
synced 2024-11-29 10:50:28 +00:00
Experiment with showing character value next to default data
Doesn't seem useful in practice. If I find a good use case it might be worth making it an option.
This commit is contained in:
parent
9d5f8f8049
commit
4ed2558f9f
@ -22,6 +22,7 @@ using System.Text;
|
|||||||
using Asm65;
|
using Asm65;
|
||||||
using CommonUtil;
|
using CommonUtil;
|
||||||
using FormattedParts = SourceGen.DisplayList.FormattedParts;
|
using FormattedParts = SourceGen.DisplayList.FormattedParts;
|
||||||
|
using TextScanMode = SourceGen.ProjectProperties.AnalysisParameters.TextScanMode;
|
||||||
|
|
||||||
namespace SourceGen {
|
namespace SourceGen {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -80,6 +81,12 @@ namespace SourceGen {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private LocalVariableLookup mLvLookup;
|
private LocalVariableLookup mLvLookup;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Character test, for display of character data next to default data items.
|
||||||
|
/// </summary>
|
||||||
|
private CharEncoding.InclusionTest mCharTest;
|
||||||
|
private CharEncoding.Convert mCharConv;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// One of these per line of output in the display. It should be possible to draw
|
/// One of these per line of output in the display. It should be possible to draw
|
||||||
@ -629,7 +636,11 @@ namespace SourceGen {
|
|||||||
/// Generates Lines for the entire project.
|
/// Generates Lines for the entire project.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void GenerateAll() {
|
public void GenerateAll() {
|
||||||
|
// Do this now in case the project properties have changed.
|
||||||
|
ConfigureCharacterEncoding();
|
||||||
|
|
||||||
mLineList.Clear();
|
mLineList.Clear();
|
||||||
|
|
||||||
List<Line> headerLines = GenerateHeaderLines(mProject, mFormatter, mPseudoOpNames);
|
List<Line> headerLines = GenerateHeaderLines(mProject, mFormatter, mPseudoOpNames);
|
||||||
mLineList.InsertRange(0, headerLines);
|
mLineList.InsertRange(0, headerLines);
|
||||||
|
|
||||||
@ -640,6 +651,33 @@ namespace SourceGen {
|
|||||||
Debug.Assert(ValidateLineList(), "Display list failed validation");
|
Debug.Assert(ValidateLineList(), "Display list failed validation");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ConfigureCharacterEncoding() {
|
||||||
|
TextScanMode textMode = mProject.ProjectProps.AnalysisParams.DefaultTextScanMode;
|
||||||
|
switch (textMode) {
|
||||||
|
case TextScanMode.LowAscii:
|
||||||
|
mCharTest = CharEncoding.IsPrintableAscii;
|
||||||
|
mCharConv = CharEncoding.ConvertAscii;
|
||||||
|
break;
|
||||||
|
case TextScanMode.LowHighAscii:
|
||||||
|
mCharTest = CharEncoding.IsPrintableLowOrHighAscii;
|
||||||
|
mCharConv = CharEncoding.ConvertLowAndHighAscii;
|
||||||
|
break;
|
||||||
|
case TextScanMode.C64Petscii:
|
||||||
|
mCharTest = CharEncoding.IsPrintableC64Petscii;
|
||||||
|
mCharConv = CharEncoding.ConvertC64Petscii;
|
||||||
|
break;
|
||||||
|
case TextScanMode.C64ScreenCode:
|
||||||
|
mCharTest = CharEncoding.IsPrintableC64ScreenCode;
|
||||||
|
mCharConv = CharEncoding.ConvertC64ScreenCode;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Debug.Assert(false);
|
||||||
|
mCharTest = CharEncoding.IsPrintableAscii;
|
||||||
|
mCharConv = CharEncoding.ConvertAscii;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates a list of Lines for the specified range of offsets, replacing
|
/// Generates a list of Lines for the specified range of offsets, replacing
|
||||||
/// existing values.
|
/// existing values.
|
||||||
@ -1292,6 +1330,22 @@ namespace SourceGen {
|
|||||||
|
|
||||||
operandStr = pout.Operand;
|
operandStr = pout.Operand;
|
||||||
|
|
||||||
|
// This seems less useful in practice than in theory, unless you have a lot of
|
||||||
|
// character data separated by unprintable values. Text generally gets found by
|
||||||
|
// the data scanner, and having character values next to things that aren't
|
||||||
|
// actually meant to be character data is more distracting than useful. If
|
||||||
|
// there's a good use case we could make it an option, and have mCharTest set
|
||||||
|
// to null if it's switched off.
|
||||||
|
if (false && attr.DataDescriptor.FormatType == FormatDescriptor.Type.Default) {
|
||||||
|
FormatDescriptor dfd = attr.DataDescriptor;
|
||||||
|
Debug.Assert(dfd.Length == 1);
|
||||||
|
int operand = RawData.GetWord(mProject.FileData, offset, dfd.Length, false);
|
||||||
|
|
||||||
|
if (mCharTest((byte)operand)) {
|
||||||
|
operandStr += " '" + mCharConv((byte)operand) + "'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FormattedParts parts = FormattedParts.Create(offsetStr, addrStr, bytesStr,
|
FormattedParts parts = FormattedParts.Create(offsetStr, addrStr, bytesStr,
|
||||||
flagsStr, attrStr, labelStr, opcodeStr, operandStr, commentStr);
|
flagsStr, attrStr, labelStr, opcodeStr, operandStr, commentStr);
|
||||||
return parts;
|
return parts;
|
||||||
|
@ -737,6 +737,10 @@ namespace SourceGen.WpfGui {
|
|||||||
// 50K: 10 seconds, 20K: 1.6 sec, 10K: 0.6 sec, 5K: 0.2 sec
|
// 50K: 10 seconds, 20K: 1.6 sec, 10K: 0.6 sec, 5K: 0.2 sec
|
||||||
const int MAX_SEL_COUNT = 5000;
|
const int MAX_SEL_COUNT = 5000;
|
||||||
|
|
||||||
|
// In the current implementation, a large (500K) list can take a couple of
|
||||||
|
// seconds to restore a single-line selection if the selected item is near
|
||||||
|
// the bottom of the list.
|
||||||
|
|
||||||
TaskTimer timer = new TaskTimer();
|
TaskTimer timer = new TaskTimer();
|
||||||
timer.StartTask("TOTAL");
|
timer.StartTask("TOTAL");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user