diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/BANDAI_74_161_02_74.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/BANDAI_74_161_02_74.cs index 4bb024bc51..a058205008 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/BANDAI_74_161_02_74.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/BANDAI_74_161_02_74.cs @@ -107,6 +107,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo desired data. So make sure your emu supports this. */ int chr_block; + int chr_pos = 0; int prg_bank_mask_32k; byte prg_bank_32k; @@ -116,11 +117,11 @@ namespace BizHawk.Emulation.Consoles.Nintendo switch (Cart.board_type) { case "MAPPER096": + case "BANDAI-74*161/02/74": break; default: return false; } - chr_block = 0; prg_bank_mask_32k = Cart.prg_size / 32 - 1; return true; @@ -130,6 +131,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo { base.SyncState(ser); ser.Sync("chr_block", ref chr_block); + ser.Sync("chr_pos", ref chr_pos); ser.Sync("prg_bank_mask_16k", ref prg_bank_mask_32k); ser.Sync("prg_bank_16k", ref prg_bank_32k); } @@ -150,8 +152,79 @@ namespace BizHawk.Emulation.Consoles.Nintendo { if (addr < 0x2000) { + if (addr >= 0x1000) + { + if (chr_block == 1) + { + return VRAM[(0x1000 * 3 * 2) + addr]; + } + else + { + return VRAM[(0x1000 * 3) + addr]; + } + } + else + { + if (chr_block == 1) + { + return VRAM[(0x1000 * chr_pos * 2) + addr]; + } + else + { + return VRAM[(0x1000 * chr_pos * 2) + addr]; + } + } } - return base.ReadPPU(addr); + else + { + return base.ReadPPU(addr); + } + } + + public override void WritePPU(int addr, byte value) + { + if (addr < 0x2000) + { + if (addr >= 0x1000) + { + if (chr_block == 1) + { + VRAM[(0x1000 * 3 * 2) + addr] = value; + } + else + { + VRAM[(0x1000 * 3) + addr] = value; + } + } + { + if (chr_block == 1) + { + VRAM[(0x1000 * chr_pos * 2) + addr] = value; + } + else + { + VRAM[(0x1000 * chr_pos * 2) + addr] = value; + } + } + } + else + { + base.WritePPU(addr, value); + } + } + + public override void AddressPPU(int addr) + { + byte newpos; + if ((addr & 0x3000) != 0x2000) return; + if ((addr & 0x3FF) >= 0x3C0) return; + newpos = (byte)((addr >> 8) & 3); + if (chr_pos != newpos) + { + chr_pos = newpos; + } + + base.AddressPPU(addr); } } } diff --git a/BizHawk.MultiClient/output/gamedb.txt b/BizHawk.MultiClient/output/gamedb.txt index 62764efb76..d4d2260c45 100644 --- a/BizHawk.MultiClient/output/gamedb.txt +++ b/BizHawk.MultiClient/output/gamedb.txt @@ -140,6 +140,9 @@ 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 + +;wrong vram info +sha1:32D71DD6C5A8D78A918FE1B9D6D6C4A570D9652D Oeka Kids - Anpanman no Hiragana Daisuki (J) NES board=MAPPER096;VRAM=32 ;;;;;;;;;;;;;;;;;;;----------------------------------------------------------------------- ;;;;;;;;;;;;;;;;;;;-----------------------------------------------------------------------