diff --git a/Core/BaseMapper.cpp b/Core/BaseMapper.cpp index ddb94efa..32208c9d 100644 --- a/Core/BaseMapper.cpp +++ b/Core/BaseMapper.cpp @@ -783,6 +783,7 @@ uint8_t BaseMapper::DebugReadRAM(uint16_t addr) void BaseMapper::WriteRAM(uint16_t addr, uint8_t value) { if((addr == 0x4016) & (_console->GetCpu()->GetCycleCount() % 2 == 1)){ WriteEPSM(addr, value); } + if ((addr >= 0x401c && addr <= 0x401f)) { WriteEPSM(addr, value); } if(_isWriteRegisterAddr[addr]) { if(_hasBusConflicts) { uint8_t prgValue = _prgPages[addr >> 8][(uint8_t)addr]; diff --git a/Core/EPSMAudio.h b/Core/EPSMAudio.h index 0d3fdef3..29ec59cc 100644 --- a/Core/EPSMAudio.h +++ b/Core/EPSMAudio.h @@ -177,6 +177,10 @@ public: WriteToChip(a04016 | (a14016 << 1), writeValue); } } + if (addr == 0x401c) { addr = 0xC000; } + if (addr == 0x401d) { addr = 0xE000; } + if (addr == 0x401e) { addr = 0xC002; } + if (addr == 0x401f) { addr = 0xE002; } switch(addr) { case 0xC000: diff --git a/Core/MemoryManager.cpp b/Core/MemoryManager.cpp index c5907390..ce330890 100644 --- a/Core/MemoryManager.cpp +++ b/Core/MemoryManager.cpp @@ -133,7 +133,7 @@ void MemoryManager::Write(uint16_t addr, uint8_t value, MemoryOperationType oper { if(_console->DebugProcessRamOperation(operationType, addr, value)) { _ramWriteHandlers[addr]->WriteRAM(addr, value); - if (addr == 0x4016) { + if ((addr == 0x4016) | (addr >= 0x401c && addr <= 0x401f)) { _ramWriteHandlers[0xE000]->WriteRAM(addr, value); } } diff --git a/Core/NsfLoader.cpp b/Core/NsfLoader.cpp index b0993fd5..4468c3b4 100644 --- a/Core/NsfLoader.cpp +++ b/Core/NsfLoader.cpp @@ -90,6 +90,9 @@ void NsfLoader::InitializeFromHeader(RomData &romData) if (header.SoundChips & 0x20) { chips.push_back("Sunsoft 5B"); } + if (header.SoundChips & 0x40) { + chips.push_back("VT02"); + } if (header.SoundChips & 0x80) { chips.push_back("EPSM"); } diff --git a/Core/NsfMapper.cpp b/Core/NsfMapper.cpp index eb42ac5f..1f9f2b13 100644 --- a/Core/NsfMapper.cpp +++ b/Core/NsfMapper.cpp @@ -111,7 +111,7 @@ void NsfMapper::InitMapper(RomData& romData) if(_nsfHeader.SoundChips & NsfSoundChips::EPSM) { AddRegisterRange(0x4016, 0x4016, MemoryOperation::Write); - AddRegisterRange(0xC000, 0xFFFF, MemoryOperation::Write); + AddRegisterRange(0x401c, 0x401f, MemoryOperation::Write); } } @@ -360,7 +360,7 @@ void NsfMapper::WriteRegister(uint16_t addr, uint8_t value) } else if((_nsfHeader.SoundChips & NsfSoundChips::Sunsoft) && addr >= 0xC000 && addr <= 0xFFFF) { _sunsoftAudio->WriteRegister(addr, value); } - else if ((_nsfHeader.SoundChips & NsfSoundChips::EPSM) && addr >= 0xC000 && addr <= 0xFFFF) { + else if ((_nsfHeader.SoundChips & NsfSoundChips::EPSM) && addr >= 0x401C && addr <= 0x401F) { _epsmAudio->WriteRegister(addr, value); } else { @@ -495,11 +495,11 @@ void NsfMapper::StreamState(bool saving) SnapshotInfo fdsAudio { _fdsAudio.get() }; SnapshotInfo namcoAudio { _namcoAudio.get() }; SnapshotInfo sunsoftAudio { _sunsoftAudio.get() }; - SnapshotInfo epsmAudio{ _epsmAudio.get() }; + SnapshotInfo epsgAudio{ _epsmAudio.get() }; Stream( _model, _needInit, _irqEnabled, _irqReloadValue, _irqCounter, _irqStatus, _debugIrqStatus, _mmc5MultiplierValues[0], _mmc5MultiplierValues[1], _trackEndCounter, _trackFadeCounter, _fadeLength, _silenceDetectDelay, _trackEnded, _allowSilenceDetection, _hasBankSwitching, _ntscSpeed, - _palSpeed, _dendySpeed, _songNumber, mmc5Audio, vrc6Audio, vrc7Audio, fdsAudio, namcoAudio, sunsoftAudio, epsmAudio + _palSpeed, _dendySpeed, _songNumber, mmc5Audio, vrc6Audio, vrc7Audio, fdsAudio, namcoAudio, sunsoftAudio, epsgAudio ); } \ No newline at end of file diff --git a/Core/NsfMapper.h b/Core/NsfMapper.h index 738aeb63..bfb5ea44 100644 --- a/Core/NsfMapper.h +++ b/Core/NsfMapper.h @@ -27,6 +27,7 @@ private: MMC5 = 0x08, Namco = 0x10, Sunsoft = 0x20, + VT02 = 0x40, EPSM = 0x80 }; diff --git a/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs b/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs index adf2222b..6a18d768 100644 --- a/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs +++ b/GUI.NET/Controls/ctrlNsfPlayer.Designer.cs @@ -46,7 +46,7 @@ this.lblSunsoft = new System.Windows.Forms.Label(); this.lblVrc6 = new System.Windows.Forms.Label(); this.lblVrc7 = new System.Windows.Forms.Label(); - this.lblEpsg = new System.Windows.Forms.Label(); + this.lblEpsm = new System.Windows.Forms.Label(); this.lblSoundChips = new System.Windows.Forms.Label(); this.trkVolume = new System.Windows.Forms.TrackBar(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); @@ -268,7 +268,7 @@ this.tableLayoutPanel3.Controls.Add(this.lblSunsoft, 3, 0); this.tableLayoutPanel3.Controls.Add(this.lblVrc6, 4, 0); this.tableLayoutPanel3.Controls.Add(this.lblVrc7, 5, 0); - this.tableLayoutPanel3.Controls.Add(this.lblEpsg, 6, 0); + this.tableLayoutPanel3.Controls.Add(this.lblEpsm, 6, 0); this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel3.Location = new System.Drawing.Point(101, 66); this.tableLayoutPanel3.Name = "tableLayoutPanel3"; @@ -357,18 +357,18 @@ this.lblVrc7.TabIndex = 3; this.lblVrc7.Text = "VRC7"; // - // lblEpsg + // lblEpsm // - this.lblEpsg.AutoSize = true; - this.lblEpsg.BackColor = System.Drawing.Color.Transparent; - this.lblEpsg.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblEpsg.ForeColor = System.Drawing.Color.White; - this.lblEpsg.Location = new System.Drawing.Point(220, 0); - this.lblEpsg.Margin = new System.Windows.Forms.Padding(0); - this.lblEpsg.Name = "lblEpsg"; - this.lblEpsg.Size = new System.Drawing.Size(35, 13); - this.lblEpsg.TabIndex = 3; - this.lblEpsg.Text = "EPSM"; + this.lblEpsm.AutoSize = true; + this.lblEpsm.BackColor = System.Drawing.Color.Transparent; + this.lblEpsm.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblEpsm.ForeColor = System.Drawing.Color.White; + this.lblEpsm.Location = new System.Drawing.Point(220, 0); + this.lblEpsm.Margin = new System.Windows.Forms.Padding(0); + this.lblEpsm.Name = "lblEpsm"; + this.lblEpsm.Size = new System.Drawing.Size(35, 13); + this.lblEpsm.TabIndex = 3; + this.lblEpsm.Text = "EPSM"; // // lblSoundChips // @@ -743,7 +743,7 @@ private System.Windows.Forms.Label lblSunsoft; private System.Windows.Forms.Label lblVrc6; private System.Windows.Forms.Label lblVrc7; - private System.Windows.Forms.Label lblEpsg; + private System.Windows.Forms.Label lblEpsm; private System.Windows.Forms.Label lblMmc5; private System.Windows.Forms.Label lblNamco; private System.Windows.Forms.Label lblFds; diff --git a/GUI.NET/Controls/ctrlNsfPlayer.cs b/GUI.NET/Controls/ctrlNsfPlayer.cs index db288cd8..bdc8f730 100644 --- a/GUI.NET/Controls/ctrlNsfPlayer.cs +++ b/GUI.NET/Controls/ctrlNsfPlayer.cs @@ -274,7 +274,7 @@ namespace Mesen.GUI.Controls lblMmc5.ForeColor = (header.SoundChips & 0x08) == 0x08 ? Color.White : Color.Gray; lblNamco.ForeColor = (header.SoundChips & 0x10) == 0x10 ? Color.White : Color.Gray; lblSunsoft.ForeColor = (header.SoundChips & 0x20) == 0x20 ? Color.White : Color.Gray; - lblEpsg.ForeColor = (header.SoundChips & 0x40) == 0x40 ? Color.White : Color.Gray; + lblEpsm.ForeColor = (header.SoundChips & 0x80) == 0x80 ? Color.White : Color.Gray; if (InteropEmu.IsPaused()) { btnPause.Image = Properties.Resources.Play;