From 7a9d037fed9ab722d0143001811a805f53a8f51d Mon Sep 17 00:00:00 2001 From: adelikat Date: Fri, 6 Jul 2012 01:36:19 +0000 Subject: [PATCH] NES - Progress on Mapper 193 --- .../Consoles/Nintendo/NES/Boards/Mapper193.cs | 118 ++++++++++++++---- .../Nintendo/NES/Boards/Taito_X1_005.cs | 46 +++---- 2 files changed, 114 insertions(+), 50 deletions(-) diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Mapper193.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Mapper193.cs index 4fda2354f8..aae5314c48 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Mapper193.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Mapper193.cs @@ -7,7 +7,54 @@ namespace BizHawk.Emulation.Consoles.Nintendo { class Mapper193 : NES.NESBoardBase { - int prg, chr0, chr1, chr2; + /* + * ======================== + = Mapper 193 = + ======================== + + + Example Game: + -------------------------- + Fighting Hero (Unl) + + + + Registers: + --------------------------- + Regs at $6000-7FFF = no SRAM + + Range,Mask: $6000-7FFF, $6003 + + + $6000: CHR Reg 0 + $6001: CHR Reg 1 + $6002: CHR Reg 2 + $6003: PRG Reg + + + CHR Setup: + --------------------------- + + $0000 $0400 $0800 $0C00 $1000 $1400 $1800 $1C00 + +-------------------------------+---------------+---------------+ + | <<$6000>> | <$6001> | <$6002> | + +-------------------------------+---------------+---------------+ + + PRG Setup: + --------------------------- + + $8000 $A000 $C000 $E000 + +-------+-------+-------+-------+ + | $6003 | { -3} | { -2} | { -1} | + +-------+-------+-------+-------+ + */ + + int prg_bank_mask_8k; + ByteBuffer prg_banks_8k = new ByteBuffer(4); + + int chr_bank_mask_2k; + ByteBuffer chr_banks_2k = new ByteBuffer(4); + public override bool Configure(NES.EDetectionOrigin origin) { switch (Cart.board_type) @@ -17,60 +64,77 @@ namespace BizHawk.Emulation.Consoles.Nintendo default: return false; } + + prg_bank_mask_8k = (Cart.prg_size / 8) - 1; + prg_banks_8k[1] = 0xFD; + prg_banks_8k[2] = 0xFE; + prg_banks_8k[3] = 0xFF; + + chr_bank_mask_2k = (Cart.chr_size / 2) - 1; + SetMirrorType(EMirrorType.Vertical); + SyncMap(); return true; } + void SyncMap() + { + ApplyMemoryMapMask(prg_bank_mask_8k, prg_banks_8k); + ApplyMemoryMapMask(chr_bank_mask_2k, chr_banks_2k); + } + + public override void Dispose() + { + prg_banks_8k.Dispose(); + chr_banks_2k.Dispose(); + base.Dispose(); + } + public override void SyncState(Serializer ser) { base.SyncState(ser); - ser.Sync("prg", ref prg); - ser.Sync("chr0", ref chr0); - ser.Sync("chr1", ref chr1); - ser.Sync("chr2", ref chr2); + ser.Sync("prg_banks_8k", ref prg_banks_8k); + ser.Sync("chr_banks_2k", ref chr_banks_2k); } public override void WritePPU(int addr, byte value) { + addr &= 0x6003; switch (addr) { - case 0x6000: - chr0 = value; + case 0: + chr_banks_2k[0] = (byte)(value/2*2); + chr_banks_2k[1] = (byte)(value/2*2+1); break; - case 0x6001: - chr1 = value; + case 1: + chr_banks_2k[2] = value; break; - case 0x6002: - chr2 = value; + case 2: + chr_banks_2k[3] = value; break; - case 0x6003: - prg = value; + case 3: + prg_banks_8k[0] = value; break; } } public override byte ReadPPU(int addr) { - if (addr < 0x1000) - return VRAM[addr + (chr0 * 0x1000)]; - else if (addr < 0x1800) - return VRAM[addr + (chr1 * 0x0800)]; - else if (addr < 0x2000) - return VRAM[addr + (chr2 * 0x0800)]; + if (addr < 0x2000) + { + addr = ApplyMemoryMap(11, chr_banks_2k, addr); + return base.ReadPPUChr(addr); + } else + { return base.ReadPPU(addr); + } } public override byte ReadPRG(int addr) { - if (addr < 0xA000) - return ROM[addr + (prg * 0x2000)]; - else if (addr < 0xC000) - return 0xFD; - else if (addr < 0xE000) - return 0xFE; - else - return 0xFF; + addr = ApplyMemoryMap(13, prg_banks_8k, addr); + return ROM[addr]; } } } diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Taito_X1_005.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Taito_X1_005.cs index 50e9751873..a98c89700a 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Taito_X1_005.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Taito_X1_005.cs @@ -10,37 +10,37 @@ namespace BizHawk.Emulation.Consoles.Nintendo //Taito Grand Prix - Eikou heno License //Kyuukyoku Harikiri Stadium -/* -* Registers: ---------------------------- + /* + * Registers: + --------------------------- - $7EF0-7EF5: CHR Regs + $7EF0-7EF5: CHR Regs - $7EF6: [.... ...M] Mirroring - 0 = Horz - 1 = Vert + $7EF6: [.... ...M] Mirroring + 0 = Horz + 1 = Vert - $7EFA,7EFB: PRG Reg 0 (8k @ $8000) - $7EFC,7EFD: PRG Reg 1 (8k @ $A000) - $7EFE,7EFF: PRG Reg 2 (8k @ $C000) + $7EFA,7EFB: PRG Reg 0 (8k @ $8000) + $7EFC,7EFD: PRG Reg 1 (8k @ $A000) + $7EFE,7EFF: PRG Reg 2 (8k @ $C000) -CHR Setup: ---------------------------- + CHR Setup: + --------------------------- - $0000 $0400 $0800 $0C00 $1000 $1400 $1800 $1C00 - +---------------+---------------+-------+-------+-------+-------+ - | <$7EF0> | <$7EF1> | $7EF2 | $7EF3 | $7EF4 | $7EF5 | - +---------------+---------------+-------+-------+-------+-------+ + $0000 $0400 $0800 $0C00 $1000 $1400 $1800 $1C00 + +---------------+---------------+-------+-------+-------+-------+ + | <$7EF0> | <$7EF1> | $7EF2 | $7EF3 | $7EF4 | $7EF5 | + +---------------+---------------+-------+-------+-------+-------+ -PRG Setup: ---------------------------- + PRG Setup: + --------------------------- - $8000 $A000 $C000 $E000 - +-------+-------+-------+-------+ - | $7EFA | $7EFC | $7EFE | { -1} | - +-------+-------+-------+-------+ -*/ + $8000 $A000 $C000 $E000 + +-------+-------+-------+-------+ + | $7EFA | $7EFC | $7EFE | { -1} | + +-------+-------+-------+-------+ + */ class TAITO_X1_005 : NES.NESBoardBase {