From 08ede098ac2cbff81cc51a1cbfa7210a406bc2db Mon Sep 17 00:00:00 2001 From: HeeminTV Date: Sat, 9 May 2026 21:12:04 +0900 Subject: [PATCH 1/3] MMC5 DAC read mode --- Core/NES/Mappers/Audio/Mmc5Audio.h | 7 ++++++- Core/NES/Mappers/Nintendo/MMC5.h | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Core/NES/Mappers/Audio/Mmc5Audio.h b/Core/NES/Mappers/Audio/Mmc5Audio.h index 3b104450c..962761194 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..4661f922c 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) { From db44a7c0964cff288a242d0acca09c1c6ff899ab Mon Sep 17 00:00:00 2001 From: HeeminTV Date: Sat, 9 May 2026 21:17:43 +0900 Subject: [PATCH 2/3] MMC5 DAC read mode --- Core/NES/Mappers/Audio/Mmc5Audio.h | 2 +- Core/NES/Mappers/Nintendo/MMC5.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/NES/Mappers/Audio/Mmc5Audio.h b/Core/NES/Mappers/Audio/Mmc5Audio.h index 962761194..f3d2b34b9 100644 --- a/Core/NES/Mappers/Audio/Mmc5Audio.h +++ b/Core/NES/Mappers/Audio/Mmc5Audio.h @@ -106,7 +106,7 @@ class Mmc5Audio : public BaseExpansionAudio void PCMReadModeDataRead(char dacval) { if(_pcmReadMode && dacval) - _pcmOutput = dacval; + _pcmOutput = dacval; // } uint8_t ReadRegister(uint16_t addr) diff --git a/Core/NES/Mappers/Nintendo/MMC5.h b/Core/NES/Mappers/Nintendo/MMC5.h index 4661f922c..f13425f25 100644 --- a/Core/NES/Mappers/Nintendo/MMC5.h +++ b/Core/NES/Mappers/Nintendo/MMC5.h @@ -453,7 +453,7 @@ class MMC5 : public BaseMapper, public IExtModeMapperDebug uint8_t ReadRam(uint16_t addr) override { - if((addr & 0xC000) == 0x8000) { + if((addr & 0xC000) == 0x8000) { _audio->PCMReadModeDataRead(InternalReadRam(addr)); } return BaseMapper::ReadRam(addr); From 0b58e4b285a246fbb01c9c7752382087c3b24de2 Mon Sep 17 00:00:00 2001 From: HeeminTV Date: Sun, 10 May 2026 12:36:25 +0900 Subject: [PATCH 3/3] Reformat --- Core/NES/Mappers/Audio/Mmc5Audio.h | 5 +++-- Core/NES/Mappers/Nintendo/MMC5.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Core/NES/Mappers/Audio/Mmc5Audio.h b/Core/NES/Mappers/Audio/Mmc5Audio.h index f3d2b34b9..1dfd101ed 100644 --- a/Core/NES/Mappers/Audio/Mmc5Audio.h +++ b/Core/NES/Mappers/Audio/Mmc5Audio.h @@ -105,8 +105,9 @@ class Mmc5Audio : public BaseExpansionAudio } void PCMReadModeDataRead(char dacval) { - if(_pcmReadMode && dacval) - _pcmOutput = dacval; // + if(_pcmReadMode && dacval) { + _pcmOutput = dacval; + } } uint8_t ReadRegister(uint16_t addr) diff --git a/Core/NES/Mappers/Nintendo/MMC5.h b/Core/NES/Mappers/Nintendo/MMC5.h index f13425f25..4661f922c 100644 --- a/Core/NES/Mappers/Nintendo/MMC5.h +++ b/Core/NES/Mappers/Nintendo/MMC5.h @@ -453,7 +453,7 @@ class MMC5 : public BaseMapper, public IExtModeMapperDebug uint8_t ReadRam(uint16_t addr) override { - if((addr & 0xC000) == 0x8000) { + if((addr & 0xC000) == 0x8000) { _audio->PCMReadModeDataRead(InternalReadRam(addr)); } return BaseMapper::ReadRam(addr);