1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-12-01 22:50:35 +00:00
6502bench/SourceGen/WpfGui/EditDataOperand.xaml
Andy McFadden 4e5c34f457 Binary includes
This adds a new data format option, "binary include", that takes a
filename operand.  When assembly sources are generated, the section
of file is replaced with an appropriate pseudo-op, and binary files
are generated that hold the file contents.  This is a convenient way
to remove large binary blobs, such as music or sound samples, that
aren't useful to have in text form in the sources.

Partial pathnames are allowed, so you can output a sound blob to
"sounds/blather.bin".  For safety reasons, we don't allow the files
to be created above the project directory, and existing files will
only be overwritten if they have a matching length (so you don't
accidentally stomp on your project file).

The files are not currently shown in the GenAsm dialog, which lets
you see a preview of the generated sources.  The hex dump tool
can do this for the (presumably rare) situations where it's useful.

A new regression test, 20300-binary-include, has been added.  The
pseudo-op name can be overridden on-screen in the settings.

We don't currently do anything new for text/HTML exports.  It might
be useful to generate an optional appendix with a hex dump of the
excised sections.

(issue #144)
2024-05-31 14:22:39 -07:00

198 lines
12 KiB
XML

<!--
Copyright 2019 faddenSoft
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<Window x:Class="SourceGen.WpfGui.EditDataOperand"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:SourceGen.WpfGui"
mc:Ignorable="d"
Title="Edit Data Operand"
SizeToContent="WidthAndHeight" ResizeMode="NoResize"
ShowInTaskbar="False" WindowStartupLocation="CenterOwner"
Loaded="Window_Loaded"
ContentRendered="Window_ContentRendered">
<Window.Resources>
<system:String x:Key="str_SingleByte">Select data format (1 byte selected):</system:String>
<system:String x:Key="str_SingleGroup">Select data format ({0} bytes selected):</system:String>
<system:String x:Key="str_MultiGroup">Select data format ({0} bytes selected in {1} groups):</system:String>
<system:String x:Key="str_NotApplicable">--</system:String>
<system:String x:Key="str_StringSingleFmt">{0} string</system:String>
<system:String x:Key="str_StringPluralFmt">{0} strings</system:String>
<system:String x:Key="str_ByteSingleFmt">{0} byte</system:String>
<system:String x:Key="str_BytePluralFmt">{0} bytes</system:String>
<system:String x:Key="str_StringMixed">_Mixed character ({0}) and non-character ({1})</system:String>
<system:String x:Key="str_StringMixedReverse">Reversed character ({0}) and non-character ({1})</system:String>
<system:String x:Key="str_StringNullTerm">_Null-terminated strings ({0})</system:String>
<system:String x:Key="str_StringLen8">Strings prefixed with 8-bit length ({0})</system:String>
<system:String x:Key="str_StringLen16">Strings prefixed with 16-bit length ({0})</system:String>
<system:String x:Key="str_StringDci">Dextral character inverted ({0})</system:String>
<system:String x:Key="str_AlignmentNone">arbitrary boundary</system:String>
<system:String x:Key="str_AlignmentItemFmt">{0}-byte boundary ({1})</system:String>
</Window.Resources>
<StackPanel Margin="8">
<TextBlock Name="selectFormatLabel" Text="{StaticResource str_MultiGroup}"/>
<RadioButton Name="radioDefaultFormat" GroupName="Main" Content="D_efault" Margin="0,8,0,0"
Checked="MainGroup_CheckedChanged"/>
<TextBlock Text="Simple Data" Margin="0,12,0,0"/>
<Rectangle HorizontalAlignment="Stretch" Fill="LightGray" Height="2"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<RadioButton Name="radioSingleBytes" GroupName="Main" Content="Single _bytes" Margin="0,4,0,0"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radio16BitLittle" GroupName="Main" Content="16-bit words, little-endian" Margin="0,4,0,0"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radio16BitBig" GroupName="Main" Content="16-bit words, big-endian" Margin="0,4,0,0"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radio24BitLittle" GroupName="Main" Content="24-bit words, little-endian" Margin="0,4,0,0"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radio32BitLittle" GroupName="Main" Content="32-bit words, little-endian" Margin="0,4,0,0"
Checked="MainGroup_CheckedChanged"/>
</StackPanel>
<GroupBox Name="simpleDisplayAsGroupBox" Grid.Column="1" Header="Display As..." Margin="16,0,0,0"
Padding="2,4">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<RadioButton Name="radioSimpleDataHex" Grid.Column="0" Grid.Row="0"
GroupName="Display" Content="_Hex" Checked="SimpleDisplay_CheckedChanged"/>
<RadioButton Name="radioSimpleDataDecimal" Grid.Column="0" Grid.Row="1"
GroupName="Display" Content="_Decimal" Margin="0,4,18,0"
Checked="SimpleDisplay_CheckedChanged"/>
<RadioButton Name="radioSimpleDataBinary" Grid.Column="0" Grid.Row="2"
GroupName="Display" Content="_Binary" Margin="0,4,0,0"
Checked="SimpleDisplay_CheckedChanged"/>
<RadioButton Name="radioSimpleDataAscii" Grid.Column="1" Grid.Row="0"
GroupName="Display" Content="_ASCII (low or high) character"
Checked="SimpleDisplay_CheckedChanged"/>
<RadioButton Name="radioSimpleDataPetscii" Grid.Column="1" Grid.Row="1"
GroupName="Display" Content="C64 PE_TSCII character" Margin="0,4,0,0"
Checked="SimpleDisplay_CheckedChanged"/>
<RadioButton Name="radioSimpleDataScreenCode" Grid.Column="1" Grid.Row="2"
GroupName="Display" Content="C64 S_creen character" Margin="0,4,0,0"
Checked="SimpleDisplay_CheckedChanged"/>
<RadioButton Name="radioSimpleDataAddress" Grid.Column="0" Grid.Row="3" GroupName="Display"
Content="Add_ress" Margin="0,4,0,0" Checked="SimpleDisplay_CheckedChanged"/>
<!--<TextBox Grid.Column="1" Grid.Row="3" Margin="-8,4,0,0" Width="50" HorizontalAlignment="Left"
FontFamily="{StaticResource GeneralMonoFont}"
Text="{Binding SomethingCool, FallbackValue=+1Add}"/>-->
<StackPanel Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="2">
<RadioButton Name="radioSimpleDataSymbolic" GroupName="Display" Content="_Symbolic reference"
Margin="0,4,0,0" Checked="SimpleDisplay_CheckedChanged"/>
<TextBox Name="symbolEntryTextBox" Margin="20,4,0,0" FontFamily="{StaticResource GeneralMonoFont}"
TextChanged="SymbolEntryTextBox_TextChanged"/>
<StackPanel Orientation="Horizontal" Margin="20,4,0,0"
IsEnabled="{Binding ElementName=radioSimpleDataSymbolic, Path=IsChecked}">
<RadioButton Name="radioSymbolPartLow" GroupName="Part" Content="Low"/>
<RadioButton Name="radioSymbolPartHigh" GroupName="Part" Content="H_igh" Margin="8,0,0,0"/>
<RadioButton Name="radioSymbolPartBank" GroupName="Part" Content="Bank" Margin="8,0,8,0"/>
</StackPanel>
</StackPanel>
</Grid>
</GroupBox>
</Grid>
<TextBlock Text="Bulk Data" Margin="0,12,0,0"/>
<Rectangle HorizontalAlignment="Stretch" Fill="LightGray" Height="2"/>
<RadioButton Name="radioDenseHex" GroupName="Main" Content="Densely-_packed bytes" Margin="0,4,0,0"
Checked="MainGroup_CheckedChanged"/>
<StackPanel Orientation="Horizontal" Margin="20,4,0,0">
<RadioButton Name="radioDenseHexLimited" GroupName="Main" Content="...with a _limit of"
Checked="MainGroup_CheckedChanged"/>
<TextBox Width="40" Margin="7,-3,0,0" MaxLength="2"
Text="{Binding MaxDenseBytesPerLine, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="bytes per line" Margin="7,0,0,0"/>
</StackPanel>
<RadioButton Name="radioFill" GroupName="Main" Content="Area _filled with value" Margin="0,4,0,0"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radioUninit" GroupName="Main" Content="Uninitialized data" Margin="0,4,0,0"
Checked="MainGroup_CheckedChanged"/>
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
<RadioButton Name="radioJunk" GroupName="Main" Content="_Junk bytes, end aligned to"
Checked="MainGroup_CheckedChanged"/>
<ComboBox Name="junkAlignComboBox" Margin="6,-4,0,0" Width="200"
ItemsSource="{Binding JunkAlignmentItems}" DisplayMemberPath="Description"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
<RadioButton Name="radioBinaryInclude" GroupName="Main" Content="Binary include, filename:"
Checked="MainGroup_CheckedChanged"/>
<TextBox Name="binaryIncludeTextBox" Margin="6,-2,0,0" Width="240"
FontFamily="{StaticResource GeneralMonoFont}"
TextChanged="BinaryIncludeTextBox_TextChanged"/>
</StackPanel>
<TextBlock Text="String" Margin="0,12,0,0"/>
<Rectangle HorizontalAlignment="Stretch" Fill="LightGray" Height="2"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Character encoding:" Margin="0,7,0,0"/>
<ComboBox Name="stringEncodingComboBox" Width="150" Margin="8,4,0,4"
ItemsSource="{Binding StringEncodingItems}" DisplayMemberPath="Name"
SelectionChanged="StringEncodingComboBox_SelectionChanged"/>
</StackPanel>
<RadioButton Name="radioStringMixed" GroupName="Main" Margin="0,4,0,0"
Content="{StaticResource str_StringMixed}"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radioStringMixedReverse" GroupName="Main" Margin="0,4,0,0"
Content="{StaticResource str_StringMixedReverse}"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radioStringNullTerm" GroupName="Main" Margin="0,4,0,0"
Content="{StaticResource str_StringNullTerm}"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radioStringLen8" GroupName="Main" Margin="0,4,0,0"
Content="{StaticResource str_StringLen8}"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radioStringLen16" GroupName="Main" Margin="0,4,0,0"
Content="{StaticResource str_StringLen16}"
Checked="MainGroup_CheckedChanged"/>
<RadioButton Name="radioStringDci" GroupName="Main" Margin="0,4,0,0"
Content="{StaticResource str_StringDci}"
Checked="MainGroup_CheckedChanged"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,8,0,0">
<Button Name="okButton" Content="OK" IsDefault="True" Width="70"
IsEnabled="{Binding IsValid}" Click="OkButton_Click"/>
<Button Name="cancelButton" Content="Cancel" IsCancel="True"
Width="70" Margin="4,0,0,0"/>
</StackPanel>
</StackPanel>
</Window>