From de7ded31395a49a729030cae65055bdf298edcca Mon Sep 17 00:00:00 2001 From: Sour Date: Wed, 26 Dec 2018 13:28:17 -0500 Subject: [PATCH] NSF: Added support for history viewer --- Core/CPU.cpp | 2 +- Core/Console.cpp | 11 +- Core/Console.h | 1 + Core/NsfMapper.cpp | 15 +-- Core/NsfMapper.h | 4 - GUI.NET/Controls/ctrlNsfPlayer.Designer.cs | 140 ++++++++++----------- GUI.NET/Controls/ctrlNsfPlayer.cs | 13 +- GUI.NET/Forms/frmHistoryViewer.Designer.cs | 76 ++++++----- GUI.NET/Forms/frmHistoryViewer.cs | 7 +- GUI.NET/Forms/frmMain.cs | 2 +- InteropDLL/ConsoleWrapper.cpp | 24 ++-- 11 files changed, 157 insertions(+), 138 deletions(-) diff --git a/Core/CPU.cpp b/Core/CPU.cpp index f1f92981..788b3359 100644 --- a/Core/CPU.cpp +++ b/Core/CPU.cpp @@ -274,7 +274,7 @@ uint16_t CPU::FetchOperand() _console->BreakIfDebugging(); - if(NsfMapper::GetInstance()) { + if(_console->IsNsf()) { //Don't stop emulation on CPU crash when playing NSFs, reset cpu instead _console->Reset(true); return 0; diff --git a/Core/Console.cpp b/Core/Console.cpp index e150c24a..c70d6336 100644 --- a/Core/Console.cpp +++ b/Core/Console.cpp @@ -589,7 +589,7 @@ void Console::ResetComponents(bool softReset) _debugHud->ClearScreen(); _memoryManager->Reset(softReset); - if(!_settings->CheckFlag(EmulationFlags::DisablePpuReset) || !softReset || NsfMapper::GetInstance()) { + if(!_settings->CheckFlag(EmulationFlags::DisablePpuReset) || !softReset || IsNsf()) { _ppu->Reset(); } _apu->Reset(softReset); @@ -674,7 +674,7 @@ void Console::RunSingleFrame() } } - _settings->DisableOverclocking(_disableOcNextFrame || NsfMapper::GetInstance()); + _settings->DisableOverclocking(_disableOcNextFrame || IsNsf()); _disableOcNextFrame = false; _systemActionManager->ProcessSystemActions(); @@ -743,7 +743,7 @@ void Console::Run() _historyViewer->ProcessEndOfFrame(); } _rewindManager->ProcessEndOfFrame(); - _settings->DisableOverclocking(_disableOcNextFrame || NsfMapper::GetInstance()); + _settings->DisableOverclocking(_disableOcNextFrame || IsNsf()); _disableOcNextFrame = false; //Update model (ntsc/pal) and get delay for next frame @@ -1315,6 +1315,11 @@ bool Console::IsRecordingTapeFile() return false; } +bool Console::IsNsf() +{ + return std::dynamic_pointer_cast(_mapper) != nullptr; +} + void Console::CopyRewindData(shared_ptr sourceConsole) { sourceConsole->Pause(); diff --git a/Core/Console.h b/Core/Console.h index eff11892..c103b495 100644 --- a/Core/Console.h +++ b/Core/Console.h @@ -168,6 +168,7 @@ public: void StartRecordingTapeFile(string filepath); void StopRecordingTapeFile(); bool IsRecordingTapeFile(); + bool IsNsf(); std::thread::id GetEmulationThreadId(); diff --git a/Core/NsfMapper.cpp b/Core/NsfMapper.cpp index 7fbd7ba2..c1928bac 100644 --- a/Core/NsfMapper.cpp +++ b/Core/NsfMapper.cpp @@ -5,25 +5,14 @@ #include "Console.h" #include "MemoryManager.h" -NsfMapper* NsfMapper::_instance; - NsfMapper::NsfMapper() { - _instance = this; } NsfMapper::~NsfMapper() { - if(_instance == this) { - _instance = nullptr; - _console->GetSettings()->DisableOverclocking(false); - _console->GetSettings()->ClearFlags(EmulationFlags::NsfPlayerEnabled); - } -} - -NsfMapper * NsfMapper::GetInstance() -{ - return _instance; + _console->GetSettings()->DisableOverclocking(false); + _console->GetSettings()->ClearFlags(EmulationFlags::NsfPlayerEnabled); } void NsfMapper::InitMapper() diff --git a/Core/NsfMapper.h b/Core/NsfMapper.h index f00cc4a8..acd5d3c5 100644 --- a/Core/NsfMapper.h +++ b/Core/NsfMapper.h @@ -18,8 +18,6 @@ enum class NsfIrqType class NsfMapper : public BaseMapper { private: - static NsfMapper *_instance; - enum NsfSoundChips { VRC6 = 0x01, @@ -121,8 +119,6 @@ public: NsfMapper(); ~NsfMapper(); - static NsfMapper* GetInstance(); - void SetNesModel(NesModel model) override; ConsoleFeatures GetAvailableFeatures() override; diff --git a/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs b/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs index f5858311..d2c4108e 100644 --- a/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs +++ b/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs @@ -61,18 +61,18 @@ this.lblFastForward = new System.Windows.Forms.Label(); this.lblFastForwardIcon = new System.Windows.Forms.Label(); this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.panel4 = new System.Windows.Forms.Panel(); + this.lblRewinding = new System.Windows.Forms.Label(); + this.lblRewindIcon = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.panel1 = new System.Windows.Forms.Panel(); this.panel3 = new System.Windows.Forms.Panel(); this.lblSlowMotion = new System.Windows.Forms.Label(); this.lblSlowMotionIcon = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.panel1 = new System.Windows.Forms.Panel(); this.tlpRepeatShuffle = new System.Windows.Forms.TableLayoutPanel(); this.picRepeat = new System.Windows.Forms.PictureBox(); this.picShuffle = new System.Windows.Forms.PictureBox(); this.tmrUpdate = new System.Windows.Forms.Timer(this.components); - this.panel4 = new System.Windows.Forms.Panel(); - this.lblRewinding = new System.Windows.Forms.Label(); - this.lblRewindIcon = new System.Windows.Forms.Label(); this.tlpMain.SuspendLayout(); this.tlpNsfInfo.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout(); @@ -81,13 +81,13 @@ this.pnlBackground.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.picBackground)).BeginInit(); this.tableLayoutPanel4.SuspendLayout(); - this.panel3.SuspendLayout(); + this.panel4.SuspendLayout(); this.panel2.SuspendLayout(); this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); this.tlpRepeatShuffle.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.picRepeat)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.picShuffle)).BeginInit(); - this.panel4.SuspendLayout(); this.SuspendLayout(); // // tlpMain @@ -535,6 +535,65 @@ this.tableLayoutPanel4.Size = new System.Drawing.Size(121, 85); this.tableLayoutPanel4.TabIndex = 13; // + // panel4 + // + this.panel4.AutoSize = true; + this.panel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panel4.Controls.Add(this.lblRewinding); + this.panel4.Controls.Add(this.lblRewindIcon); + this.panel4.Location = new System.Drawing.Point(0, 36); + this.panel4.Margin = new System.Windows.Forms.Padding(0); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(71, 18); + this.panel4.TabIndex = 3; + // + // lblRewinding + // + this.lblRewinding.AutoSize = true; + this.lblRewinding.ForeColor = System.Drawing.Color.DarkOrange; + this.lblRewinding.Location = new System.Drawing.Point(14, 4); + this.lblRewinding.Margin = new System.Windows.Forms.Padding(0); + this.lblRewinding.Name = "lblRewinding"; + this.lblRewinding.Size = new System.Drawing.Size(57, 13); + this.lblRewinding.TabIndex = 11; + this.lblRewinding.Text = "Rewinding"; + // + // lblRewindIcon + // + this.lblRewindIcon.AutoSize = true; + this.lblRewindIcon.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblRewindIcon.ForeColor = System.Drawing.Color.DarkOrange; + this.lblRewindIcon.Location = new System.Drawing.Point(0, 0); + this.lblRewindIcon.Margin = new System.Windows.Forms.Padding(0); + this.lblRewindIcon.Name = "lblRewindIcon"; + this.lblRewindIcon.Size = new System.Drawing.Size(17, 18); + this.lblRewindIcon.TabIndex = 12; + this.lblRewindIcon.Text = "«"; + // + // panel2 + // + this.panel2.AutoSize = true; + this.panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panel2.Controls.Add(this.lblRecordingDot); + this.panel2.Controls.Add(this.lblRecording); + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Margin = new System.Windows.Forms.Padding(0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(44, 18); + this.panel2.TabIndex = 1; + // + // panel1 + // + this.panel1.AutoSize = true; + this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panel1.Controls.Add(this.lblFastForward); + this.panel1.Controls.Add(this.lblFastForwardIcon); + this.panel1.Location = new System.Drawing.Point(0, 18); + this.panel1.Margin = new System.Windows.Forms.Padding(0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(82, 18); + this.panel1.TabIndex = 0; + // // panel3 // this.panel3.AutoSize = true; @@ -570,30 +629,6 @@ this.lblSlowMotionIcon.TabIndex = 12; this.lblSlowMotionIcon.Text = "«"; // - // panel2 - // - this.panel2.AutoSize = true; - this.panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel2.Controls.Add(this.lblRecordingDot); - this.panel2.Controls.Add(this.lblRecording); - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Margin = new System.Windows.Forms.Padding(0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(44, 18); - this.panel2.TabIndex = 1; - // - // panel1 - // - this.panel1.AutoSize = true; - this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel1.Controls.Add(this.lblFastForward); - this.panel1.Controls.Add(this.lblFastForwardIcon); - this.panel1.Location = new System.Drawing.Point(0, 18); - this.panel1.Margin = new System.Windows.Forms.Padding(0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(82, 18); - this.panel1.TabIndex = 0; - // // tlpRepeatShuffle // this.tlpRepeatShuffle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); @@ -642,41 +677,6 @@ this.tmrUpdate.Interval = 250; this.tmrUpdate.Tick += new System.EventHandler(this.tmrUpdate_Tick); // - // panel4 - // - this.panel4.AutoSize = true; - this.panel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel4.Controls.Add(this.lblRewinding); - this.panel4.Controls.Add(this.lblRewindIcon); - this.panel4.Location = new System.Drawing.Point(0, 36); - this.panel4.Margin = new System.Windows.Forms.Padding(0); - this.panel4.Name = "panel4"; - this.panel4.Size = new System.Drawing.Size(71, 18); - this.panel4.TabIndex = 3; - // - // lblRewinding - // - this.lblRewinding.AutoSize = true; - this.lblRewinding.ForeColor = System.Drawing.Color.DarkOrange; - this.lblRewinding.Location = new System.Drawing.Point(14, 4); - this.lblRewinding.Margin = new System.Windows.Forms.Padding(0); - this.lblRewinding.Name = "lblRewinding"; - this.lblRewinding.Size = new System.Drawing.Size(57, 13); - this.lblRewinding.TabIndex = 11; - this.lblRewinding.Text = "Rewinding"; - // - // lblRewindIcon - // - this.lblRewindIcon.AutoSize = true; - this.lblRewindIcon.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblRewindIcon.ForeColor = System.Drawing.Color.DarkOrange; - this.lblRewindIcon.Location = new System.Drawing.Point(0, 0); - this.lblRewindIcon.Margin = new System.Windows.Forms.Padding(0); - this.lblRewindIcon.Name = "lblRewindIcon"; - this.lblRewindIcon.Size = new System.Drawing.Size(17, 18); - this.lblRewindIcon.TabIndex = 12; - this.lblRewindIcon.Text = "«"; - // // ctrlNsfPlayer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -701,17 +701,17 @@ ((System.ComponentModel.ISupportInitialize)(this.picBackground)).EndInit(); this.tableLayoutPanel4.ResumeLayout(false); this.tableLayoutPanel4.PerformLayout(); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); this.panel2.ResumeLayout(false); this.panel2.PerformLayout(); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); this.tlpRepeatShuffle.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.picRepeat)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.picShuffle)).EndInit(); - this.panel4.ResumeLayout(false); - this.panel4.PerformLayout(); this.ResumeLayout(false); } diff --git a/GUI.NET/Controls/ctrlNsfPlayer.cs b/GUI.NET/Controls/ctrlNsfPlayer.cs index cbb20881..cbeb0840 100644 --- a/GUI.NET/Controls/ctrlNsfPlayer.cs +++ b/GUI.NET/Controls/ctrlNsfPlayer.cs @@ -122,6 +122,12 @@ namespace Mesen.GUI.Controls NsfHeader header = InteropEmu.NsfGetHeader(); int currentTrack = InteropEmu.NsfGetCurrentTrack(); + if(currentTrack != cboTrack.SelectedIndex) { + cboTrack.SelectedIndexChanged -= cboTrack_SelectedIndexChanged; + cboTrack.SelectedIndex = currentTrack; + cboTrack.SelectedIndexChanged += cboTrack_SelectedIndexChanged; + } + TimeSpan time = TimeSpan.FromSeconds((double)elapsedFrames / ((header.Flags & 0x01) == 0x01 ? 50.006978 : 60.098812)); string label = time.ToString(time.TotalHours < 1 ? @"mm\:ss" : @"hh\:mm\:ss"); @@ -135,10 +141,11 @@ namespace Mesen.GUI.Controls label += Environment.NewLine + (string.IsNullOrWhiteSpace(trackNames[currentTrack]) ? ResourceHelper.GetMessage("NsfUnnamedTrack") : trackNames[currentTrack]); } + bool rewinding = InteropEmu.IsRewinding(); lblRecording.Visible = lblRecordingDot.Visible = InteropEmu.WaveIsRecording(); - lblRewinding.Visible = lblRewindIcon.Visible = InteropEmu.IsRewinding(); - lblFastForward.Visible = lblFastForwardIcon.Visible = InteropEmu.GetEmulationSpeed() > 100 || InteropEmu.GetEmulationSpeed() == 0 || InteropEmu.CheckFlag(EmulationFlags.Turbo); - lblSlowMotion.Visible = lblSlowMotionIcon.Visible = InteropEmu.GetEmulationSpeed() < 100 && InteropEmu.GetEmulationSpeed() > 0 && !InteropEmu.CheckFlag(EmulationFlags.Turbo); + lblRewinding.Visible = lblRewindIcon.Visible = rewinding; + lblFastForward.Visible = lblFastForwardIcon.Visible = (InteropEmu.GetEmulationSpeed() > 100 || InteropEmu.GetEmulationSpeed() == 0 || InteropEmu.CheckFlag(EmulationFlags.Turbo)) && !rewinding; + lblSlowMotion.Visible = lblSlowMotionIcon.Visible = InteropEmu.GetEmulationSpeed() < 100 && InteropEmu.GetEmulationSpeed() > 0 && !InteropEmu.CheckFlag(EmulationFlags.Turbo) && !rewinding; lblTime.Text = label; } diff --git a/GUI.NET/Forms/frmHistoryViewer.Designer.cs b/GUI.NET/Forms/frmHistoryViewer.Designer.cs index 0f32d792..5897b4bb 100644 --- a/GUI.NET/Forms/frmHistoryViewer.Designer.cs +++ b/GUI.NET/Forms/frmHistoryViewer.Designer.cs @@ -33,7 +33,7 @@ this.btnPausePlay = new System.Windows.Forms.Button(); this.lblPosition = new System.Windows.Forms.Label(); this.pnlRenderer = new System.Windows.Forms.Panel(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.tlpRenderer = new System.Windows.Forms.TableLayoutPanel(); this.ctrlRenderer = new System.Windows.Forms.Panel(); this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); this.lblVolume = new System.Windows.Forms.Label(); @@ -47,13 +47,15 @@ this.mnuResumeGameplay = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.mnuClose = new System.Windows.Forms.ToolStripMenuItem(); + this.picNsfIcon = new System.Windows.Forms.PictureBox(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.trkPosition)).BeginInit(); this.pnlRenderer.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); + this.tlpRenderer.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.trkVolume)).BeginInit(); this.menuStrip2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picNsfIcon)).BeginInit(); this.SuspendLayout(); // // tableLayoutPanel1 @@ -74,16 +76,16 @@ this.tableLayoutPanel1.RowCount = 2; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(532, 477); + this.tableLayoutPanel1.Size = new System.Drawing.Size(557, 454); this.tableLayoutPanel1.TabIndex = 0; // // trkPosition // this.trkPosition.Dock = System.Windows.Forms.DockStyle.Top; this.trkPosition.LargeChange = 10; - this.trkPosition.Location = new System.Drawing.Point(56, 429); + this.trkPosition.Location = new System.Drawing.Point(56, 406); this.trkPosition.Name = "trkPosition"; - this.trkPosition.Size = new System.Drawing.Size(312, 45); + this.trkPosition.Size = new System.Drawing.Size(337, 45); this.trkPosition.TabIndex = 1; this.trkPosition.TickFrequency = 10; this.trkPosition.TickStyle = System.Windows.Forms.TickStyle.Both; @@ -93,7 +95,7 @@ // this.btnPausePlay.Anchor = System.Windows.Forms.AnchorStyles.Left; this.btnPausePlay.Image = global::Mesen.GUI.Properties.Resources.Play; - this.btnPausePlay.Location = new System.Drawing.Point(3, 433); + this.btnPausePlay.Location = new System.Drawing.Point(3, 410); this.btnPausePlay.Name = "btnPausePlay"; this.btnPausePlay.Size = new System.Drawing.Size(47, 36); this.btnPausePlay.TabIndex = 2; @@ -103,7 +105,7 @@ // this.lblPosition.Anchor = System.Windows.Forms.AnchorStyles.Right; this.lblPosition.AutoSize = true; - this.lblPosition.Location = new System.Drawing.Point(374, 445); + this.lblPosition.Location = new System.Drawing.Point(399, 422); this.lblPosition.MinimumSize = new System.Drawing.Size(49, 13); this.lblPosition.Name = "lblPosition"; this.lblPosition.Size = new System.Drawing.Size(49, 13); @@ -116,33 +118,34 @@ this.pnlRenderer.BackColor = System.Drawing.Color.Black; this.pnlRenderer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.tableLayoutPanel1.SetColumnSpan(this.pnlRenderer, 4); - this.pnlRenderer.Controls.Add(this.tableLayoutPanel2); + this.pnlRenderer.Controls.Add(this.picNsfIcon); + this.pnlRenderer.Controls.Add(this.tlpRenderer); this.pnlRenderer.Dock = System.Windows.Forms.DockStyle.Fill; this.pnlRenderer.Location = new System.Drawing.Point(3, 3); this.pnlRenderer.Name = "pnlRenderer"; - this.pnlRenderer.Size = new System.Drawing.Size(526, 420); + this.pnlRenderer.Size = new System.Drawing.Size(551, 397); this.pnlRenderer.TabIndex = 0; // - // tableLayoutPanel2 + // tlpRenderer // - this.tableLayoutPanel2.ColumnCount = 1; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel2.Controls.Add(this.ctrlRenderer, 0, 0); - this.tableLayoutPanel2.Cursor = System.Windows.Forms.Cursors.Hand; - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(524, 418); - this.tableLayoutPanel2.TabIndex = 0; - this.tableLayoutPanel2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.ctrlRenderer_MouseClick); + this.tlpRenderer.ColumnCount = 1; + this.tlpRenderer.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpRenderer.Controls.Add(this.ctrlRenderer, 0, 0); + this.tlpRenderer.Cursor = System.Windows.Forms.Cursors.Hand; + this.tlpRenderer.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpRenderer.Location = new System.Drawing.Point(0, 0); + this.tlpRenderer.Margin = new System.Windows.Forms.Padding(0); + this.tlpRenderer.Name = "tlpRenderer"; + this.tlpRenderer.RowCount = 1; + this.tlpRenderer.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpRenderer.Size = new System.Drawing.Size(549, 395); + this.tlpRenderer.TabIndex = 0; + this.tlpRenderer.MouseClick += new System.Windows.Forms.MouseEventHandler(this.ctrlRenderer_MouseClick); // // ctrlRenderer // this.ctrlRenderer.Anchor = System.Windows.Forms.AnchorStyles.None; - this.ctrlRenderer.Location = new System.Drawing.Point(134, 89); + this.ctrlRenderer.Location = new System.Drawing.Point(146, 77); this.ctrlRenderer.Margin = new System.Windows.Forms.Padding(0); this.ctrlRenderer.Name = "ctrlRenderer"; this.ctrlRenderer.Size = new System.Drawing.Size(256, 240); @@ -156,7 +159,7 @@ this.tableLayoutPanel3.Controls.Add(this.lblVolume, 0, 1); this.tableLayoutPanel3.Controls.Add(this.trkVolume, 0, 0); this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(429, 429); + this.tableLayoutPanel3.Location = new System.Drawing.Point(454, 406); this.tableLayoutPanel3.Name = "tableLayoutPanel3"; this.tableLayoutPanel3.RowCount = 2; this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 31F)); @@ -199,7 +202,7 @@ this.mnuFile}); this.menuStrip2.Location = new System.Drawing.Point(0, 0); this.menuStrip2.Name = "menuStrip2"; - this.menuStrip2.Size = new System.Drawing.Size(532, 24); + this.menuStrip2.Size = new System.Drawing.Size(557, 24); this.menuStrip2.TabIndex = 1; this.menuStrip2.Text = "menuStrip2"; // @@ -257,11 +260,24 @@ this.mnuClose.Text = "Close"; this.mnuClose.Click += new System.EventHandler(this.mnuClose_Click); // + // picNsfIcon + // + this.picNsfIcon.Anchor = System.Windows.Forms.AnchorStyles.None; + this.picNsfIcon.BackgroundImage = global::Mesen.GUI.Properties.Resources.NsfBackground; + this.picNsfIcon.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.picNsfIcon.Location = new System.Drawing.Point(199, 152); + this.picNsfIcon.Margin = new System.Windows.Forms.Padding(0); + this.picNsfIcon.MaximumSize = new System.Drawing.Size(500, 90); + this.picNsfIcon.Name = "picNsfIcon"; + this.picNsfIcon.Size = new System.Drawing.Size(150, 90); + this.picNsfIcon.TabIndex = 6; + this.picNsfIcon.TabStop = false; + // // frmHistoryViewer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(532, 501); + this.ClientSize = new System.Drawing.Size(557, 478); this.Controls.Add(this.tableLayoutPanel1); this.Controls.Add(this.menuStrip2); this.MinimumSize = new System.Drawing.Size(331, 384); @@ -271,12 +287,13 @@ this.tableLayoutPanel1.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.trkPosition)).EndInit(); this.pnlRenderer.ResumeLayout(false); - this.tableLayoutPanel2.ResumeLayout(false); + this.tlpRenderer.ResumeLayout(false); this.tableLayoutPanel3.ResumeLayout(false); this.tableLayoutPanel3.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.trkVolume)).EndInit(); this.menuStrip2.ResumeLayout(false); this.menuStrip2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picNsfIcon)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -298,10 +315,11 @@ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; private System.Windows.Forms.ToolStripMenuItem mnuClose; private System.Windows.Forms.ToolStripMenuItem mnuResumeGameplay; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.TableLayoutPanel tlpRenderer; private System.Windows.Forms.Panel ctrlRenderer; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; private System.Windows.Forms.Label lblVolume; private System.Windows.Forms.TrackBar trkVolume; + private System.Windows.Forms.PictureBox picNsfIcon; } } \ No newline at end of file diff --git a/GUI.NET/Forms/frmHistoryViewer.cs b/GUI.NET/Forms/frmHistoryViewer.cs index 3d43d81f..c4c7c6e2 100644 --- a/GUI.NET/Forms/frmHistoryViewer.cs +++ b/GUI.NET/Forms/frmHistoryViewer.cs @@ -16,6 +16,7 @@ namespace Mesen.GUI.Forms { private Thread _emuThread; private bool _paused = true; + private bool _isNsf = false; public frmHistoryViewer() { @@ -34,6 +35,10 @@ namespace Mesen.GUI.Forms this.Location = ConfigManager.Config.HistoryViewerInfo.WindowLocation.Value; } + _isNsf = InteropEmu.IsNsf(); + tlpRenderer.Visible = !_isNsf; + picNsfIcon.Visible = _isNsf; + trkVolume.Value = ConfigManager.Config.HistoryViewerInfo.Volume; } @@ -197,7 +202,7 @@ namespace Mesen.GUI.Forms } mnuImportMovie.Visible = false; - mnuExportMovie.Enabled = mnuExportMovie.HasDropDownItems; + mnuExportMovie.Enabled = mnuExportMovie.HasDropDownItems && !_isNsf; } private void btnPausePlay_Click(object sender, EventArgs e) diff --git a/GUI.NET/Forms/frmMain.cs b/GUI.NET/Forms/frmMain.cs index c5d551c2..c63ad9ff 100644 --- a/GUI.NET/Forms/frmMain.cs +++ b/GUI.NET/Forms/frmMain.cs @@ -1131,7 +1131,7 @@ namespace Mesen.GUI.Forms mnuStopMovie.Enabled = running && !netPlay && (moviePlaying || movieRecording); mnuRecordMovie.Enabled = running && !moviePlaying && !movieRecording && !isNetPlayClient; mnuGameConfig.Enabled = !moviePlaying && !movieRecording; - mnuHistoryViewer.Enabled = running && !InteropEmu.IsNsf() && InteropEmu.HistoryViewerEnabled(); + mnuHistoryViewer.Enabled = running && InteropEmu.HistoryViewerEnabled(); bool waveRecording = InteropEmu.WaveIsRecording(); mnuWaveRecord.Enabled = running && !waveRecording; diff --git a/InteropDLL/ConsoleWrapper.cpp b/InteropDLL/ConsoleWrapper.cpp index 7406d344..0d1565f9 100644 --- a/InteropDLL/ConsoleWrapper.cpp +++ b/InteropDLL/ConsoleWrapper.cpp @@ -670,27 +670,25 @@ namespace InteropEmu { DllExport ConsoleFeatures __stdcall GetAvailableFeatures() { return _console->GetAvailableFeatures(); } //NSF functions - DllExport bool __stdcall IsNsf() { return NsfMapper::GetInstance() != nullptr; } - DllExport uint32_t __stdcall NsfGetFrameCount() { - if(NsfMapper::GetInstance()) { - return _console->GetPpu()->GetFrameCount(); - } - return 0; - } + DllExport bool __stdcall IsNsf() { return _console->IsNsf(); } + DllExport uint32_t __stdcall NsfGetFrameCount() { return _console->GetPpu()->GetFrameCount(); } DllExport void __stdcall NsfSelectTrack(uint8_t trackNumber) { - if(NsfMapper::GetInstance()) { - NsfMapper::GetInstance()->SelectTrack(trackNumber); + NsfMapper* nsfMapper = dynamic_cast(_console->GetMapper()); + if(nsfMapper) { + nsfMapper->SelectTrack(trackNumber); } } DllExport int32_t __stdcall NsfGetCurrentTrack() { - if(NsfMapper::GetInstance()) { - return NsfMapper::GetInstance()->GetCurrentTrack(); + NsfMapper* nsfMapper = dynamic_cast(_console->GetMapper()); + if(nsfMapper) { + return nsfMapper->GetCurrentTrack(); } return -1; } DllExport void __stdcall NsfGetHeader(NsfHeader* header) { - if(NsfMapper::GetInstance()) { - *header = NsfMapper::GetInstance()->GetNsfHeader(); + NsfMapper* nsfMapper = dynamic_cast(_console->GetMapper()); + if(nsfMapper) { + *header = nsfMapper->GetNsfHeader(); } } DllExport void __stdcall NsfSetNsfConfig(int32_t autoDetectSilenceDelay, int32_t moveToNextTrackTime, bool disableApuIrqs) {