mirror of
https://github.com/fadden/6502bench.git
synced 2025-02-07 14:31:00 +00:00
Update for cc65 v2.18
WDM <arg> now works. MVN/MVP are still broken. Correct code is generated for whichever version of the assembler is configured. Regression tests updated for new version. Also, fixed a UI bug where manual edits to the assembler path were being ignored.
This commit is contained in:
parent
1ad9caa783
commit
71badf2359
@ -94,8 +94,9 @@ namespace SourceGen.AsmGen {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private CommonUtil.Version mAsmVersion = CommonUtil.Version.NO_VERSION;
|
private CommonUtil.Version mAsmVersion = CommonUtil.Version.NO_VERSION;
|
||||||
|
|
||||||
// We test against this in a few places.
|
// Interesting versions.
|
||||||
private static CommonUtil.Version V2_17 = new CommonUtil.Version(2, 17);
|
private static CommonUtil.Version V2_17 = new CommonUtil.Version(2, 17);
|
||||||
|
private static CommonUtil.Version V2_18 = new CommonUtil.Version(2, 18);
|
||||||
|
|
||||||
|
|
||||||
// Pseudo-op string constants.
|
// Pseudo-op string constants.
|
||||||
@ -145,15 +146,19 @@ namespace SourceGen.AsmGen {
|
|||||||
// bug fixes.
|
// bug fixes.
|
||||||
mAsmVersion = asmVersion.Version;
|
mAsmVersion = asmVersion.Version;
|
||||||
} else {
|
} else {
|
||||||
// No assembler installed. Use 2.17.
|
// No assembler installed. Use 2.18.
|
||||||
mAsmVersion = V2_17;
|
mAsmVersion = V2_18;
|
||||||
}
|
|
||||||
if (mAsmVersion <= V2_17) {
|
|
||||||
// cc65 v2.17: https://github.com/cc65/cc65/issues/717
|
|
||||||
Quirks.BlockMoveArgsReversed = true;
|
|
||||||
// cc65 v2.17: https://github.com/cc65/cc65/issues/754
|
|
||||||
Quirks.NoPcRelBankWrap = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cc65 v2.17: https://github.com/cc65/cc65/issues/717
|
||||||
|
// cc65 v2.18: https://github.com/cc65/cc65/issues/925
|
||||||
|
Quirks.BlockMoveArgsReversed = true;
|
||||||
|
|
||||||
|
// cc65 v2.17: https://github.com/cc65/cc65/issues/754
|
||||||
|
// still broken in v2.18
|
||||||
|
Quirks.NoPcRelBankWrap = true;
|
||||||
|
|
||||||
|
// Special handling for forward references to zero-page labels is required.
|
||||||
Quirks.SinglePassAssembler = true;
|
Quirks.SinglePassAssembler = true;
|
||||||
|
|
||||||
mWorkDirectory = workDirectory;
|
mWorkDirectory = workDirectory;
|
||||||
@ -224,10 +229,9 @@ namespace SourceGen.AsmGen {
|
|||||||
// string.Format(Properties.Resources.GENERATED_FOR_LATEST, "cc65"));
|
// string.Format(Properties.Resources.GENERATED_FOR_LATEST, "cc65"));
|
||||||
//}
|
//}
|
||||||
|
|
||||||
// Currently generating code for v2.17.
|
|
||||||
OutputLine(SourceFormatter.FullLineCommentDelimiter +
|
OutputLine(SourceFormatter.FullLineCommentDelimiter +
|
||||||
string.Format(Res.Strings.GENERATED_FOR_VERSION_FMT,
|
string.Format(Res.Strings.GENERATED_FOR_VERSION_FMT,
|
||||||
"cc65", V2_17,
|
"cc65", V2_18,
|
||||||
AsmCc65.OPTIONS + " -C " + Path.GetFileName(cfgName)));
|
AsmCc65.OPTIONS + " -C " + Path.GetFileName(cfgName)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,7 +315,7 @@ namespace SourceGen.AsmGen {
|
|||||||
|
|
||||||
// IGenerator
|
// IGenerator
|
||||||
public string ModifyOpcode(int offset, OpDef op) {
|
public string ModifyOpcode(int offset, OpDef op) {
|
||||||
if ((op == OpDef.OpWDM_WDM) && mAsmVersion <= V2_17) {
|
if ((op == OpDef.OpWDM_WDM) && mAsmVersion < V2_18) {
|
||||||
// cc65 v2.17 doesn't support WDM, and assembles BRK <arg> to opcode $05.
|
// cc65 v2.17 doesn't support WDM, and assembles BRK <arg> to opcode $05.
|
||||||
// https://github.com/cc65/cc65/issues/715
|
// https://github.com/cc65/cc65/issues/715
|
||||||
// https://github.com/cc65/cc65/issues/716
|
// https://github.com/cc65/cc65/issues/716
|
||||||
|
@ -86,7 +86,7 @@ L1089: and ($ff),y
|
|||||||
rti
|
rti
|
||||||
|
|
||||||
L10AB: eor ($ff,x)
|
L10AB: eor ($ff,x)
|
||||||
.byte $42,$ff
|
wdm $ff
|
||||||
eor $ff,S
|
eor $ff,S
|
||||||
.byte $44,$ff,$fe
|
.byte $44,$ff,$fe
|
||||||
eor $ff
|
eor $ff
|
||||||
|
@ -86,7 +86,7 @@ L1089: and ($00),y
|
|||||||
rti
|
rti
|
||||||
|
|
||||||
L10AB: eor ($00,x)
|
L10AB: eor ($00,x)
|
||||||
.byte $42,$00
|
wdm $00
|
||||||
eor $00,S
|
eor $00,S
|
||||||
.byte $44,$00,$00
|
.byte $44,$00,$00
|
||||||
eor $00
|
eor $00
|
||||||
|
@ -87,7 +87,7 @@ L1089: and (L0080),y
|
|||||||
rti
|
rti
|
||||||
|
|
||||||
L10AB: eor (L0080,x)
|
L10AB: eor (L0080,x)
|
||||||
.byte $42,$80
|
wdm $80
|
||||||
eor $80,S
|
eor $80,S
|
||||||
.byte $44,$83,$84
|
.byte $44,$83,$84
|
||||||
eor z:L0080
|
eor z:L0080
|
||||||
|
@ -156,7 +156,7 @@ limitations under the License.
|
|||||||
<Button DockPanel.Dock="Right" Content="Browse..." Width="75"
|
<Button DockPanel.Dock="Right" Content="Browse..." Width="75"
|
||||||
Margin="8,0,0,8" Click="AsmExeBrowseButton_Click"/>
|
Margin="8,0,0,8" Click="AsmExeBrowseButton_Click"/>
|
||||||
<TextBox Name="asmExePathTextBox" DockPanel.Dock="Left" Margin="0,0,0,8"
|
<TextBox Name="asmExePathTextBox" DockPanel.Dock="Left" Margin="0,0,0,8"
|
||||||
Text="C:\something"/>
|
Text="C:\something" TextChanged="AsmExePathTextBox_TextChanged"/>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|
||||||
<TextBlock Grid.Column="0" Grid.Row="2" Text="Column widths:"
|
<TextBlock Grid.Column="0" Grid.Row="2" Text="Column widths:"
|
||||||
|
@ -631,6 +631,16 @@ namespace SourceGen.WpfGui {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void AsmExePathTextBox_TextChanged(object sender, TextChangedEventArgs e) {
|
||||||
|
if (IsLoaded) {
|
||||||
|
// We don't really need to be updating AssemblerConfig every time they type
|
||||||
|
// a character, but it's fine.
|
||||||
|
AssemblerInfo asmInfo = (AssemblerInfo)asmConfigComboBox.SelectedItem;
|
||||||
|
AssemblerConfig.SetConfig(mSettings, asmInfo.AssemblerId, GetAsmConfigFromUi());
|
||||||
|
IsDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a file dialog to search for a specific executable.
|
/// Creates a file dialog to search for a specific executable.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user