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 8557d6876074af0c43b19637bb36985417505147 Mon Sep 17 00:00:00 2001 From: HeeminTV Date: Sat, 9 May 2026 21:22:52 +0900 Subject: [PATCH 3/3] NINA 01/02 oversized ROM support --- Core/NES/Mappers/Unlicensed/Nina01.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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);