From ab9287fef84754b6e706f67f32ceb5e30bf609ae Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Sun, 21 Oct 2018 16:36:48 -0700 Subject: [PATCH] Progress toward new assembler configuration Changed the "quick config" buttons for the asm config and pseudo-op tabs into a drop-list and "set" button. The default values for each assembler are now defined in the Asm*.cs file, rather than in the settings code. --- .../AppForms/EditAppSettings.Designer.cs | 159 +++++++++--------- SourceGen/AppForms/EditAppSettings.cs | 94 ++++------- SourceGen/AsmGen/AsmCc65.cs | 47 ++++-- SourceGen/AsmGen/AsmMerlin32.cs | 61 +++++-- SourceGen/AsmGen/GenCommon.cs | 2 +- SourceGen/AsmGen/IGenerator.cs | 15 +- 6 files changed, 218 insertions(+), 160 deletions(-) diff --git a/SourceGen/AppForms/EditAppSettings.Designer.cs b/SourceGen/AppForms/EditAppSettings.Designer.cs index c1f665d..7f87f9b 100644 --- a/SourceGen/AppForms/EditAppSettings.Designer.cs +++ b/SourceGen/AppForms/EditAppSettings.Designer.cs @@ -91,8 +91,8 @@ namespace SourceGen.AppForms { this.displayFormatTabPage = new System.Windows.Forms.TabPage(); this.fmtExplanationLabel = new System.Windows.Forms.Label(); this.quickDisplayFormatGroup = new System.Windows.Forms.GroupBox(); - this.quickFmtMerlin32Button = new System.Windows.Forms.Button(); - this.quickFmtCc65Button = new System.Windows.Forms.Button(); + this.displayFmtQuickComboBox = new System.Windows.Forms.ComboBox(); + this.displayFmtSetButton = new System.Windows.Forms.Button(); this.quickFmtDefaultButton = new System.Windows.Forms.Button(); this.useMerlinExpressions = new System.Windows.Forms.CheckBox(); this.operandWidthGroupBox = new System.Windows.Forms.GroupBox(); @@ -108,8 +108,8 @@ namespace SourceGen.AppForms { this.disambSuffix16TextBox = new System.Windows.Forms.TextBox(); this.pseudoOpTabPage = new System.Windows.Forms.TabPage(); this.quickPseudoSetGroup = new System.Windows.Forms.GroupBox(); - this.quickPseudoMerlin32 = new System.Windows.Forms.Button(); - this.quickPseudoCc65Button = new System.Windows.Forms.Button(); + this.pseudoOpSetButton = new System.Windows.Forms.Button(); + this.pseudoOpQuickComboBox = new System.Windows.Forms.ComboBox(); this.quickPseudoDefaultButton = new System.Windows.Forms.Button(); this.strDciHiTextBox = new System.Windows.Forms.TextBox(); this.strDciHiLabel = new System.Windows.Forms.Label(); @@ -178,7 +178,7 @@ namespace SourceGen.AppForms { this.cancelButton.Location = new System.Drawing.Point(537, 406); this.cancelButton.Name = "cancelButton"; this.cancelButton.Size = new System.Drawing.Size(75, 23); - this.cancelButton.TabIndex = 3; + this.cancelButton.TabIndex = 0; this.cancelButton.Text = "Cancel"; this.cancelButton.UseVisualStyleBackColor = true; // @@ -189,7 +189,7 @@ namespace SourceGen.AppForms { this.okButton.Location = new System.Drawing.Point(456, 406); this.okButton.Name = "okButton"; this.okButton.Size = new System.Drawing.Size(75, 23); - this.okButton.TabIndex = 2; + this.okButton.TabIndex = 3; this.okButton.Text = "OK"; this.okButton.UseVisualStyleBackColor = true; this.okButton.Click += new System.EventHandler(this.okButton_Click); @@ -200,7 +200,7 @@ namespace SourceGen.AppForms { this.applyButton.Location = new System.Drawing.Point(354, 406); this.applyButton.Name = "applyButton"; this.applyButton.Size = new System.Drawing.Size(75, 23); - this.applyButton.TabIndex = 1; + this.applyButton.TabIndex = 2; this.applyButton.Text = "Apply"; this.applyButton.UseVisualStyleBackColor = true; this.applyButton.Click += new System.EventHandler(this.applyButton_Click); @@ -218,7 +218,7 @@ namespace SourceGen.AppForms { this.settingsTabControl.Name = "settingsTabControl"; this.settingsTabControl.SelectedIndex = 0; this.settingsTabControl.Size = new System.Drawing.Size(622, 398); - this.settingsTabControl.TabIndex = 0; + this.settingsTabControl.TabIndex = 1; // // codeViewTabPage // @@ -631,9 +631,6 @@ namespace SourceGen.AppForms { // this.asmConfigComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.asmConfigComboBox.FormattingEnabled = true; - this.asmConfigComboBox.Items.AddRange(new object[] { - "cc65", - "Merlin32"}); this.asmConfigComboBox.Location = new System.Drawing.Point(91, 19); this.asmConfigComboBox.Name = "asmConfigComboBox"; this.asmConfigComboBox.Size = new System.Drawing.Size(154, 21); @@ -734,40 +731,41 @@ namespace SourceGen.AppForms { this.fmtExplanationLabel.Location = new System.Drawing.Point(7, 7); this.fmtExplanationLabel.Name = "fmtExplanationLabel"; this.fmtExplanationLabel.Size = new System.Drawing.Size(374, 13); - this.fmtExplanationLabel.TabIndex = 52; + this.fmtExplanationLabel.TabIndex = 0; this.fmtExplanationLabel.Text = "Configure display format options. This does not affect source code generation."; // // quickDisplayFormatGroup // - this.quickDisplayFormatGroup.Controls.Add(this.quickFmtMerlin32Button); - this.quickDisplayFormatGroup.Controls.Add(this.quickFmtCc65Button); + this.quickDisplayFormatGroup.Controls.Add(this.displayFmtQuickComboBox); + this.quickDisplayFormatGroup.Controls.Add(this.displayFmtSetButton); this.quickDisplayFormatGroup.Controls.Add(this.quickFmtDefaultButton); - this.quickDisplayFormatGroup.Location = new System.Drawing.Point(348, 291); + this.quickDisplayFormatGroup.Location = new System.Drawing.Point(215, 291); this.quickDisplayFormatGroup.Name = "quickDisplayFormatGroup"; - this.quickDisplayFormatGroup.Size = new System.Drawing.Size(258, 75); - this.quickDisplayFormatGroup.TabIndex = 51; + this.quickDisplayFormatGroup.Size = new System.Drawing.Size(391, 75); + this.quickDisplayFormatGroup.TabIndex = 3; this.quickDisplayFormatGroup.TabStop = false; this.quickDisplayFormatGroup.Text = "Quick Set"; // - // quickFmtMerlin32Button + // displayFmtQuickComboBox // - this.quickFmtMerlin32Button.Location = new System.Drawing.Point(173, 30); - this.quickFmtMerlin32Button.Name = "quickFmtMerlin32Button"; - this.quickFmtMerlin32Button.Size = new System.Drawing.Size(75, 23); - this.quickFmtMerlin32Button.TabIndex = 2; - this.quickFmtMerlin32Button.Text = "Merlin 32"; - this.quickFmtMerlin32Button.UseVisualStyleBackColor = true; - this.quickFmtMerlin32Button.Click += new System.EventHandler(this.quickFmtMerlin32Button_Click); + this.displayFmtQuickComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.displayFmtQuickComboBox.FormattingEnabled = true; + this.displayFmtQuickComboBox.Items.AddRange(new object[] { + "MegaAsm"}); + this.displayFmtQuickComboBox.Location = new System.Drawing.Point(136, 32); + this.displayFmtQuickComboBox.Name = "displayFmtQuickComboBox"; + this.displayFmtQuickComboBox.Size = new System.Drawing.Size(168, 21); + this.displayFmtQuickComboBox.TabIndex = 1; // - // quickFmtCc65Button + // displayFmtSetButton // - this.quickFmtCc65Button.Location = new System.Drawing.Point(92, 30); - this.quickFmtCc65Button.Name = "quickFmtCc65Button"; - this.quickFmtCc65Button.Size = new System.Drawing.Size(75, 23); - this.quickFmtCc65Button.TabIndex = 1; - this.quickFmtCc65Button.Text = "cc65"; - this.quickFmtCc65Button.UseVisualStyleBackColor = true; - this.quickFmtCc65Button.Click += new System.EventHandler(this.quickFmtCc65Button_Click); + this.displayFmtSetButton.Location = new System.Drawing.Point(310, 30); + this.displayFmtSetButton.Name = "displayFmtSetButton"; + this.displayFmtSetButton.Size = new System.Drawing.Size(75, 23); + this.displayFmtSetButton.TabIndex = 2; + this.displayFmtSetButton.Text = "Set"; + this.displayFmtSetButton.UseVisualStyleBackColor = true; + this.displayFmtSetButton.Click += new System.EventHandler(this.displayFmtSetButton_Click); // // quickFmtDefaultButton // @@ -785,7 +783,7 @@ namespace SourceGen.AppForms { this.useMerlinExpressions.Location = new System.Drawing.Point(6, 153); this.useMerlinExpressions.Name = "useMerlinExpressions"; this.useMerlinExpressions.Size = new System.Drawing.Size(158, 17); - this.useMerlinExpressions.TabIndex = 49; + this.useMerlinExpressions.TabIndex = 2; this.useMerlinExpressions.Text = "Use Merlin-style expressions"; this.useMerlinExpressions.UseVisualStyleBackColor = true; this.useMerlinExpressions.CheckedChanged += new System.EventHandler(this.shiftAfterAdjustCheckBox_CheckedChanged); @@ -802,51 +800,51 @@ namespace SourceGen.AppForms { this.operandWidthGroupBox.Controls.Add(this.disambOpcodeSuffixLabel); this.operandWidthGroupBox.Controls.Add(this.disambSuffix24TextBox); this.operandWidthGroupBox.Controls.Add(this.disambSuffix16TextBox); - this.operandWidthGroupBox.Location = new System.Drawing.Point(6, 38); + this.operandWidthGroupBox.Location = new System.Drawing.Point(6, 40); this.operandWidthGroupBox.Name = "operandWidthGroupBox"; this.operandWidthGroupBox.Size = new System.Drawing.Size(295, 98); - this.operandWidthGroupBox.TabIndex = 48; + this.operandWidthGroupBox.TabIndex = 1; this.operandWidthGroupBox.TabStop = false; this.operandWidthGroupBox.Text = "Operand Width Disambiguator"; // // disambPrefix24TextBox // this.disambPrefix24TextBox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.disambPrefix24TextBox.Location = new System.Drawing.Point(220, 64); + this.disambPrefix24TextBox.Location = new System.Drawing.Point(220, 66); this.disambPrefix24TextBox.MaxLength = 8; this.disambPrefix24TextBox.Name = "disambPrefix24TextBox"; this.disambPrefix24TextBox.Size = new System.Drawing.Size(62, 20); - this.disambPrefix24TextBox.TabIndex = 13; + this.disambPrefix24TextBox.TabIndex = 9; this.disambPrefix24TextBox.Text = ".placeho"; this.disambPrefix24TextBox.TextChanged += new System.EventHandler(this.WidthDisamControlChanged); // // disambPrefix16TextBox // this.disambPrefix16TextBox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.disambPrefix16TextBox.Location = new System.Drawing.Point(220, 38); + this.disambPrefix16TextBox.Location = new System.Drawing.Point(220, 40); this.disambPrefix16TextBox.MaxLength = 8; this.disambPrefix16TextBox.Name = "disambPrefix16TextBox"; this.disambPrefix16TextBox.Size = new System.Drawing.Size(62, 20); - this.disambPrefix16TextBox.TabIndex = 12; + this.disambPrefix16TextBox.TabIndex = 7; this.disambPrefix16TextBox.Text = ".placeho"; this.disambPrefix16TextBox.TextChanged += new System.EventHandler(this.WidthDisamControlChanged); // // disambPrefix24Label // this.disambPrefix24Label.AutoSize = true; - this.disambPrefix24Label.Location = new System.Drawing.Point(171, 66); + this.disambPrefix24Label.Location = new System.Drawing.Point(171, 68); this.disambPrefix24Label.Name = "disambPrefix24Label"; this.disambPrefix24Label.Size = new System.Drawing.Size(36, 13); - this.disambPrefix24Label.TabIndex = 11; + this.disambPrefix24Label.TabIndex = 8; this.disambPrefix24Label.Text = "24 bit:"; // // disambPrefix16Label // this.disambPrefix16Label.AutoSize = true; - this.disambPrefix16Label.Location = new System.Drawing.Point(171, 40); + this.disambPrefix16Label.Location = new System.Drawing.Point(171, 42); this.disambPrefix16Label.Name = "disambPrefix16Label"; this.disambPrefix16Label.Size = new System.Drawing.Size(36, 13); - this.disambPrefix16Label.TabIndex = 10; + this.disambPrefix16Label.TabIndex = 6; this.disambPrefix16Label.Text = "16 bit:"; // // disambOperandPrefixLabel @@ -855,25 +853,25 @@ namespace SourceGen.AppForms { this.disambOperandPrefixLabel.Location = new System.Drawing.Point(171, 20); this.disambOperandPrefixLabel.Name = "disambOperandPrefixLabel"; this.disambOperandPrefixLabel.Size = new System.Drawing.Size(79, 13); - this.disambOperandPrefixLabel.TabIndex = 9; + this.disambOperandPrefixLabel.TabIndex = 5; this.disambOperandPrefixLabel.Text = "Operand prefix:"; // // disambSuffix24Label // this.disambSuffix24Label.AutoSize = true; - this.disambSuffix24Label.Location = new System.Drawing.Point(10, 66); + this.disambSuffix24Label.Location = new System.Drawing.Point(10, 68); this.disambSuffix24Label.Name = "disambSuffix24Label"; this.disambSuffix24Label.Size = new System.Drawing.Size(36, 13); - this.disambSuffix24Label.TabIndex = 8; + this.disambSuffix24Label.TabIndex = 3; this.disambSuffix24Label.Text = "24 bit:"; // // disambSuffix16Label // this.disambSuffix16Label.AutoSize = true; - this.disambSuffix16Label.Location = new System.Drawing.Point(10, 40); + this.disambSuffix16Label.Location = new System.Drawing.Point(10, 42); this.disambSuffix16Label.Name = "disambSuffix16Label"; this.disambSuffix16Label.Size = new System.Drawing.Size(36, 13); - this.disambSuffix16Label.TabIndex = 7; + this.disambSuffix16Label.TabIndex = 1; this.disambSuffix16Label.Text = "16 bit:"; // // disambOpcodeSuffixLabel @@ -882,28 +880,28 @@ namespace SourceGen.AppForms { this.disambOpcodeSuffixLabel.Location = new System.Drawing.Point(7, 20); this.disambOpcodeSuffixLabel.Name = "disambOpcodeSuffixLabel"; this.disambOpcodeSuffixLabel.Size = new System.Drawing.Size(75, 13); - this.disambOpcodeSuffixLabel.TabIndex = 6; + this.disambOpcodeSuffixLabel.TabIndex = 0; this.disambOpcodeSuffixLabel.Text = "Opcode suffix:"; // // disambSuffix24TextBox // this.disambSuffix24TextBox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.disambSuffix24TextBox.Location = new System.Drawing.Point(62, 64); + this.disambSuffix24TextBox.Location = new System.Drawing.Point(62, 66); this.disambSuffix24TextBox.MaxLength = 8; this.disambSuffix24TextBox.Name = "disambSuffix24TextBox"; this.disambSuffix24TextBox.Size = new System.Drawing.Size(62, 20); - this.disambSuffix24TextBox.TabIndex = 5; + this.disambSuffix24TextBox.TabIndex = 4; this.disambSuffix24TextBox.Text = ".placeho"; this.disambSuffix24TextBox.TextChanged += new System.EventHandler(this.WidthDisamControlChanged); // // disambSuffix16TextBox // this.disambSuffix16TextBox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.disambSuffix16TextBox.Location = new System.Drawing.Point(62, 38); + this.disambSuffix16TextBox.Location = new System.Drawing.Point(62, 40); this.disambSuffix16TextBox.MaxLength = 8; this.disambSuffix16TextBox.Name = "disambSuffix16TextBox"; this.disambSuffix16TextBox.Size = new System.Drawing.Size(62, 20); - this.disambSuffix16TextBox.TabIndex = 3; + this.disambSuffix16TextBox.TabIndex = 2; this.disambSuffix16TextBox.Text = ".placeho"; this.disambSuffix16TextBox.TextChanged += new System.EventHandler(this.WidthDisamControlChanged); // @@ -965,35 +963,34 @@ namespace SourceGen.AppForms { // // quickPseudoSetGroup // - this.quickPseudoSetGroup.Controls.Add(this.quickPseudoMerlin32); - this.quickPseudoSetGroup.Controls.Add(this.quickPseudoCc65Button); + this.quickPseudoSetGroup.Controls.Add(this.pseudoOpSetButton); + this.quickPseudoSetGroup.Controls.Add(this.pseudoOpQuickComboBox); this.quickPseudoSetGroup.Controls.Add(this.quickPseudoDefaultButton); - this.quickPseudoSetGroup.Location = new System.Drawing.Point(348, 291); + this.quickPseudoSetGroup.Location = new System.Drawing.Point(215, 291); this.quickPseudoSetGroup.Name = "quickPseudoSetGroup"; - this.quickPseudoSetGroup.Size = new System.Drawing.Size(258, 75); - this.quickPseudoSetGroup.TabIndex = 46; + this.quickPseudoSetGroup.Size = new System.Drawing.Size(391, 75); + this.quickPseudoSetGroup.TabIndex = 45; this.quickPseudoSetGroup.TabStop = false; this.quickPseudoSetGroup.Text = "Quick Set"; // - // quickPseudoMerlin32 + // pseudoOpSetButton // - this.quickPseudoMerlin32.Location = new System.Drawing.Point(173, 30); - this.quickPseudoMerlin32.Name = "quickPseudoMerlin32"; - this.quickPseudoMerlin32.Size = new System.Drawing.Size(75, 23); - this.quickPseudoMerlin32.TabIndex = 2; - this.quickPseudoMerlin32.Text = "Merlin 32"; - this.quickPseudoMerlin32.UseVisualStyleBackColor = true; - this.quickPseudoMerlin32.Click += new System.EventHandler(this.quickPseudoMerlin32_Click); + this.pseudoOpSetButton.Location = new System.Drawing.Point(310, 30); + this.pseudoOpSetButton.Name = "pseudoOpSetButton"; + this.pseudoOpSetButton.Size = new System.Drawing.Size(75, 23); + this.pseudoOpSetButton.TabIndex = 2; + this.pseudoOpSetButton.Text = "Set"; + this.pseudoOpSetButton.UseVisualStyleBackColor = true; + this.pseudoOpSetButton.Click += new System.EventHandler(this.pseudoOpSetButton_Click); // - // quickPseudoCc65Button + // pseudoOpQuickComboBox // - this.quickPseudoCc65Button.Location = new System.Drawing.Point(92, 30); - this.quickPseudoCc65Button.Name = "quickPseudoCc65Button"; - this.quickPseudoCc65Button.Size = new System.Drawing.Size(75, 23); - this.quickPseudoCc65Button.TabIndex = 1; - this.quickPseudoCc65Button.Text = "cc65"; - this.quickPseudoCc65Button.UseVisualStyleBackColor = true; - this.quickPseudoCc65Button.Click += new System.EventHandler(this.quickPseudoCc65Button_Click); + this.pseudoOpQuickComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.pseudoOpQuickComboBox.FormattingEnabled = true; + this.pseudoOpQuickComboBox.Location = new System.Drawing.Point(136, 32); + this.pseudoOpQuickComboBox.Name = "pseudoOpQuickComboBox"; + this.pseudoOpQuickComboBox.Size = new System.Drawing.Size(168, 21); + this.pseudoOpQuickComboBox.TabIndex = 1; // // quickPseudoDefaultButton // @@ -1250,10 +1247,10 @@ namespace SourceGen.AppForms { this.popExplanationLabel.AutoSize = true; this.popExplanationLabel.Location = new System.Drawing.Point(7, 7); this.popExplanationLabel.Name = "popExplanationLabel"; - this.popExplanationLabel.Size = new System.Drawing.Size(541, 13); + this.popExplanationLabel.Size = new System.Drawing.Size(550, 13); this.popExplanationLabel.TabIndex = 0; this.popExplanationLabel.Text = "Select pseudo-op names for display. This does not affect source code generation. " + - "Blank entries get default value."; + "Blank entries get a default value."; // // denseTextBox // @@ -1571,8 +1568,6 @@ namespace SourceGen.AppForms { private System.Windows.Forms.Button selectFontButton; private System.Windows.Forms.Label currentFontDisplayLabel; private System.Windows.Forms.GroupBox quickPseudoSetGroup; - private System.Windows.Forms.Button quickPseudoMerlin32; - private System.Windows.Forms.Button quickPseudoCc65Button; private System.Windows.Forms.Button quickPseudoDefaultButton; private System.Windows.Forms.GroupBox upperCaseGroupBox; private System.Windows.Forms.CheckBox upperOpcodeCheckBox; @@ -1600,8 +1595,6 @@ namespace SourceGen.AppForms { private System.Windows.Forms.TextBox disambSuffix24TextBox; private System.Windows.Forms.TextBox disambSuffix16TextBox; private System.Windows.Forms.GroupBox quickDisplayFormatGroup; - private System.Windows.Forms.Button quickFmtMerlin32Button; - private System.Windows.Forms.Button quickFmtCc65Button; private System.Windows.Forms.Button quickFmtDefaultButton; private System.Windows.Forms.Label configAsmGenLabel; private System.Windows.Forms.CheckBox longLabelNewLineCheckBox; @@ -1620,5 +1613,9 @@ namespace SourceGen.AppForms { private System.Windows.Forms.TextBox asmLabelColWidthTextBox; private System.Windows.Forms.Label asmConfigAssemblerLabel; private System.Windows.Forms.Label asmColWidthIdLabel; + private System.Windows.Forms.Button pseudoOpSetButton; + private System.Windows.Forms.ComboBox pseudoOpQuickComboBox; + private System.Windows.Forms.Button displayFmtSetButton; + private System.Windows.Forms.ComboBox displayFmtQuickComboBox; } } \ No newline at end of file diff --git a/SourceGen/AppForms/EditAppSettings.cs b/SourceGen/AppForms/EditAppSettings.cs index f54b164..ddb07e1 100644 --- a/SourceGen/AppForms/EditAppSettings.cs +++ b/SourceGen/AppForms/EditAppSettings.cs @@ -152,13 +152,14 @@ namespace SourceGen.AppForms { }; ConfigureComboBox(asmConfigComboBox); + ConfigureComboBox(displayFmtQuickComboBox); + ConfigureComboBox(pseudoOpQuickComboBox); } private void ConfigureComboBox(ComboBox cb) { // Show the Name field. cb.DisplayMember = "Name"; - cb.Items.Clear(); IEnumerator iter = AssemblerInfo.GetInfoEnumerator(); bool foundMatch = false; @@ -450,7 +451,11 @@ namespace SourceGen.AppForms { } private void asmConfigComboBox_SelectedIndexChanged(object sender, EventArgs e) { + // They're switching to a different asm config. Changing the boxes will cause + // the dirty flag to be raised, which isn't right, so we save/restore it. + bool oldDirty = mDirty; PopulateAsmConfigItems(); + SetDirty(oldDirty); } private void asmExeBrowseButton_Click(object sender, EventArgs e) { @@ -555,7 +560,7 @@ namespace SourceGen.AppForms { } /// - /// Sets all of the width disambiguation settings. Used for the quick-set buttons. + /// Sets all of the width disambiguation settings. /// private void SetWidthDisamSettings(string opcodeSuffixAbs, string opcodeSuffixLong, string operandPrefixAbs, string operandPrefixLong) { @@ -596,22 +601,29 @@ namespace SourceGen.AppForms { SetDirty(true); } + private void displayFmtSetButton_Click(object sender, EventArgs e) { + AsmComboItem item = (AsmComboItem)displayFmtQuickComboBox.SelectedItem; + AssemblerInfo.Id asmId = item.AssemblerId; + AsmGen.IGenerator gen = AssemblerInfo.GetGenerator(asmId); + + PseudoOp.PseudoOpNames opNames; + Asm65.Formatter.FormatConfig formatConfig; + gen.GetDefaultDisplayFormat(out opNames, out formatConfig); + + SetWidthDisamSettings(formatConfig.mForceAbsOpcodeSuffix, + formatConfig.mForceLongOpcodeSuffix, + formatConfig.mForceAbsOperandPrefix, + formatConfig.mForceLongOperandPrefix); + useMerlinExpressions.Checked = (formatConfig.mExpressionMode == + Asm65.Formatter.FormatConfig.ExpressionMode.Merlin); + + // dirty flag set by change watchers if one or more fields have changed + } + private void quickFmtDefaultButton_Click(object sender, EventArgs e) { SetWidthDisamSettings(null, "l", "a:", "f:"); useMerlinExpressions.Checked = false; - // dirty flag set by change callbacks - } - - private void quickFmtCc65Button_Click(object sender, EventArgs e) { - SetWidthDisamSettings(null, null, "a:", "f:"); - useMerlinExpressions.Checked = false; - // dirty flag set by change callbacks - } - - private void quickFmtMerlin32Button_Click(object sender, EventArgs e) { - SetWidthDisamSettings(":", "l", null, null); - useMerlinExpressions.Checked = true; - // dirty flag set by change callbacks + // dirty flag set by change watchers if one or more fields have changed } #endregion Display Format @@ -653,49 +665,17 @@ namespace SourceGen.AppForms { ImportPseudoOpNames(new PseudoOp.PseudoOpNames()); } - private void quickPseudoCc65Button_Click(object sender, EventArgs e) { - ImportPseudoOpNames(new PseudoOp.PseudoOpNames() { - EquDirective = "=", - OrgDirective = ".org", - DefineData1 = ".byte", - DefineData2 = ".word", - DefineData3 = ".faraddr", - DefineData4 = ".dword", - DefineBigData2 = ".dbyt", - Fill = ".res", - StrGeneric = ".byte", - StrNullTerm = ".asciiz", - }); - } + private void pseudoOpSetButton_Click(object sender, EventArgs e) { + AsmComboItem item = (AsmComboItem)pseudoOpQuickComboBox.SelectedItem; + AssemblerInfo.Id asmId = item.AssemblerId; + AsmGen.IGenerator gen = AssemblerInfo.GetGenerator(asmId); - private void quickPseudoMerlin32_Click(object sender, EventArgs e) { - // Note this doesn't quite match up with the Merlin generator, which uses - // the same pseudo-op for low/high ASCII but different string delimiters. We - // don't change the delimiters for the display list, so we want to tweak the - // opcode slightly. - //char hiAscii = '\u21e1'; - char hiAscii = '\u2191'; - ImportPseudoOpNames(new PseudoOp.PseudoOpNames() { - EquDirective = "equ", - OrgDirective = "org", - DefineData1 = "dfb", - DefineData2 = "dw", - DefineData3 = "adr", - DefineData4 = "adrl", - DefineBigData2 = "ddb", - Fill = "ds", - Dense = "hex", - StrGeneric = "asc", - StrGenericHi = "asc" + hiAscii, - StrReverse = "rev", - StrReverseHi = "rev" + hiAscii, - StrLen8 = "str", - StrLen8Hi = "str" + hiAscii, - StrLen16 = "strl", - StrLen16Hi = "strl" + hiAscii, - StrDci = "dci", - StrDciHi = "dci" + hiAscii, - }); + PseudoOp.PseudoOpNames opNames; + Asm65.Formatter.FormatConfig formatConfig; + gen.GetDefaultDisplayFormat(out opNames, out formatConfig); + ImportPseudoOpNames(opNames); + + // dirty flag set by change watchers if one or more fields have changed } #endregion Pseudo-Op diff --git a/SourceGen/AsmGen/AsmCc65.cs b/SourceGen/AsmGen/AsmCc65.cs index f8c89ef..da9f6fe 100644 --- a/SourceGen/AsmGen/AsmCc65.cs +++ b/SourceGen/AsmGen/AsmCc65.cs @@ -121,6 +121,26 @@ namespace SourceGen.AsmGen { }; + // IGenerator + public void GetDefaultDisplayFormat(out PseudoOp.PseudoOpNames pseudoOps, + out Formatter.FormatConfig formatConfig) { + pseudoOps = new PseudoOp.PseudoOpNames() { + EquDirective = "=", + OrgDirective = ".org", + DefineData1 = ".byte", + DefineData2 = ".word", + DefineData3 = ".faraddr", + DefineData4 = ".dword", + DefineBigData2 = ".dbyt", + Fill = ".res", + StrGeneric = ".byte", + StrNullTerm = ".asciiz", + }; + + formatConfig = new Formatter.FormatConfig(); + SetFormatConfigValues(ref formatConfig); + } + // IGenerator public void Configure(DisasmProject project, string workDirectory, string fileNameBase, AssemblerVersion asmVersion, AppSettings settings) { @@ -156,6 +176,21 @@ namespace SourceGen.AsmGen { mColumnWidths = (int[])config.ColumnWidths.Clone(); } + /// + /// Configures the assembler-specific format items. + /// + private void SetFormatConfigValues(ref Formatter.FormatConfig config) { + config.mForceAbsOpcodeSuffix = string.Empty; + config.mForceLongOpcodeSuffix = string.Empty; + config.mForceAbsOperandPrefix = "a:"; // absolute + config.mForceLongOperandPrefix = "f:"; // far + config.mEndOfLineCommentDelimiter = ";"; + config.mFullLineCommentDelimiterBase = ";"; + config.mBoxLineCommentDelimiter = ";"; + config.mAllowHighAsciiCharConst = false; + config.mExpressionMode = Formatter.FormatConfig.ExpressionMode.Simple; + } + // IGenerator public List GenerateSource(BackgroundWorker worker) { List pathNames = new List(1); @@ -166,15 +201,7 @@ namespace SourceGen.AsmGen { Formatter.FormatConfig config = new Formatter.FormatConfig(); GenCommon.ConfigureFormatterFromSettings(Settings, ref config); - config.mForceAbsOpcodeSuffix = string.Empty; - config.mForceLongOpcodeSuffix = string.Empty; - config.mForceAbsOperandPrefix = "a:"; // absolute - config.mForceLongOperandPrefix = "f:"; // far - config.mEndOfLineCommentDelimiter = ";"; - config.mFullLineCommentDelimiterBase = ";"; - config.mBoxLineCommentDelimiter = ";"; - config.mAllowHighAsciiCharConst = false; - config.mExpressionMode = Formatter.FormatConfig.ExpressionMode.Simple; + SetFormatConfigValues(ref config); SourceFormatter = new Formatter(config); string msg = string.Format(Properties.Resources.PROGRESS_GENERATING_FMT, pathName); @@ -465,7 +492,7 @@ namespace SourceGen.AsmGen { // just ".feature labels_without_colons", but I'm trying to do things the way // that cc65 users will expect. if (!string.IsNullOrEmpty(label) && label[0] != '.' && - !String.Equals(opcode, sDataOpNames.EquDirective, + !string.Equals(opcode, sDataOpNames.EquDirective, StringComparison.InvariantCultureIgnoreCase)) { label += ':'; diff --git a/SourceGen/AsmGen/AsmMerlin32.cs b/SourceGen/AsmGen/AsmMerlin32.cs index ef12ba7..f22672b 100644 --- a/SourceGen/AsmGen/AsmMerlin32.cs +++ b/SourceGen/AsmGen/AsmMerlin32.cs @@ -122,6 +122,40 @@ namespace SourceGen.AsmGen { }; + // IGenerator + public void GetDefaultDisplayFormat(out PseudoOp.PseudoOpNames pseudoOps, + out Formatter.FormatConfig formatConfig) { + // This is not intended to match up with the Merlin generator, which uses + // the same pseudo-op for low/high ASCII but different string delimiters. We + // don't change the delimiters for the display list, so instead we tweak the + // opcode slightly. + char hiAscii = '\u2191'; + pseudoOps = new PseudoOp.PseudoOpNames() { + EquDirective = "equ", + OrgDirective = "org", + DefineData1 = "dfb", + DefineData2 = "dw", + DefineData3 = "adr", + DefineData4 = "adrl", + DefineBigData2 = "ddb", + Fill = "ds", + Dense = "hex", + StrGeneric = "asc", + StrGenericHi = "asc" + hiAscii, + StrReverse = "rev", + StrReverseHi = "rev" + hiAscii, + StrLen8 = "str", + StrLen8Hi = "str" + hiAscii, + StrLen16 = "strl", + StrLen16Hi = "strl" + hiAscii, + StrDci = "dci", + StrDciHi = "dci" + hiAscii, + }; + + formatConfig = new Formatter.FormatConfig(); + SetFormatConfigValues(ref formatConfig); + } + // IGenerator public void Configure(DisasmProject project, string workDirectory, string fileNameBase, AssemblerVersion asmVersion, AppSettings settings) { @@ -145,6 +179,21 @@ namespace SourceGen.AsmGen { mColumnWidths = (int[])config.ColumnWidths.Clone(); } + /// + /// Configures the assembler-specific format items. + /// + private void SetFormatConfigValues(ref Formatter.FormatConfig config) { + config.mForceAbsOpcodeSuffix = ":"; + config.mForceLongOpcodeSuffix = "l"; + config.mForceAbsOperandPrefix = string.Empty; + config.mForceLongOperandPrefix = string.Empty; + config.mEndOfLineCommentDelimiter = ";"; + config.mFullLineCommentDelimiterBase = ";"; + config.mBoxLineCommentDelimiter = string.Empty; + config.mAllowHighAsciiCharConst = true; + config.mExpressionMode = Formatter.FormatConfig.ExpressionMode.Merlin; + } + // IGenerator; executes on background thread public List GenerateSource(BackgroundWorker worker) { List pathNames = new List(1); @@ -155,15 +204,7 @@ namespace SourceGen.AsmGen { Formatter.FormatConfig config = new Formatter.FormatConfig(); GenCommon.ConfigureFormatterFromSettings(Settings, ref config); - config.mForceAbsOpcodeSuffix = ":"; - config.mForceLongOpcodeSuffix = "l"; - config.mForceAbsOperandPrefix = string.Empty; - config.mForceLongOperandPrefix = string.Empty; - config.mEndOfLineCommentDelimiter = ";"; - config.mFullLineCommentDelimiterBase = ";"; - config.mBoxLineCommentDelimiter = string.Empty; - config.mAllowHighAsciiCharConst = true; - config.mExpressionMode = Formatter.FormatConfig.ExpressionMode.Merlin; + SetFormatConfigValues(ref config); SourceFormatter = new Formatter(config); string msg = string.Format(Properties.Resources.PROGRESS_GENERATING_FMT, pathName); @@ -353,7 +394,7 @@ namespace SourceGen.AsmGen { public void OutputLine(string label, string opcode, string operand, string comment) { // Split long label, but not on EQU directives (confuses the assembler). if (mLongLabelNewLine && label.Length >= mColumnWidths[0] && - !String.Equals(opcode, sDataOpNames.EquDirective, + !string.Equals(opcode, sDataOpNames.EquDirective, StringComparison.InvariantCultureIgnoreCase)) { mOutStream.WriteLine(label); label = string.Empty; diff --git a/SourceGen/AsmGen/GenCommon.cs b/SourceGen/AsmGen/GenCommon.cs index a8e9369..cc95579 100644 --- a/SourceGen/AsmGen/GenCommon.cs +++ b/SourceGen/AsmGen/GenCommon.cs @@ -292,7 +292,7 @@ namespace SourceGen.AsmGen { /// /// Configures some common format config items from the app settings. Uses a - /// passed-in object, rather than the global settings. + /// passed-in settings object, rather than the global settings. /// /// Application settings. /// Format config struct. diff --git a/SourceGen/AsmGen/IGenerator.cs b/SourceGen/AsmGen/IGenerator.cs index 1449acd..ec4f06c 100644 --- a/SourceGen/AsmGen/IGenerator.cs +++ b/SourceGen/AsmGen/IGenerator.cs @@ -24,9 +24,22 @@ namespace SourceGen.AsmGen { /// Common interface for generating assembler-specific source code. /// public interface IGenerator { + /// + /// Returns some strings and format options for use in for the display list, configurable + /// through the app settings "quick set" feature. These are not used when generating + /// source code. + /// + /// This may be called on an unconfigured IGenerator. + /// + /// Table of pseudo-op names. + /// Format configuration. + void GetDefaultDisplayFormat(out PseudoOp.PseudoOpNames pseudoOps, + out Formatter.FormatConfig formatConfig); + + /// /// Configure generator. Must be called before calling any other method or using - /// properties. + /// properties, unless otherwise noted. /// /// Project to generate source for. /// Directory in which to create output files.