From b1ada260cd4f073cacb6e78958dd9b76707c4325 Mon Sep 17 00:00:00 2001 From: Maximilien Noal Date: Sat, 28 Dec 2024 10:05:57 +0100 Subject: [PATCH 01/12] refactor: Remove unused ctor parameter --- src/Spice86/ViewModels/CpuViewModel.cs | 2 +- src/Spice86/ViewModels/DebugWindowViewModel.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Spice86/ViewModels/CpuViewModel.cs b/src/Spice86/ViewModels/CpuViewModel.cs index a50a21648..e94085812 100644 --- a/src/Spice86/ViewModels/CpuViewModel.cs +++ b/src/Spice86/ViewModels/CpuViewModel.cs @@ -24,7 +24,7 @@ public partial class CpuViewModel : ViewModelBase { [ObservableProperty] private CpuFlagsInfo _flags = new(); - public CpuViewModel(State state, Stack stack, IMemory memory, IPauseHandler pauseHandler, IUIDispatcher uiDispatcher) { + public CpuViewModel(State state, IMemory memory, IPauseHandler pauseHandler, IUIDispatcher uiDispatcher) { _cpuState = state; _memory = memory; pauseHandler.Pausing += () => uiDispatcher.Post(() => _isPaused = true); diff --git a/src/Spice86/ViewModels/DebugWindowViewModel.cs b/src/Spice86/ViewModels/DebugWindowViewModel.cs index 613bb8cb5..4f5b717d2 100644 --- a/src/Spice86/ViewModels/DebugWindowViewModel.cs +++ b/src/Spice86/ViewModels/DebugWindowViewModel.cs @@ -90,7 +90,7 @@ public DebugWindowViewModel(State cpuState, Stack stack, IMemory memory, Midi ex PaletteViewModel = new(argbPalette, uiDispatcher); SoftwareMixerViewModel = new(softwareMixer); VideoCardViewModel = new(vgaRenderer, videoState); - CpuViewModel = new(cpuState, stack, memory, pauseHandler, uiDispatcher); + CpuViewModel = new(cpuState, memory, pauseHandler, uiDispatcher); MidiViewModel = new(externalMidiDevice); MemoryViewModels.Add(new(memory, BreakpointsViewModel, pauseHandler, messenger, uiDispatcher, textClipboard, storageProvider, structureViewModelFactory)); CfgCpuViewModel = new(executionContextManager, pauseHandler, new PerformanceMeasurer()); From cc7b0b5b6f266b06f242ef6d7c457a720b68b936 Mon Sep 17 00:00:00 2001 From: Maximilien Noal Date: Sat, 28 Dec 2024 10:42:34 +0100 Subject: [PATCH 02/12] feat: Stack Memory tab --- src/Spice86/ViewModels/DebugWindowViewModel.cs | 18 +++++++++++++++++- src/Spice86/ViewModels/MemoryViewModel.cs | 3 +++ src/Spice86/Views/MemoryView.axaml | 9 ++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/Spice86/ViewModels/DebugWindowViewModel.cs b/src/Spice86/ViewModels/DebugWindowViewModel.cs index 4f5b717d2..44dc0cf85 100644 --- a/src/Spice86/ViewModels/DebugWindowViewModel.cs +++ b/src/Spice86/ViewModels/DebugWindowViewModel.cs @@ -92,10 +92,26 @@ public DebugWindowViewModel(State cpuState, Stack stack, IMemory memory, Midi ex VideoCardViewModel = new(vgaRenderer, videoState); CpuViewModel = new(cpuState, memory, pauseHandler, uiDispatcher); MidiViewModel = new(externalMidiDevice); - MemoryViewModels.Add(new(memory, BreakpointsViewModel, pauseHandler, messenger, uiDispatcher, textClipboard, storageProvider, structureViewModelFactory)); + MemoryViewModel mainMemoryViewModel = new(memory, + BreakpointsViewModel, pauseHandler, messenger, + uiDispatcher, textClipboard, storageProvider, structureViewModelFactory); + MemoryViewModel stackMemoryViewModel = new(memory, + BreakpointsViewModel, pauseHandler, messenger, + uiDispatcher, textClipboard, storageProvider, structureViewModelFactory, + canCloseTab: false, startAddress: stack.PhysicalAddress) { + Title = "CPU Stack Memory" + }; + pauseHandler.Pausing += () => UpdateStackMemoryViewModel(stackMemoryViewModel, stack); + MemoryViewModels.Add(mainMemoryViewModel); + MemoryViewModels.Add(stackMemoryViewModel); CfgCpuViewModel = new(executionContextManager, pauseHandler, new PerformanceMeasurer()); } + private void UpdateStackMemoryViewModel(MemoryViewModel stackMemoryViewModel, Stack stack) { + stackMemoryViewModel.StartAddress = stack.PhysicalAddress; + stackMemoryViewModel.EndAddress = A20Gate.EndOfHighMemoryArea; + } + [RelayCommand] private void Pause() => _pauseHandler.RequestPause("Pause button pressed in debug window"); diff --git a/src/Spice86/ViewModels/MemoryViewModel.cs b/src/Spice86/ViewModels/MemoryViewModel.cs index eb0dbafb7..c371d60e5 100644 --- a/src/Spice86/ViewModels/MemoryViewModel.cs +++ b/src/Spice86/ViewModels/MemoryViewModel.cs @@ -50,6 +50,9 @@ public MemoryViewModel(IMemory memory, BreakpointsViewModel breakpointsViewModel TryUpdateHeaderAndMemoryDocument(); } + [ObservableProperty] + private string? _title; + public enum MemorySearchDataType { Binary, Ascii, diff --git a/src/Spice86/Views/MemoryView.axaml b/src/Spice86/Views/MemoryView.axaml index c788d2748..3f9f8cb79 100644 --- a/src/Spice86/Views/MemoryView.axaml +++ b/src/Spice86/Views/MemoryView.axaml @@ -53,9 +53,12 @@