mirror of
https://github.com/fadden/6502bench.git
synced 2024-12-01 22:50:35 +00:00
Minor tweaks
- Renamed "strip label prefix/suffix" to "omit label prefix/suffix". - Changed a Merlin operand workaround so it doesn't apply to code that is explicitly not in bank zero. - Changed {addr}/{const} annotations on project/platform symbol equates so they line up a little better on screen and in exported sources.
This commit is contained in:
parent
5dd7576529
commit
be65f280a3
@ -388,7 +388,7 @@ namespace SourceGen.AsmGen {
|
|||||||
operand = RawData.GetWord(data, offset, length, false);
|
operand = RawData.GetWord(data, offset, length, false);
|
||||||
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
||||||
mLocalizer.LabelMap, dfd, operand, length,
|
mLocalizer.LabelMap, dfd, operand, length,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
break;
|
break;
|
||||||
case FormatDescriptor.Type.NumericBE:
|
case FormatDescriptor.Type.NumericBE:
|
||||||
opcodeStr = sDataOpNames.GetDefineBigData(length);
|
opcodeStr = sDataOpNames.GetDefineBigData(length);
|
||||||
@ -399,7 +399,7 @@ namespace SourceGen.AsmGen {
|
|||||||
operand = RawData.GetWord(data, offset, length, true);
|
operand = RawData.GetWord(data, offset, length, true);
|
||||||
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
||||||
mLocalizer.LabelMap, dfd, operand, length,
|
mLocalizer.LabelMap, dfd, operand, length,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FormatDescriptor.Type.Fill:
|
case FormatDescriptor.Type.Fill:
|
||||||
@ -516,7 +516,7 @@ namespace SourceGen.AsmGen {
|
|||||||
|
|
||||||
string valueStr = PseudoOp.FormatNumericOperand(SourceFormatter,
|
string valueStr = PseudoOp.FormatNumericOperand(SourceFormatter,
|
||||||
Project.SymbolTable, null, defSym.DataDescriptor, defSym.Value, 1,
|
Project.SymbolTable, null, defSym.DataDescriptor, defSym.Value, 1,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
OutputEquDirective(SourceFormatter.FormatVariableLabel(defSym.Label),
|
OutputEquDirective(SourceFormatter.FormatVariableLabel(defSym.Label),
|
||||||
valueStr, defSym.Comment);
|
valueStr, defSym.Comment);
|
||||||
}
|
}
|
||||||
|
@ -422,7 +422,7 @@ namespace SourceGen.AsmGen {
|
|||||||
operand = RawData.GetWord(data, offset, length, false);
|
operand = RawData.GetWord(data, offset, length, false);
|
||||||
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
||||||
mLocalizer.LabelMap, dfd, operand, length,
|
mLocalizer.LabelMap, dfd, operand, length,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
break;
|
break;
|
||||||
case FormatDescriptor.Type.NumericBE:
|
case FormatDescriptor.Type.NumericBE:
|
||||||
opcodeStr = sDataOpNames.GetDefineBigData(length);
|
opcodeStr = sDataOpNames.GetDefineBigData(length);
|
||||||
@ -433,7 +433,7 @@ namespace SourceGen.AsmGen {
|
|||||||
operand = RawData.GetWord(data, offset, length, true);
|
operand = RawData.GetWord(data, offset, length, true);
|
||||||
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
||||||
mLocalizer.LabelMap, dfd, operand, length,
|
mLocalizer.LabelMap, dfd, operand, length,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FormatDescriptor.Type.Fill:
|
case FormatDescriptor.Type.Fill:
|
||||||
@ -548,7 +548,7 @@ namespace SourceGen.AsmGen {
|
|||||||
// Use an operand length of 1 so values are shown as concisely as possible.
|
// Use an operand length of 1 so values are shown as concisely as possible.
|
||||||
string valueStr = PseudoOp.FormatNumericOperand(SourceFormatter,
|
string valueStr = PseudoOp.FormatNumericOperand(SourceFormatter,
|
||||||
Project.SymbolTable, null, defSym.DataDescriptor, defSym.Value, 1,
|
Project.SymbolTable, null, defSym.DataDescriptor, defSym.Value, 1,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
OutputLine(SourceFormatter.FormatVariableLabel(defSym.Label),
|
OutputLine(SourceFormatter.FormatVariableLabel(defSym.Label),
|
||||||
SourceFormatter.FormatPseudoOp(sDataOpNames.VarDirective),
|
SourceFormatter.FormatPseudoOp(sDataOpNames.VarDirective),
|
||||||
valueStr, SourceFormatter.FormatEolComment(defSym.Comment));
|
valueStr, SourceFormatter.FormatEolComment(defSym.Comment));
|
||||||
|
@ -249,7 +249,7 @@ namespace SourceGen.AsmGen {
|
|||||||
operand = RawData.GetWord(data, offset, length, false);
|
operand = RawData.GetWord(data, offset, length, false);
|
||||||
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
||||||
mLocalizer.LabelMap, dfd, operand, length,
|
mLocalizer.LabelMap, dfd, operand, length,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
break;
|
break;
|
||||||
case FormatDescriptor.Type.NumericBE:
|
case FormatDescriptor.Type.NumericBE:
|
||||||
opcodeStr = sDataOpNames.GetDefineBigData(length);
|
opcodeStr = sDataOpNames.GetDefineBigData(length);
|
||||||
@ -260,7 +260,7 @@ namespace SourceGen.AsmGen {
|
|||||||
operand = RawData.GetWord(data, offset, length, true);
|
operand = RawData.GetWord(data, offset, length, true);
|
||||||
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
||||||
mLocalizer.LabelMap, dfd, operand, length,
|
mLocalizer.LabelMap, dfd, operand, length,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FormatDescriptor.Type.Fill:
|
case FormatDescriptor.Type.Fill:
|
||||||
@ -440,7 +440,7 @@ namespace SourceGen.AsmGen {
|
|||||||
foreach (DefSymbol defSym in newDefs) {
|
foreach (DefSymbol defSym in newDefs) {
|
||||||
string valueStr = PseudoOp.FormatNumericOperand(SourceFormatter,
|
string valueStr = PseudoOp.FormatNumericOperand(SourceFormatter,
|
||||||
Project.SymbolTable, null, defSym.DataDescriptor, defSym.Value, 1,
|
Project.SymbolTable, null, defSym.DataDescriptor, defSym.Value, 1,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
OutputLine(SourceFormatter.FormatVariableLabel(defSym.Label),
|
OutputLine(SourceFormatter.FormatVariableLabel(defSym.Label),
|
||||||
SourceFormatter.FormatPseudoOp(sDataOpNames.VarDirective),
|
SourceFormatter.FormatPseudoOp(sDataOpNames.VarDirective),
|
||||||
valueStr, SourceFormatter.FormatEolComment(defSym.Comment));
|
valueStr, SourceFormatter.FormatEolComment(defSym.Comment));
|
||||||
|
@ -454,7 +454,7 @@ namespace SourceGen.AsmGen {
|
|||||||
UpdateCharacterEncoding(dfd);
|
UpdateCharacterEncoding(dfd);
|
||||||
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
||||||
mLocalizer.LabelMap, dfd, operand, length,
|
mLocalizer.LabelMap, dfd, operand, length,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
break;
|
break;
|
||||||
case FormatDescriptor.Type.NumericBE:
|
case FormatDescriptor.Type.NumericBE:
|
||||||
opcodeStr = sDataOpNames.GetDefineBigData(length);
|
opcodeStr = sDataOpNames.GetDefineBigData(length);
|
||||||
@ -466,7 +466,7 @@ namespace SourceGen.AsmGen {
|
|||||||
operand = RawData.GetWord(data, offset, length, true);
|
operand = RawData.GetWord(data, offset, length, true);
|
||||||
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
operandStr = PseudoOp.FormatNumericOperand(formatter, Project.SymbolTable,
|
||||||
mLocalizer.LabelMap, dfd, operand, length,
|
mLocalizer.LabelMap, dfd, operand, length,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FormatDescriptor.Type.Fill:
|
case FormatDescriptor.Type.Fill:
|
||||||
@ -583,7 +583,7 @@ namespace SourceGen.AsmGen {
|
|||||||
foreach (DefSymbol defSym in newDefs) {
|
foreach (DefSymbol defSym in newDefs) {
|
||||||
string valueStr = PseudoOp.FormatNumericOperand(SourceFormatter,
|
string valueStr = PseudoOp.FormatNumericOperand(SourceFormatter,
|
||||||
Project.SymbolTable, null, defSym.DataDescriptor, defSym.Value, 1,
|
Project.SymbolTable, null, defSym.DataDescriptor, defSym.Value, 1,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
OutputLine(SourceFormatter.FormatVariableLabel(defSym.Label),
|
OutputLine(SourceFormatter.FormatVariableLabel(defSym.Label),
|
||||||
SourceFormatter.FormatPseudoOp(sDataOpNames.VarDirective),
|
SourceFormatter.FormatPseudoOp(sDataOpNames.VarDirective),
|
||||||
valueStr, SourceFormatter.FormatEolComment(defSym.Comment));
|
valueStr, SourceFormatter.FormatEolComment(defSym.Comment));
|
||||||
|
@ -157,7 +157,7 @@ namespace SourceGen.AsmGen {
|
|||||||
// Use an operand length of 1 so values are shown as concisely as possible.
|
// Use an operand length of 1 so values are shown as concisely as possible.
|
||||||
string valueStr = PseudoOp.FormatNumericOperand(formatter, proj.SymbolTable,
|
string valueStr = PseudoOp.FormatNumericOperand(formatter, proj.SymbolTable,
|
||||||
gen.Localizer.LabelMap, defSym.DataDescriptor, defSym.Value, 1,
|
gen.Localizer.LabelMap, defSym.DataDescriptor, defSym.Value, 1,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
gen.OutputEquDirective(defSym.Label, valueStr, defSym.Comment);
|
gen.OutputEquDirective(defSym.Label, valueStr, defSym.Comment);
|
||||||
|
|
||||||
prevConst = defSym.IsConstant;
|
prevConst = defSym.IsConstant;
|
||||||
@ -204,7 +204,7 @@ namespace SourceGen.AsmGen {
|
|||||||
|
|
||||||
string formattedOperand = null;
|
string formattedOperand = null;
|
||||||
int operandLen = instrLen - 1;
|
int operandLen = instrLen - 1;
|
||||||
PseudoOp.FormatNumericOpFlags opFlags = PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix;
|
PseudoOp.FormatNumericOpFlags opFlags = PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix;
|
||||||
bool isPcRelBankWrap = false;
|
bool isPcRelBankWrap = false;
|
||||||
|
|
||||||
// Tweak branch instructions. We want to show the absolute address rather
|
// Tweak branch instructions. We want to show the absolute address rather
|
||||||
@ -245,10 +245,10 @@ namespace SourceGen.AsmGen {
|
|||||||
// Special handling for the double-operand block move.
|
// Special handling for the double-operand block move.
|
||||||
string opstr1 = PseudoOp.FormatNumericOperand(formatter, proj.SymbolTable,
|
string opstr1 = PseudoOp.FormatNumericOperand(formatter, proj.SymbolTable,
|
||||||
gen.Localizer.LabelMap, dfd, operand >> 8, 1,
|
gen.Localizer.LabelMap, dfd, operand >> 8, 1,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
string opstr2 = PseudoOp.FormatNumericOperand(formatter, proj.SymbolTable,
|
string opstr2 = PseudoOp.FormatNumericOperand(formatter, proj.SymbolTable,
|
||||||
gen.Localizer.LabelMap, dfd, operand & 0xff, 1,
|
gen.Localizer.LabelMap, dfd, operand & 0xff, 1,
|
||||||
PseudoOp.FormatNumericOpFlags.StripLabelPrefixSuffix);
|
PseudoOp.FormatNumericOpFlags.OmitLabelPrefixSuffix);
|
||||||
if (gen.Quirks.BlockMoveArgsReversed) {
|
if (gen.Quirks.BlockMoveArgsReversed) {
|
||||||
string tmp = opstr1;
|
string tmp = opstr1;
|
||||||
opstr1 = opstr2;
|
opstr1 = opstr2;
|
||||||
|
@ -409,20 +409,27 @@ namespace SourceGen {
|
|||||||
typeStr = Res.Strings.EQU_ADDRESS;
|
typeStr = Res.Strings.EQU_ADDRESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
string msgStr = null;
|
if (!defSym.HasWidth && !defSym.IsConstant) {
|
||||||
if (defSym.HasWidth) {
|
// It's an address without an explicit width, do not annotate.
|
||||||
msgStr = typeStr + "/" + defSym.DataDescriptor.Length;
|
return operand;
|
||||||
} else if (defSym.IsConstant) {
|
|
||||||
// not entirely convinced we want this, but there's currently no other way
|
|
||||||
// to tell the difference between an address and a constant from the code list
|
|
||||||
msgStr = typeStr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msgStr == null) {
|
StringBuilder sb = new StringBuilder(operand.Length + typeStr.Length + 16);
|
||||||
return operand;
|
sb.Append(operand);
|
||||||
} else {
|
|
||||||
return operand + " {" + msgStr + "}";
|
int spacesNeeded = 7 - operand.Length;
|
||||||
|
do { // always output at least one space
|
||||||
|
sb.Append(' ');
|
||||||
|
} while (--spacesNeeded > 0);
|
||||||
|
|
||||||
|
sb.Append("{");
|
||||||
|
sb.Append(typeStr);
|
||||||
|
if (defSym.HasWidth) {
|
||||||
|
sb.Append('/');
|
||||||
|
sb.Append(defSym.DataDescriptor.Length);
|
||||||
}
|
}
|
||||||
|
sb.Append("}");
|
||||||
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -552,7 +559,7 @@ namespace SourceGen {
|
|||||||
None = 0,
|
None = 0,
|
||||||
IsPcRel = 1, // opcode is PC relative, e.g. branch or PER
|
IsPcRel = 1, // opcode is PC relative, e.g. branch or PER
|
||||||
HasHashPrefix = 1 << 1, // operand has a leading '#', reducing ambiguity
|
HasHashPrefix = 1 << 1, // operand has a leading '#', reducing ambiguity
|
||||||
StripLabelPrefixSuffix = 1 << 2, // don't show annotation char or non-unique prefix
|
OmitLabelPrefixSuffix = 1 << 2, // don't show annotation char or non-unique prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -711,7 +718,7 @@ namespace SourceGen {
|
|||||||
|
|
||||||
// Now put the prefix/suffix back on if desired. We don't want to mess with it
|
// Now put the prefix/suffix back on if desired. We don't want to mess with it
|
||||||
// if it's from the assembler.
|
// if it's from the assembler.
|
||||||
if ((flags & FormatNumericOpFlags.StripLabelPrefixSuffix) == 0) {
|
if ((flags & FormatNumericOpFlags.OmitLabelPrefixSuffix) == 0) {
|
||||||
symLabel = Symbol.ConvertLabelForDisplay(symLabel, sym.LabelAnno,
|
symLabel = Symbol.ConvertLabelForDisplay(symLabel, sym.LabelAnno,
|
||||||
sym.IsNonUnique, formatter);
|
sym.IsNonUnique, formatter);
|
||||||
} else {
|
} else {
|
||||||
@ -854,7 +861,7 @@ namespace SourceGen {
|
|||||||
if (labelMap != null && labelMap.TryGetValue(symLabel, out string newLabel)) {
|
if (labelMap != null && labelMap.TryGetValue(symLabel, out string newLabel)) {
|
||||||
symLabel = newLabel;
|
symLabel = newLabel;
|
||||||
}
|
}
|
||||||
if ((flags & FormatNumericOpFlags.StripLabelPrefixSuffix) == 0) {
|
if ((flags & FormatNumericOpFlags.OmitLabelPrefixSuffix) == 0) {
|
||||||
symLabel = Symbol.ConvertLabelForDisplay(symLabel, sym.LabelAnno,
|
symLabel = Symbol.ConvertLabelForDisplay(symLabel, sym.LabelAnno,
|
||||||
sym.IsNonUnique, formatter);
|
sym.IsNonUnique, formatter);
|
||||||
} else {
|
} else {
|
||||||
@ -955,7 +962,7 @@ namespace SourceGen {
|
|||||||
if (labelMap != null && labelMap.TryGetValue(symLabel, out string newLabel)) {
|
if (labelMap != null && labelMap.TryGetValue(symLabel, out string newLabel)) {
|
||||||
symLabel = newLabel;
|
symLabel = newLabel;
|
||||||
}
|
}
|
||||||
if ((flags & FormatNumericOpFlags.StripLabelPrefixSuffix) == 0) {
|
if ((flags & FormatNumericOpFlags.OmitLabelPrefixSuffix) == 0) {
|
||||||
symLabel = Symbol.ConvertLabelForDisplay(symLabel, sym.LabelAnno,
|
symLabel = Symbol.ConvertLabelForDisplay(symLabel, sym.LabelAnno,
|
||||||
sym.IsNonUnique, formatter);
|
sym.IsNonUnique, formatter);
|
||||||
} else {
|
} else {
|
||||||
@ -1005,11 +1012,14 @@ namespace SourceGen {
|
|||||||
// testing the value for DP range, this would behave correctly. Unfortunately
|
// testing the value for DP range, this would behave correctly. Unfortunately
|
||||||
// there is no "force DP" modifier, so we either need to add an explicit mask
|
// there is no "force DP" modifier, so we either need to add an explicit mask
|
||||||
// or just punt and use the original adjustment.
|
// or just punt and use the original adjustment.
|
||||||
|
//
|
||||||
|
// Note DP is only relevant for bank zero.
|
||||||
|
//
|
||||||
// TODO(someday): we only need to do this for ambiguous DP. If the instruction
|
// TODO(someday): we only need to do this for ambiguous DP. If the instruction
|
||||||
// is imm or doesn't have an abs equivalent, or it's a fixed-width data item
|
// is imm or doesn't have an abs equivalent, or it's a fixed-width data item
|
||||||
// like .DD1, we can still use the nicer-looking adjustment. We don't currently
|
// like .DD1, we can still use the nicer-looking adjustment. We don't currently
|
||||||
// pass the OpDef in here.
|
// pass the OpDef in here.
|
||||||
if ((sym.Value & 0xff0000) != ((sym.Value + adjustment) & 0xff0000)) {
|
if ((sym.Value & 0xff0000) == 0 && ((sym.Value + adjustment) & 0xff0000) != 0) {
|
||||||
adjustment = origAdjust;
|
adjustment = origAdjust;
|
||||||
}
|
}
|
||||||
} else if (keepLen == 2) {
|
} else if (keepLen == 2) {
|
||||||
|
Loading…
Reference in New Issue
Block a user