Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion Core/NES/Mappers/Audio/Mmc5Audio.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,14 @@ class Mmc5Audio : public BaseExpansionAudio
_pcmOutput = 0;
}

__forceinline bool GetPcmReadMode() { return _pcmReadMode; }
void HandlePcmRead(uint16_t addr, uint8_t value)
{
if((addr & 0xC000) == 0x8000 && value) {
_pcmOutput = value;
}
}

uint8_t ReadRegister(uint16_t addr)
{
switch(addr) {
Expand Down Expand Up @@ -139,7 +147,7 @@ class Mmc5Audio : public BaseExpansionAudio
break;

case 0x5010:
//TODO: Read mode & PCM IRQs are not implemented
//TODO: PCM IRQs
_pcmReadMode = (value & 0x01) == 0x01;
_pcmIrqEnabled = (value & 0x80) == 0x80;
break;
Expand Down
9 changes: 9 additions & 0 deletions Core/NES/Mappers/Nintendo/MMC5.h
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,15 @@ class MMC5 : public BaseMapper, public IExtModeMapperDebug
}
}

uint8_t ReadRam(uint16_t addr) override
{
uint8_t value = BaseMapper::ReadRam(addr);
if(_audio->GetPcmReadMode()) {
_audio->HandlePcmRead(addr, value);
}
return value;
}

void WriteRam(uint16_t addr, uint8_t value) override
{
if(addr >= 0x5C00 && addr <= 0x5FFF && _extendedRamMode <= 1 && !_ppuInFrame) {
Expand Down
Loading