diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper074.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper074.cs index 8d7cbb753e..275b589c2a 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper074.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper074.cs @@ -28,7 +28,15 @@ namespace BizHawk.Emulation.Consoles.Nintendo { if (addr < 0x2000) { - VRAM[addr & 0x7FF] = value; + int bank = Get_CHRBank_1K(addr); + if (bank == 0x08) + { + VRAM[addr & 0x03FF] = value; + } + else if (bank == 0x09) + { + VRAM[(addr & 0x03FF) + 0x400] = value; + } } else { @@ -36,32 +44,24 @@ namespace BizHawk.Emulation.Consoles.Nintendo } } - private int GetBankNum(int addr) - { - int bank_1k = Get_CHRBank_1K(addr); - bank_1k &= chr_mask; - return bank_1k; - } - public override byte ReadPPU(int addr) { if (addr < 0x2000) { - int bank = GetBankNum(addr); - if (bank == 0x08) - { - return VRAM[addr & 0x03FF]; - } - else if (bank == 0x09) - { - return VRAM[(addr & 0x03FF) + 0x400]; - } - else - { - addr = MapCHR(addr); - return VROM[addr + extra_vrom]; - } - + int bank = Get_CHRBank_1K(addr); + if (bank == 0x08) + { + return VRAM[addr & 0x03FF]; + } + else if (bank == 0x09) + { + return VRAM[(addr & 0x03FF) + 0x400]; + } + else + { + addr = MapCHR(addr); + return VROM[addr]; + } } else return base.ReadPPU(addr); } diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper192.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper192.cs index 5a3756e364..a6fb54852c 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper192.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper192.cs @@ -28,7 +28,23 @@ namespace BizHawk.Emulation.Consoles.Nintendo { if (addr < 0x2000) { - VRAM[addr & 0xFFF] = value; + int bank = Get_CHRBank_1K(addr); + if (bank == 0x08) + { + VRAM[addr & 0x03FF] = value; + } + else if (bank == 0x09) + { + VRAM[(addr & 0x03FF) + 0x400] = value; + } + if (bank == 0x0A) + { + VRAM[addr & 0x03FF + 0x800] = value; + } + else if (bank == 0x0B) + { + VRAM[(addr & 0x03FF) + 0xC00] = value; + } } else { @@ -36,18 +52,12 @@ namespace BizHawk.Emulation.Consoles.Nintendo } } - private int GetBankNum(int addr) - { - int bank_1k = Get_CHRBank_1K(addr); - bank_1k &= chr_mask; - return bank_1k; - } public override byte ReadPPU(int addr) { if (addr < 0x2000) { - int bank = GetBankNum(addr); + int bank = Get_CHRBank_1K(addr); if (bank == 0x08) { byte value = VRAM[addr & 0x03FF]; diff --git a/BizHawk.MultiClient/output/gamedb/gamedb.txt b/BizHawk.MultiClient/output/gamedb/gamedb.txt index 3ec4ecf894..0ccb3235f1 100644 --- a/BizHawk.MultiClient/output/gamedb/gamedb.txt +++ b/BizHawk.MultiClient/output/gamedb/gamedb.txt @@ -106,6 +106,7 @@ sha1:F5FA7807F2B70ADFE5707D9BF88F90DAC1436DB0 Di 4 Ci - Ji Qi Ren Dai Zhan (Ch) sha1:A9887C308C5D0659C3AA45D003A603C9DFFB148A B Ji Jia Zhan Shi (Asia) NES board=MAPPER074;VRAM=2 sha1:5084F25F14A61AB2799BD85D363B57B9B494601D Ji Jia Zhan Shi (Asia) NES board=MAPPER074;VRAM=2 sha1:6143D80047FFC17C752078C622A44C3E0CB7466E B Dong Fang de Chuan Shuo - The Hyrule Fantasy (Asia) NES board=MAPPER245 +sha1:CEFEBA536DB507DBDEF8A538F9C332D7A75BF613 You Ling Xing Dong (Ch) NES board=MAPPER192;VRAM=4 ;wrong vram info sha1:32D71DD6C5A8D78A918FE1B9D6D6C4A570D9652D Oeka Kids - Anpanman no Hiragana Daisuki (J) NES board=MAPPER096;VRAM=32