Skip to content

Commit 9853672

Browse files
authored
Merge pull request #38 from SirRickster/add-flags-dock
Add flags dock
2 parents da7ee2d + d0f5ec9 commit 9853672

5 files changed

Lines changed: 138 additions & 4 deletions

File tree

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<UserControl xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
6+
x:Class="ZXBasicStudio.DebuggingTools.Flags.Controls.ZXFlagsView">
7+
<UserControl.Styles>
8+
</UserControl.Styles>
9+
<Grid Grid.Row="1" RowDefinitions="50" VerticalAlignment="Stretch">
10+
<Panel Background="#FF606060">
11+
<Grid ColumnDefinitions="*,*,*,*,*,*,*,*" RowDefinitions="25,25" Name="gridFlags">
12+
<TextBlock Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="S - Sign flag: Set if the 2-complement value is negative (copy of MSB)">S</TextBlock>
13+
<TextBlock Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="Z - Zero flag: Set if the value is zero">Z</TextBlock>
14+
<TextBlock Grid.Row="0" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="F5 - undocumented: Copy of bit 5">-</TextBlock>
15+
<TextBlock Grid.Row="0" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="H - Half Carry: Carry from bit 3 to bit 4">H</TextBlock>
16+
<TextBlock Grid.Row="0" Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="F3 - undocumented: Copy of bit 3">-</TextBlock>
17+
<TextBlock Grid.Row="0" Grid.Column="5"
18+
HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="P/V - Parity or Overflow: Parity set if even number of bits set. Overflow set if the 2-complement result does not fit in the register">
19+
V
20+
</TextBlock>
21+
<TextBlock Grid.Row="0" Grid.Column="6"
22+
HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="N - Subtract: Set if the last operation was a subtraction">
23+
N
24+
</TextBlock>
25+
<TextBlock Grid.Row="0" Grid.Column="7"
26+
HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip.Tip="C - Carry: Set if the result did not fit in the register">
27+
C
28+
</TextBlock>
29+
<Border Grid.Column="0" Grid.Row="1" BorderBrush="Black" BorderThickness="0,1,0,0">
30+
<TextBlock Name="Bit7" HorizontalAlignment="Center" VerticalAlignment="Center"/>
31+
</Border>
32+
<Border Grid.Column="1" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
33+
<TextBlock Name="Bit6" HorizontalAlignment="Center" VerticalAlignment="Center"/>
34+
</Border>
35+
<Border Grid.Column="2" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
36+
<TextBlock Name="Bit5" HorizontalAlignment="Center" VerticalAlignment="Center"/>
37+
</Border>
38+
<Border Grid.Column="3" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
39+
<TextBlock Name="Bit4" HorizontalAlignment="Center" VerticalAlignment="Center"/>
40+
</Border>
41+
<Border Grid.Column="4" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
42+
<TextBlock Name="Bit3" HorizontalAlignment="Center" VerticalAlignment="Center"/>
43+
</Border>
44+
<Border Grid.Column="5" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
45+
<TextBlock Name="Bit2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
46+
</Border>
47+
<Border Grid.Column="6" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
48+
<TextBlock Name="Bit1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
49+
</Border>
50+
<Border Grid.Column="7" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0">
51+
<TextBlock Name="Bit0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
52+
</Border>
53+
</Grid>
54+
</Panel>
55+
</Grid>
56+
</UserControl>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Linq;
3+
using Avalonia.Controls;
4+
5+
namespace ZXBasicStudio.DebuggingTools.Flags.Controls
6+
{
7+
public partial class ZXFlagsView : UserControl
8+
{
9+
10+
public ZXFlagsView()
11+
{
12+
InitializeComponent();
13+
}
14+
15+
public void Update(byte value)
16+
{
17+
var bits = GetBinaryFromByte(value);
18+
Bit7.Text = bits[7].ToString();
19+
Bit6.Text = bits[6].ToString();
20+
Bit5.Text = bits[5].ToString();
21+
Bit4.Text = bits[4].ToString();
22+
Bit3.Text = bits[3].ToString();
23+
Bit2.Text = bits[2].ToString();
24+
Bit1.Text = bits[1].ToString();
25+
Bit0.Text = bits[0].ToString();
26+
}
27+
28+
private static int[] GetBinaryFromByte(byte value)
29+
{
30+
string s = Convert.ToString(value, 2);
31+
int[] bits = s.PadLeft(8, '0')
32+
.Select(c => int.Parse(c.ToString()))
33+
.ToArray();
34+
35+
Array.Reverse(bits);
36+
return bits;
37+
}
38+
39+
public void Clear()
40+
{
41+
Bit7.Text = "-";
42+
Bit6.Text = "-";
43+
Bit5.Text = "-";
44+
Bit4.Text = "-";
45+
Bit3.Text = "-";
46+
Bit2.Text = "-";
47+
Bit1.Text = "-";
48+
Bit0.Text = "-";
49+
50+
}
51+
}
52+
}

ZXBStudio/MainWindow.axaml

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
xmlns:zxdtr="using:ZXBasicStudio.DebuggingTools.Registers.Controls"
1010
xmlns:zxdtm="using:ZXBasicStudio.DebuggingTools.Memory.Controls"
1111
xmlns:zxdtt="using:ZXBasicStudio.DebuggingTools.TStates.Controls"
12+
xmlns:zxdfl="using:ZXBasicStudio.DebuggingTools.Flags.Controls"
1213
xmlns:wnd="using:ZXBasicStudio.Classes"
1314
xmlns:svg="using:Avalonia.Svg.Skia"
1415
mc:Ignorable="d" d:DesignWidth="1024" d:DesignHeight="600"
@@ -189,25 +190,37 @@
189190
<TabControl Grid.Column="2" Grid.Row="2" Name="tcEditors" ItemsSource="{Binding EditItems}" />
190191
<zxd:ZXCollapseButton CollapseDirection="Right" GridColumn="4" Grid.Column="3" Grid.Row="2"></zxd:ZXCollapseButton>
191192
<GridSplitter Classes="vertical" Grid.Column="3" Grid.Row="2" Grid.RowSpan="3" ResizeDirection="Columns"></GridSplitter>
192-
<zxd:ZXDockingContainer Grid.Column="4" Grid.Row="2" RowDefinitions="*,4,0.3*,4,*" Grid.RowSpan="3" Name="dockRight">
193-
<zxd:ZXDockingControl Title="Variables" Name="varsDock">
193+
194+
<zxd:ZXDockingContainer Grid.Column="4" Grid.Row="2" RowDefinitions="*,4,0.3*,4,0.3*,4,*" Grid.RowSpan="4" Name="dockRight">
195+
196+
<zxd:ZXDockingControl Grid.Row="0" Title="Variables" Name="varsDock">
194197
<zxd:ZXDockingControl.DockedControl>
195198
<zxdtv:ZXVariablesView Name="varsView"></zxdtv:ZXVariablesView>
196199
</zxd:ZXDockingControl.DockedControl>
197200
</zxd:ZXDockingControl>
201+
198202
<GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></GridSplitter>
199-
<zxd:ZXDockingControl Title="T-States" Grid.Row="2" Name="tstatesDock">
203+
<zxd:ZXDockingControl Grid.Row="2" Title="T-States" Name="tstatesDock">
200204
<zxd:ZXDockingControl.DockedControl>
201205
<zxdtt:ZXTStatesView Name="statesView"></zxdtt:ZXTStatesView>
202206
</zxd:ZXDockingControl.DockedControl>
203207
</zxd:ZXDockingControl>
208+
204209
<GridSplitter Grid.Row="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></GridSplitter>
205-
<zxd:ZXDockingControl Title="Registers" Grid.Row="4" Name="regsDock">
210+
<zxd:ZXDockingControl Grid.Row="4" Title="Z80 Flags" Name="flagsDock">
211+
<zxd:ZXDockingControl.DockedControl>
212+
<zxdfl:ZXFlagsView Name="flagsView"></zxdfl:ZXFlagsView>
213+
</zxd:ZXDockingControl.DockedControl>
214+
</zxd:ZXDockingControl>
215+
216+
<GridSplitter Grid.Row="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></GridSplitter>
217+
<zxd:ZXDockingControl Grid.Row="6" Title="Registers" Name="regsDock">
206218
<zxd:ZXDockingControl.DockedControl>
207219
<zxdtr:ZXRegistersView Name="regView" AllowEdit="{Binding EmulatorInfo.CanStep}"></zxdtr:ZXRegistersView>
208220
</zxd:ZXDockingControl.DockedControl>
209221
</zxd:ZXDockingControl>
210222
</zxd:ZXDockingContainer>
223+
211224
<GridSplitter Classes="horizontal" Grid.Column="2" Grid.ColumnSpan="1" Grid.Row="3" ResizeDirection="Rows"></GridSplitter>
212225
<zxd:ZXTabDockingContainer Name="dockBottom" Grid.Column="2" Grid.ColumnSpan="1" Grid.Row="4" TabsPosition="Bottom">
213226
<zxd:ZXTabDockingContainer.DockedControls>

ZXBStudio/MainWindow.axaml.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
using System.Threading.Tasks;
4040
using ZXBasicStudio.BuildSystem;
4141
using ZXBasicStudio.Classes;
42+
using ZXBasicStudio.Common;
4243
using ZXBasicStudio.Common.ZXSinclairBasic;
4344
using ZXBasicStudio.Controls;
4445
using ZXBasicStudio.Controls.DockSystem;
@@ -1050,6 +1051,7 @@ private void StopEmulator(object? sender, Avalonia.Interactivity.RoutedEventArgs
10501051
UnblockEditors();
10511052
varsView.EndEdit();
10521053
statesView.Clear();
1054+
flagsView.Clear();
10531055
}
10541056
private async void PauseEmulator(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
10551057
{
@@ -1065,6 +1067,7 @@ private async void PauseEmulator(object? sender, Avalonia.Interactivity.RoutedEv
10651067
ClearBreakLines();
10661068
currentBp = await ShowBreakLines(emu.Registers.PC, true);
10671069
regView.Update();
1070+
flagsView.Update(emu.Registers.F);
10681071
varsView.BeginEdit();
10691072
statesView.Update(emu.TStates);
10701073
}
@@ -1177,6 +1180,7 @@ private async void AssemblerStepEmulator(object? sender, Avalonia.Interactivity.
11771180
}
11781181

11791182
regView.Update();
1183+
flagsView.Update(emu.Registers.F);
11801184
varsView.BeginEdit();
11811185
statesView.Update(emu.TStates);
11821186
}
@@ -1234,6 +1238,7 @@ private void Emu_Breakpoint(object? sender, BreakpointEventArgs e)
12341238
currentBp = e.Breakpoint;
12351239
varsView.BeginEdit();
12361240
regView.Update();
1241+
flagsView.Update(emu.Registers.F);
12371242
statesView.Update(emu.TStates);
12381243
outLog.Writer.WriteLine($"Breakpoint: file {Path.GetFileName(line.File)}, line {line.LineNumber + 1}, address {line.Address}");
12391244

@@ -2170,6 +2175,7 @@ void Cleanup()
21702175

21712176
varsView.EndEdit();
21722177
statesView.Clear();
2178+
flagsView.Clear();
21732179
currentBp = null;
21742180
emu.UpdateBreakpoints(null);
21752181
EmulatorInfo.IsRunning = false;

ZXBStudio/ZXBasicStudio.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
<Compile Remove="LanguageDefinitions\**" />
2222
<EmbeddedResource Remove="LanguageDefinitions\**" />
2323
<None Remove="LanguageDefinitions\**" />
24+
<Compile Update="DebuggingTools\Flags\Controls\ZXFlagsView.axaml.cs">
25+
<DependentUpon>ZXFlagsView.axaml</DependentUpon>
26+
<SubType>Code</SubType>
27+
</Compile>
2428
</ItemGroup>
2529
<ItemGroup>
2630
<AvaloniaXaml Remove="Controls\ZXLocalVariablesView.axaml" />
@@ -577,6 +581,9 @@
577581
<Compile Update="Emulator\Controls\ZXKeyView.axaml.cs">
578582
<DependentUpon>ZXKeyView.axaml</DependentUpon>
579583
</Compile>
584+
<Compile Update="DebuggingTools\Flags\Controls\ZXFlagsView.axaml.cs">
585+
<DependentUpon>ZXFlagsView.axaml</DependentUpon>
586+
</Compile>
580587
<Compile Update="DebuggingTools\Registers\Controls\ZXRegisterView.axaml.cs">
581588
<DependentUpon>ZXRegisterView.axaml</DependentUpon>
582589
</Compile>

0 commit comments

Comments
 (0)