From 903bc80a68613e55c57ca53b589e13674d2d42ec Mon Sep 17 00:00:00 2001 From: Ian C Date: Mon, 9 Apr 2012 23:02:00 +0000 Subject: Updated display and emulation to use the new clock. Added Disassembler page. --- wpspec/wpspec/AboutPage.xaml | 11 +- wpspec/wpspec/Converters/ConvertFlagsToString.cs | 59 +++++ wpspec/wpspec/Converters/ConvertIntToHex2.cs | 42 ++++ wpspec/wpspec/Converters/ConvertIntToHex4.cs | 42 ++++ wpspec/wpspec/DisassemblerPage.xaml | 274 ++++++++++++++++++++++ wpspec/wpspec/DisassemblerPage.xaml.cs | 51 ++++ wpspec/wpspec/GamePage.xaml.cs | 15 +- wpspec/wpspec/MainPage.xaml | 40 ++-- wpspec/wpspec/MainPage.xaml.cs | 5 + wpspec/wpspec/Resources/Strings.Designer.cs | 46 +++- wpspec/wpspec/Resources/Strings.resx | 22 +- wpspec/wpspec/Shared.cs | 25 ++ wpspec/wpspec/Spectrum/Emulation.cs | 212 ++++++++++------- wpspec/wpspec/ViewModels/BaseViewModel.cs | 67 ++++++ wpspec/wpspec/ViewModels/DisassemblerLine.cs | 34 +++ wpspec/wpspec/ViewModels/DisassemblerViewModel.cs | 249 ++++++++++++++++++++ wpspec/wpspec/wpspec.csproj | 17 ++ 17 files changed, 1091 insertions(+), 120 deletions(-) create mode 100644 wpspec/wpspec/Converters/ConvertFlagsToString.cs create mode 100644 wpspec/wpspec/Converters/ConvertIntToHex2.cs create mode 100644 wpspec/wpspec/Converters/ConvertIntToHex4.cs create mode 100644 wpspec/wpspec/DisassemblerPage.xaml create mode 100644 wpspec/wpspec/DisassemblerPage.xaml.cs create mode 100644 wpspec/wpspec/Shared.cs create mode 100644 wpspec/wpspec/ViewModels/BaseViewModel.cs create mode 100644 wpspec/wpspec/ViewModels/DisassemblerLine.cs create mode 100644 wpspec/wpspec/ViewModels/DisassemblerViewModel.cs diff --git a/wpspec/wpspec/AboutPage.xaml b/wpspec/wpspec/AboutPage.xaml index 07a07fa..5fc5ae1 100644 --- a/wpspec/wpspec/AboutPage.xaml +++ b/wpspec/wpspec/AboutPage.xaml @@ -32,9 +32,10 @@ + - + @@ -56,11 +57,15 @@ TargetName="_blank" Grid.Row="2" NavigateUri="{Binding SourceHyperlinkUri, Source={StaticResource Strings}}" /> + diff --git a/wpspec/wpspec/Converters/ConvertFlagsToString.cs b/wpspec/wpspec/Converters/ConvertFlagsToString.cs new file mode 100644 index 0000000..5946cc7 --- /dev/null +++ b/wpspec/wpspec/Converters/ConvertFlagsToString.cs @@ -0,0 +1,59 @@ +using System; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using System.Windows.Data; +using Noddybox.Emulation.EightBit.Z80; + +namespace wpspec.Converters +{ + /// + /// + /// + public class ConvertFlagsToString : IValueConverter + { + #region IValueConverter Members + + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + object ret = null; + + if (value is Z80Flags) + { + int flag = (int)value; + char[] names = new char[8] {'C', 'N', 'P', '3', 'H', '5', 'Z', 'S'}; + char[] flags = new char[8]; + int f; + + for(f = 0; f < 8; f++) + { + if ((flag & (1 << f)) == (1 << f)) + { + flags[7-f] = names[7-f]; + } + else + { + flags[7-f] = '-'; + } + } + + ret = new string(flags); + } + + return ret; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/wpspec/wpspec/Converters/ConvertIntToHex2.cs b/wpspec/wpspec/Converters/ConvertIntToHex2.cs new file mode 100644 index 0000000..e640a00 --- /dev/null +++ b/wpspec/wpspec/Converters/ConvertIntToHex2.cs @@ -0,0 +1,42 @@ +using System; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using System.Windows.Data; + +namespace wpspec.Converters +{ + /// + /// Convert an integer to a 2-digit hex string. + /// + public class ConvertIntToHex2 : IValueConverter + { + #region IValueConverter Members + + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + object ret = null; + + if (value is int) + { + int i = (int)value; + ret = i.ToString("X2"); + } + + return ret; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/wpspec/wpspec/Converters/ConvertIntToHex4.cs b/wpspec/wpspec/Converters/ConvertIntToHex4.cs new file mode 100644 index 0000000..ab2fb86 --- /dev/null +++ b/wpspec/wpspec/Converters/ConvertIntToHex4.cs @@ -0,0 +1,42 @@ +using System; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using System.Windows.Data; + +namespace wpspec.Converters +{ + /// + /// Convert an integer to a 4-digit hex string. + /// + public class ConvertIntToHex4 : IValueConverter + { + #region IValueConverter Members + + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + object ret = null; + + if (value is int) + { + int i = (int)value; + ret = i.ToString("X4"); + } + + return ret; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/wpspec/wpspec/DisassemblerPage.xaml b/wpspec/wpspec/DisassemblerPage.xaml new file mode 100644 index 0000000..95b149c --- /dev/null +++ b/wpspec/wpspec/DisassemblerPage.xaml @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wpspec/wpspec/DisassemblerPage.xaml.cs b/wpspec/wpspec/DisassemblerPage.xaml.cs new file mode 100644 index 0000000..a09bfbd --- /dev/null +++ b/wpspec/wpspec/DisassemblerPage.xaml.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using Microsoft.Phone.Controls; +using System.ComponentModel; +using wpspec.ViewModels; + +namespace wpspec +{ + /// + /// Displays the disassembler page. + /// + public partial class DisassemblerPage : PhoneApplicationPage, INotifyPropertyChanged + { + private DisassemblerViewModel model; + + public DisassemblerPage() + { + model = new DisassemblerViewModel(); + DataContext = model; + InitializeComponent(); + } + + private void StepClick(object sender, RoutedEventArgs e) + { + model.Step(); + } + + private void RunClick(object sender, RoutedEventArgs e) + { + model.Run(); + } + + #region INotifyPropertyChanged Members + + /// + /// Event for property changes. + /// + public event PropertyChangedEventHandler PropertyChanged; + + #endregion + } +} \ No newline at end of file diff --git a/wpspec/wpspec/GamePage.xaml.cs b/wpspec/wpspec/GamePage.xaml.cs index 7645921..079b19f 100644 --- a/wpspec/wpspec/GamePage.xaml.cs +++ b/wpspec/wpspec/GamePage.xaml.cs @@ -25,6 +25,7 @@ namespace wpspec private GameTimer timer; private SpriteBatch spriteBatch; private Texture2D screen; + private Vector2 location; #endregion @@ -44,7 +45,7 @@ namespace wpspec // Create a timer for this page. // timer = new GameTimer(); - timer.UpdateInterval = TimeSpan.FromMilliseconds(20 * Shared.FrameSkip); + timer.UpdateInterval = TimeSpan.FromMilliseconds(20); timer.Update += OnUpdate; timer.Draw += OnDraw; } @@ -75,6 +76,9 @@ namespace wpspec // timer.Start(); + location = new Vector2(SharedGraphicsDeviceManager.Current.GraphicsDevice.DisplayMode.Width / 2 - Shared.Spectrum.Width / 2, + 10); + base.OnNavigatedTo(e); } @@ -104,7 +108,6 @@ namespace wpspec private void OnUpdate(object sender, GameTimerEventArgs e) { // TODO: Softkeyboard - Shared.Spectrum.Run(); } @@ -113,20 +116,14 @@ namespace wpspec /// private void OnDraw(object sender, GameTimerEventArgs e) { - Stopwatch s = Stopwatch.StartNew(); - SharedGraphicsDeviceManager.Current.GraphicsDevice.Clear(Color.Black); - Shared.Spectrum.Update(); screen.SetData(Shared.Spectrum.Screen); spriteBatch.Begin(); - spriteBatch.Draw(screen, Vector2.Zero, Color.White); + spriteBatch.Draw(screen, location, Color.White); spriteBatch.End(); SharedGraphicsDeviceManager.Current.GraphicsDevice.Textures[0] = null; - - s.Stop(); - Debug.WriteLine("RENDER: {0} ms {1} ticks", s.ElapsedMilliseconds, s.ElapsedTicks); } #endregion diff --git a/wpspec/wpspec/MainPage.xaml b/wpspec/wpspec/MainPage.xaml index 87073a3..655a1d8 100644 --- a/wpspec/wpspec/MainPage.xaml +++ b/wpspec/wpspec/MainPage.xaml @@ -25,7 +25,6 @@ - - + - + + + + + + - -