diff --git a/Core/Console.cpp b/Core/Console.cpp index ee61be78..fb6a1c4e 100644 --- a/Core/Console.cpp +++ b/Core/Console.cpp @@ -473,10 +473,10 @@ void Console::ProcessCpuClock() void Console::ProcessInterferenceAudio() { - _InvA13 = _ppu->_A13pinLowSum; - _ppu->_A13pinLowSum = 0; + _InvA13 = (_ppu->_A13pinLow == 1) ? 0 : 1; // invert relative to 2A03 - _InvOE1 = !_controlManager->GetInvOE1(_controlManager->_address); // invert relative to 2A03 + _controlManager->GetInvOE1(_controlManager->_address); + _InvOE1 = (_controlManager->_OE1pinLow == 1) ? 0 : 1; // invert relative to 2A03 if (_controlManager->_strobed == true) _controlManager->_strobed = false; diff --git a/Core/ControlManager.cpp b/Core/ControlManager.cpp index bc5045ef..9e80e937 100644 --- a/Core/ControlManager.cpp +++ b/Core/ControlManager.cpp @@ -351,12 +351,11 @@ void ControlManager::WriteRAM(uint16_t addr, uint8_t value) } } -bool ControlManager::GetInvOE1(uint16_t addr) +void ControlManager::GetInvOE1(uint16_t addr) { // pull low for only one clock if (addr == 0x4016) - _OE1pinLow = !_strobed; - return _OE1pinLow; + _OE1pinLow = (_strobed) ? 0 : 1; } void ControlManager::Reset(bool softReset) diff --git a/Core/ControlManager.h b/Core/ControlManager.h index 1b590734..976ecb9e 100644 --- a/Core/ControlManager.h +++ b/Core/ControlManager.h @@ -43,7 +43,7 @@ protected: virtual uint8_t GetOpenBusMask(uint8_t port); public: - bool _OE1pinLow; + uint8_t _OE1pinLow; uint16_t _address; bool _strobed; @@ -85,5 +85,5 @@ public: virtual uint8_t ReadRAM(uint16_t addr) override; virtual void WriteRAM(uint16_t addr, uint8_t value) override; - bool GetInvOE1(uint16_t addr); + void GetInvOE1(uint16_t addr); }; diff --git a/Core/PPU.cpp b/Core/PPU.cpp index 1ee1d1bb..81b6edda 100644 --- a/Core/PPU.cpp +++ b/Core/PPU.cpp @@ -466,7 +466,7 @@ void PPU::WriteRAM(uint16_t addr, uint8_t value) void PPU::GetInvA13() { // pull level high when PPU/VRAM addr bit 13 is low - _A13pinLowSum += (bool)(_ppuBusAddress & 0x2000); // invert relative to 2A03 + _A13pinLow = (_ppuBusAddress & 0x2000) ? 0 : 1; } uint8_t PPU::ReadPaletteRAM(uint16_t addr) diff --git a/Core/PPU.h b/Core/PPU.h index f68f9454..7d097003 100644 --- a/Core/PPU.h +++ b/Core/PPU.h @@ -180,7 +180,7 @@ class PPU : public IMemoryHandler, public Snapshotable static constexpr int32_t OutputBufferSize = 256*240*2; static constexpr int32_t OamDecayCycleCount = 3000; - uint8_t _A13pinLowSum; + uint8_t _A13pinLow; PPU(shared_ptr console); virtual ~PPU(); diff --git a/Core/SoundMixer.cpp b/Core/SoundMixer.cpp index 854e2cda..7446f193 100644 --- a/Core/SoundMixer.cpp +++ b/Core/SoundMixer.cpp @@ -277,8 +277,8 @@ int16_t SoundMixer::GetOutputVolume(bool forRightChannel) #endif GetChannelOutput(AudioChannel::EPSM_L, forRightChannel) * 4 + GetChannelOutput(AudioChannel::EPSM_R, forRightChannel) * 4 + - (GetChannelOutput(AudioChannel::InvA13, forRightChannel) * 20) / 3.0 + // 3 PPU samples per CPU clock - GetChannelOutput(AudioChannel::InvOE1, forRightChannel) * 100 + GetChannelOutput(AudioChannel::InvA13, forRightChannel) * 20 + + GetChannelOutput(AudioChannel::InvOE1, forRightChannel) * 1000 ); }