diff --git a/Core/NES/Mappers/Audio/Mmc5Audio.h b/Core/NES/Mappers/Audio/Mmc5Audio.h index 3b104450c..f3d2b34b9 100644 --- a/Core/NES/Mappers/Audio/Mmc5Audio.h +++ b/Core/NES/Mappers/Audio/Mmc5Audio.h @@ -104,6 +104,11 @@ class Mmc5Audio : public BaseExpansionAudio _pcmOutput = 0; } + void PCMReadModeDataRead(char dacval) { + if(_pcmReadMode && dacval) + _pcmOutput = dacval; // + } + uint8_t ReadRegister(uint16_t addr) { switch(addr) { @@ -139,7 +144,7 @@ class Mmc5Audio : public BaseExpansionAudio break; case 0x5010: - //TODO: Read mode & PCM IRQs are not implemented + //TODO: PCM IRQ _pcmReadMode = (value & 0x01) == 0x01; _pcmIrqEnabled = (value & 0x80) == 0x80; break; diff --git a/Core/NES/Mappers/Nintendo/MMC5.h b/Core/NES/Mappers/Nintendo/MMC5.h index f1cec4906..f13425f25 100644 --- a/Core/NES/Mappers/Nintendo/MMC5.h +++ b/Core/NES/Mappers/Nintendo/MMC5.h @@ -451,6 +451,14 @@ class MMC5 : public BaseMapper, public IExtModeMapperDebug BaseMapper::WriteRam(addr, value); } + uint8_t ReadRam(uint16_t addr) override + { + if((addr & 0xC000) == 0x8000) { + _audio->PCMReadModeDataRead(InternalReadRam(addr)); + } + return BaseMapper::ReadRam(addr); + } + void DetectScanlineStart(uint16_t addr) { if(_ntReadCounter >= 2) { diff --git a/Core/NES/Mappers/Unlicensed/Nina01.h b/Core/NES/Mappers/Unlicensed/Nina01.h index 838f2f239..ef3c28af4 100644 --- a/Core/NES/Mappers/Unlicensed/Nina01.h +++ b/Core/NES/Mappers/Unlicensed/Nina01.h @@ -18,9 +18,9 @@ class Nina01 : public BaseMapper void WriteRegister(uint16_t addr, uint8_t value) override { switch(addr) { - case 0x7FFD: SelectPrgPage(0, value & 0x01); break; - case 0x7FFE: SelectChrPage(0, value & 0x0F); break; - case 0x7FFF: SelectChrPage(1, value & 0x0F); break; + case 0x7FFD: SelectPrgPage(0, value); break; + case 0x7FFE: SelectChrPage(0, value); break; + case 0x7FFF: SelectChrPage(1, value); break; } WritePrgRam(addr, value);