Skip to content

Commit c898865

Browse files
committed
Add Flags Dock
1 parent 938012a commit c898865

4 files changed

Lines changed: 87 additions & 53 deletions

File tree

ZXBStudio/DebuggingTools/Flags/Controls/ZXFlagsView.axaml

Lines changed: 49 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,53 @@
44
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
55
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
66
x:Class="ZXBasicStudio.DebuggingTools.Flags.Controls.ZXFlagsView">
7-
<Panel Background="#FF606060">
8-
<Grid ColumnDefinitions="*,*,*,*,*,*,*,*" RowDefinitions="*,*" DataContext="{Binding ZXFlagsView, Mode=TwoWay}">
9-
<TextBlock Grid.Row="0" Grid.Column="0" ToolTip.Tip="S - Sign flag: Set if the 2-complement value is negative (copy of MSB)">S</TextBlock>
10-
<TextBlock Grid.Row="0" Grid.Column="1" ToolTip.Tip="Z - Zero flag: Set if the value is zero">Z</TextBlock>
11-
<TextBlock Grid.Row="0" Grid.Column="2" ToolTip.Tip="F5 - undocumented: Copy of bit 5">-</TextBlock>
12-
<TextBlock Grid.Row="0" Grid.Column="3" ToolTip.Tip="H - Half Carry: Carry from bit 3 to bit 4">H</TextBlock>
13-
<TextBlock Grid.Row="0" Grid.Column="4" ToolTip.Tip="F3 - undocumented: Copy of bit 3">-</TextBlock>
14-
<TextBlock Grid.Row="0" Grid.Column="5" 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">V</TextBlock>
15-
<TextBlock Grid.Row="0" Grid.Column="6" ToolTip.Tip="N - Subtract: Set if the last operation was a subtraction">N</TextBlock>
16-
<TextBlock Grid.Row="0" Grid.Column="7" ToolTip.Tip="C - Carry: Set if the result did not fit in the register">C</TextBlock>
17-
<Border Grid.Column="0" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0"
18-
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
19-
<TextBlock Text="{Binding Bit7Value,Mode=TwoWay}" Name="Bit7"/>
20-
</Border>
21-
<Border Grid.Column="1" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0"
22-
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
23-
<TextBlock Text="{Binding Bit6Value,Mode=TwoWay}" Name="Bit6" />
24-
</Border>
25-
<Border Grid.Column="2" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0"
26-
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
27-
<TextBlock Text="{Binding Bit5Value}" Name="Bit5" />
28-
</Border>
29-
<Border Grid.Column="3" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0"
30-
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
31-
<TextBlock Text="{Binding bit4Value}" Name="Bit4" />
32-
</Border>
33-
<Border Grid.Column="4" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0"
34-
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
35-
<TextBlock Text="{Binding bit3Value}" Name="Bit3" />
36-
</Border>
37-
<Border Grid.Column="5" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0"
38-
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
39-
<TextBlock Text="{Binding bit2Value}" Name="Bit2" />
40-
</Border>
41-
<Border Grid.Column="6" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0"
42-
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
43-
<TextBlock Text="{Binding bit1Value}" Name="Bit1" />
44-
</Border>
45-
<Border Grid.Column="7" Grid.Row="1" BorderBrush="Black" BorderThickness="1,1,0,0"
46-
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
47-
<TextBlock Text="{Binding bit0Value}" Name="Bit0" />
48-
</Border>
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>
4955
</Grid>
50-
</Panel>
51-
</UserControl>
56+
</UserControl>
Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
using System;
2+
using System.Linq;
13
using Avalonia.Controls;
2-
using Avalonia.Markup.Xaml;
34

45
namespace ZXBasicStudio.DebuggingTools.Flags.Controls
56
{
@@ -10,15 +11,42 @@ public ZXFlagsView()
1011
{
1112
InitializeComponent();
1213
}
13-
14-
public void Update()
14+
15+
public void Update(byte value)
1516
{
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();
1726
}
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();
1834

35+
Array.Reverse(bits);
36+
return bits;
37+
}
38+
1939
public void Clear()
2040
{
21-
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+
2250
}
2351
}
2452
}

ZXBStudio/MainWindow.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@
191191
<zxd:ZXCollapseButton CollapseDirection="Right" GridColumn="4" Grid.Column="3" Grid.Row="2"></zxd:ZXCollapseButton>
192192
<GridSplitter Classes="vertical" Grid.Column="3" Grid.Row="2" Grid.RowSpan="3" ResizeDirection="Columns"></GridSplitter>
193193

194-
<zxd:ZXDockingContainer Grid.Column="4" Grid.Row="2" RowDefinitions="*,4,0.3*,4,.3*,4,*" Grid.RowSpan="4" Name="dockRight">
194+
<zxd:ZXDockingContainer Grid.Column="4" Grid.Row="2" RowDefinitions="*,4,0.3*,4,0.3*,4,*" Grid.RowSpan="4" Name="dockRight">
195195

196196
<zxd:ZXDockingControl Grid.Row="0" Title="Variables" Name="varsDock">
197197
<zxd:ZXDockingControl.DockedControl>

ZXBStudio/MainWindow.axaml.cs

Lines changed: 4 additions & 3 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;
@@ -1066,9 +1067,9 @@ private async void PauseEmulator(object? sender, Avalonia.Interactivity.RoutedEv
10661067
ClearBreakLines();
10671068
currentBp = await ShowBreakLines(emu.Registers.PC, true);
10681069
regView.Update();
1070+
flagsView.Update(emu.Registers.F);
10691071
varsView.BeginEdit();
10701072
statesView.Update(emu.TStates);
1071-
flagsView.Update();
10721073
}
10731074
}
10741075
private void ResumeEmulator(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
@@ -1179,9 +1180,9 @@ private async void AssemblerStepEmulator(object? sender, Avalonia.Interactivity.
11791180
}
11801181

11811182
regView.Update();
1183+
flagsView.Update(emu.Registers.F);
11821184
varsView.BeginEdit();
11831185
statesView.Update(emu.TStates);
1184-
flagsView.Update();
11851186
}
11861187
private void Emu_ProgramReady(object? sender, EventArgs e)
11871188
{
@@ -1237,8 +1238,8 @@ private void Emu_Breakpoint(object? sender, BreakpointEventArgs e)
12371238
currentBp = e.Breakpoint;
12381239
varsView.BeginEdit();
12391240
regView.Update();
1241+
flagsView.Update(emu.Registers.F);
12401242
statesView.Update(emu.TStates);
1241-
flagsView.Update();
12421243
outLog.Writer.WriteLine($"Breakpoint: file {Path.GetFileName(line.File)}, line {line.LineNumber + 1}, address {line.Address}");
12431244

12441245
});

0 commit comments

Comments
 (0)