diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs index 84ff0edd29..9bd5a3ff2b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs @@ -20,31 +20,29 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES [NES.INESBoardImplPriorityAttribute] public sealed class ExROM : NesBoardBase { - //configuraton - int prg_bank_mask_8k, chr_bank_mask_1k; //board setup (to be isolated from mmc5 code later, when we need the separate mmc5 class) + private int prg_bank_mask_8k, chr_bank_mask_1k; //board setup (to be isolated from mmc5 code later, when we need the separate mmc5 class) - //state - int irq_target, irq_counter; - bool irq_enabled, irq_pending, in_frame; - int exram_mode, chr_mode, prg_mode; - int chr_reg_high; - int ab_mode; - int[] regs_a = new int[8]; - int[] regs_b = new int[4]; - int[] regs_prg = new int[4]; - int[] nt_modes = new int[4]; - byte nt_fill_tile, nt_fill_attrib; - int wram_bank; - byte[] EXRAM = new byte[1024]; - byte multiplicand, multiplier; - MMC5Audio audio; - //regeneratable state - int[] a_banks_1k = new int[8]; - int[] b_banks_1k = new int[8]; - int[] prg_banks_8k = new int[4]; - byte product_low, product_high; - int last_nt_read; - bool irq_audio; + private int irq_target, irq_counter; + private bool irq_enabled, irq_pending, in_frame; + private int exram_mode, chr_mode, prg_mode; + private int chr_reg_high; + private int ab_mode; + private int[] regs_a = new int[8]; + private int[] regs_b = new int[4]; + private int[] regs_prg = new int[4]; + private int[] nt_modes = new int[4]; + private byte nt_fill_tile, nt_fill_attrib; + private int wram_bank; + private byte[] EXRAM = new byte[1024]; + private byte multiplicand, multiplier; + private MMC5Audio audio; + + private int[] _aBanks1K = new int[8]; + private int[] _bBanks1K = new int[8]; + private int[] _prgBanks8K = new int[4]; + private byte product_low, product_high; + private int last_nt_read; + private bool irq_audio; public MemoryDomain GetExRAM() { @@ -61,6 +59,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public override void SyncState(Serializer ser) { base.SyncState(ser); + ser.Sync(nameof(_aBanks1K), ref _aBanks1K, false); + ser.Sync(nameof(_bBanks1K), ref _bBanks1K, false); + ser.Sync(nameof(_prgBanks8K), ref _prgBanks8K, false); ser.Sync(nameof(irq_target), ref irq_target); ser.Sync(nameof(irq_counter), ref irq_counter); ser.Sync(nameof(irq_enabled), ref irq_enabled); @@ -147,7 +148,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES int PRGGetBank(int addr, out bool ram) { int bank_8k = addr >> 13; - bank_8k = prg_banks_8k[bank_8k]; + bank_8k = _prgBanks8K[bank_8k]; ram = (bank_8k & 0x80) == 0; if (!ram) bank_8k &= prg_bank_mask_8k; @@ -248,19 +249,19 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { bool isPattern = NES.ppu.PPUON; if (NES.ppu.ppuphase == PPU.PPU_PHASE_OBJ && isPattern) - bank_1k = a_banks_1k[bank_1k]; + bank_1k = _aBanks1K[bank_1k]; else if (NES.ppu.ppuphase == PPU.PPU_PHASE_BG && isPattern) - bank_1k = b_banks_1k[bank_1k]; + bank_1k = _bBanks1K[bank_1k]; else { bank_1k = ab_mode == 0 - ? a_banks_1k[bank_1k] - : b_banks_1k[bank_1k]; + ? _aBanks1K[bank_1k] + : _bBanks1K[bank_1k]; } } else { - bank_1k = a_banks_1k[bank_1k]; + bank_1k = _aBanks1K[bank_1k]; } bank_1k &= chr_bank_mask_1k; @@ -724,22 +725,22 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES switch (prg_mode) { case 0: - SetBank(prg_banks_8k, 0, 4, regs_prg[3]&~3); + SetBank(_prgBanks8K, 0, 4, regs_prg[3]&~3); break; case 1: - SetBank(prg_banks_8k, 0, 2, regs_prg[1] & ~1); - SetBank(prg_banks_8k, 2, 2, regs_prg[3] & ~1); + SetBank(_prgBanks8K, 0, 2, regs_prg[1] & ~1); + SetBank(_prgBanks8K, 2, 2, regs_prg[3] & ~1); break; case 2: - SetBank(prg_banks_8k, 0, 2, regs_prg[1] & ~1); - SetBank(prg_banks_8k, 2, 1, regs_prg[2]); - SetBank(prg_banks_8k, 3, 1, regs_prg[3]); + SetBank(_prgBanks8K, 0, 2, regs_prg[1] & ~1); + SetBank(_prgBanks8K, 2, 1, regs_prg[2]); + SetBank(_prgBanks8K, 3, 1, regs_prg[3]); break; case 3: - SetBank(prg_banks_8k, 0, 1, regs_prg[0]); - SetBank(prg_banks_8k, 1, 1, regs_prg[1]); - SetBank(prg_banks_8k, 2, 1, regs_prg[2]); - SetBank(prg_banks_8k, 3, 1, regs_prg[3]); + SetBank(_prgBanks8K, 0, 1, regs_prg[0]); + SetBank(_prgBanks8K, 1, 1, regs_prg[1]); + SetBank(_prgBanks8K, 2, 1, regs_prg[2]); + SetBank(_prgBanks8K, 3, 1, regs_prg[3]); break; } } @@ -753,42 +754,42 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES switch (chr_mode) { case 0: - SetBank(a_banks_1k, 0, 8, regs_a[7] * 8); - SetBank(b_banks_1k, 0, 8, regs_b[3] * 8); + SetBank(_aBanks1K, 0, 8, regs_a[7] * 8); + SetBank(_bBanks1K, 0, 8, regs_b[3] * 8); break; case 1: - SetBank(a_banks_1k, 0, 4, regs_a[3] * 4); - SetBank(a_banks_1k, 4, 4, regs_a[7] * 4); - SetBank(b_banks_1k, 0, 4, regs_b[3] * 4); - SetBank(b_banks_1k, 4, 4, regs_b[3] * 4); + SetBank(_aBanks1K, 0, 4, regs_a[3] * 4); + SetBank(_aBanks1K, 4, 4, regs_a[7] * 4); + SetBank(_bBanks1K, 0, 4, regs_b[3] * 4); + SetBank(_bBanks1K, 4, 4, regs_b[3] * 4); break; case 2: - SetBank(a_banks_1k, 0, 2, regs_a[1] * 2); - SetBank(a_banks_1k, 2, 2, regs_a[3] * 2); - SetBank(a_banks_1k, 4, 2, regs_a[5] * 2); - SetBank(a_banks_1k, 6, 2, regs_a[7] * 2); - SetBank(b_banks_1k, 0, 2, regs_b[1] * 2); - SetBank(b_banks_1k, 2, 2, regs_b[3] * 2); - SetBank(b_banks_1k, 4, 2, regs_b[1] * 2); - SetBank(b_banks_1k, 6, 2, regs_b[3] * 2); + SetBank(_aBanks1K, 0, 2, regs_a[1] * 2); + SetBank(_aBanks1K, 2, 2, regs_a[3] * 2); + SetBank(_aBanks1K, 4, 2, regs_a[5] * 2); + SetBank(_aBanks1K, 6, 2, regs_a[7] * 2); + SetBank(_bBanks1K, 0, 2, regs_b[1] * 2); + SetBank(_bBanks1K, 2, 2, regs_b[3] * 2); + SetBank(_bBanks1K, 4, 2, regs_b[1] * 2); + SetBank(_bBanks1K, 6, 2, regs_b[3] * 2); break; case 3: - SetBank(a_banks_1k, 0, 1, regs_a[0]); - SetBank(a_banks_1k, 1, 1, regs_a[1]); - SetBank(a_banks_1k, 2, 1, regs_a[2]); - SetBank(a_banks_1k, 3, 1, regs_a[3]); - SetBank(a_banks_1k, 4, 1, regs_a[4]); - SetBank(a_banks_1k, 5, 1, regs_a[5]); - SetBank(a_banks_1k, 6, 1, regs_a[6]); - SetBank(a_banks_1k, 7, 1, regs_a[7]); - SetBank(b_banks_1k, 0, 1, regs_b[0]); - SetBank(b_banks_1k, 1, 1, regs_b[1]); - SetBank(b_banks_1k, 2, 1, regs_b[2]); - SetBank(b_banks_1k, 3, 1, regs_b[3]); - SetBank(b_banks_1k, 4, 1, regs_b[0]); - SetBank(b_banks_1k, 5, 1, regs_b[1]); - SetBank(b_banks_1k, 6, 1, regs_b[2]); - SetBank(b_banks_1k, 7, 1, regs_b[3]); + SetBank(_aBanks1K, 0, 1, regs_a[0]); + SetBank(_aBanks1K, 1, 1, regs_a[1]); + SetBank(_aBanks1K, 2, 1, regs_a[2]); + SetBank(_aBanks1K, 3, 1, regs_a[3]); + SetBank(_aBanks1K, 4, 1, regs_a[4]); + SetBank(_aBanks1K, 5, 1, regs_a[5]); + SetBank(_aBanks1K, 6, 1, regs_a[6]); + SetBank(_aBanks1K, 7, 1, regs_a[7]); + SetBank(_bBanks1K, 0, 1, regs_b[0]); + SetBank(_bBanks1K, 1, 1, regs_b[1]); + SetBank(_bBanks1K, 2, 1, regs_b[2]); + SetBank(_bBanks1K, 3, 1, regs_b[3]); + SetBank(_bBanks1K, 4, 1, regs_b[0]); + SetBank(_bBanks1K, 5, 1, regs_b[1]); + SetBank(_bBanks1K, 6, 1, regs_b[2]); + SetBank(_bBanks1K, 7, 1, regs_b[3]); break; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Namcot1xx/Mapper112.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Namcot1xx/Mapper112.cs index 1472654b1d..247980dfa0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Namcot1xx/Mapper112.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Namcot1xx/Mapper112.cs @@ -12,16 +12,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES int reg_addr; byte[] regs = new byte[8]; - //volatile state - int[] chr_regs_1k = new int[8]; - byte[] prg_regs_8k = new byte[4]; + private int[] _chrRegs1K = new int[8]; + private byte[] _prgRegs8K = new byte[4]; public override bool Configure(NES.EDetectionOrigin origin) { //analyze board type switch (Cart.board_type) { - case "MAPPER112": + case "MAPPER112": break; default: return false; @@ -42,6 +41,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ser.Sync(nameof(reg_addr), ref reg_addr); ser.Sync(nameof(regs), ref regs, false); ser.Sync(nameof(chr_outer_reg), ref chr_outer_reg); + ser.Sync(nameof(_chrRegs1K), ref _chrRegs1K, false); + ser.Sync(nameof(_prgRegs8K), ref _prgRegs8K, false); + Sync(); } @@ -77,10 +79,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES void Sync() { - prg_regs_8k[0] = regs[0]; - prg_regs_8k[1] = regs[1]; - prg_regs_8k[2] = 0xFE; - prg_regs_8k[3] = 0xFF; + _prgRegs8K[0] = regs[0]; + _prgRegs8K[1] = regs[1]; + _prgRegs8K[2] = 0xFE; + _prgRegs8K[3] = 0xFF; byte r0_0 = (byte)(regs[2] & ~1); byte r0_1 = (byte)(regs[2] | 1); @@ -92,27 +94,27 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES int temp6 = (chr_outer_reg & 0x40) << 2; int temp7 = (chr_outer_reg & 0x80) << 1; - chr_regs_1k[0] = r0_0; - chr_regs_1k[1] = r0_1; - chr_regs_1k[2] = r1_0; - chr_regs_1k[3] = r1_1; - chr_regs_1k[4] = temp4 | regs[4]; - chr_regs_1k[5] = temp5 | regs[5]; - chr_regs_1k[6] = temp6 | regs[6]; - chr_regs_1k[7] = temp7 | regs[7]; + _chrRegs1K[0] = r0_0; + _chrRegs1K[1] = r0_1; + _chrRegs1K[2] = r1_0; + _chrRegs1K[3] = r1_1; + _chrRegs1K[4] = temp4 | regs[4]; + _chrRegs1K[5] = temp5 | regs[5]; + _chrRegs1K[6] = temp6 | regs[6]; + _chrRegs1K[7] = temp7 | regs[7]; } public int Get_PRGBank_8K(int addr) { int bank_8k = addr >> 13; - bank_8k = prg_regs_8k[bank_8k]; + bank_8k = _prgRegs8K[bank_8k]; return bank_8k; } public int Get_CHRBank_1K(int addr) { int bank_1k = addr >> 10; - bank_1k = chr_regs_1k[bank_1k]; + bank_1k = _chrRegs1K[bank_1k]; return bank_1k; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/VRC2_4.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/VRC2_4.cs index e3cdec3754..31162a326f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/VRC2_4.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/VRC2_4.cs @@ -11,6 +11,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public sealed class VRC2_4 : NesBoardBase { #region addressmaps + // remaps addresses into vrc2b form // all varieties of vrc2&4 require A15 = 1 (ie, we're in 8000:ffff), and key on A14:A12 in the same way // in addition, each variety has two other bits; a "low bit" and a "high bit" @@ -56,35 +57,35 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES #endregion - //configuration - int prg_bank_mask_8k, chr_bank_mask_1k; - int prg_reg_mask_8k; - Func remap; - Func fix_chr; - int type; - bool latch6k_exists = false; + private int prg_bank_mask_8k, chr_bank_mask_1k; + private int prg_reg_mask_8k; + private Func remap; + private Func fix_chr; + private int type; + private bool latch6k_exists = false; + // it's been verified that this should be true on all real VRC4 chips, and // that some vrc4 boards support it: http://forums.nesdev.com/viewtopic.php?t=8569 // but no vrc4 game ever used it - bool extrabig_chr = false; + private bool extrabig_chr = false; //state - public int[] prg_bank_reg_8k = new int[2]; + private int[] prg_bank_reg_8k = new int[2]; public int[] chr_bank_reg_1k = new int[16]; - bool prg_mode; + private bool _prgMode; public byte[] prg_banks_8k = new byte[4]; public int[] chr_banks_1k = new int[8]; - bool irq_mode; - bool irq_enabled, irq_pending, irq_autoen; - byte irq_reload; - byte irq_counter; - int irq_prescaler; + private bool irq_mode; + private bool irq_enabled, irq_pending, irq_autoen; + private byte irq_reload; + private byte irq_counter; + private int irq_prescaler; public int extra_vrom; - int latch6k_value; + private int latch6k_value; - bool isPirate = false; + private bool isPirate = false; // needed for 2-in-1 - Yuu Yuu + Dragonball Z [p1][!] - bool _isBMC = false; + private bool _isBMC = false; public override void SyncState(Serializer ser) { @@ -99,6 +100,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ser.Sync(nameof(irq_counter), ref irq_counter); ser.Sync(nameof(irq_prescaler), ref irq_prescaler); ser.Sync(nameof(extra_vrom), ref extra_vrom); + ser.Sync(nameof(_prgMode), ref _prgMode); if (latch6k_exists) ser.Sync(nameof(latch6k_value), ref latch6k_value); //SyncPRG(); @@ -113,7 +115,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { if (!_isBMC) { - if (prg_mode) + if (_prgMode) { prg_banks_8k[0] = 0xFE; prg_banks_8k[1] = (byte)(prg_bank_reg_8k[1]); @@ -308,7 +310,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { if (addr < 0x1000) { - prg_banks_8k[prg_mode?1:0] = (byte)((prg_banks_8k[0] & 0x20) | (value & 0x1F)); + prg_banks_8k[_prgMode?1:0] = (byte)((prg_banks_8k[0] & 0x20) | (value & 0x1F)); return; } else if (addr >= 0x2000 && addr < 0x3000) @@ -358,7 +360,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES case 0x1002: //$9002 case 0x1003: //$9003 - if (type == 4) prg_mode = value.Bit(1); + if (type == 4) _prgMode = value.Bit(1); else goto case 0x1000; SyncPRG(); break;