[NES] assorted mapper cleanup and add MMC2
This commit is contained in:
parent
7705e3f6f1
commit
2d20ab84ca
|
@ -94,6 +94,7 @@
|
|||
<Compile Include="Consoles\Nintendo\NES\Boards\NROM.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\PxROM.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\Sunsoft1.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\Sunsoft4.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\SxROM.cs">
|
||||
|
|
|
@ -21,7 +21,7 @@ Open bus and bus conflict emulation is not considered complete or thorough in an
|
|||
004 MMC3 Decent
|
||||
005 ExRom=MMC5 Minimal
|
||||
007 AxROM Good
|
||||
009 PxROM=MMC2 ~NEEDED~
|
||||
009 PxROM=MMC2 Complete
|
||||
010 MMC4 Needed (easy once 009 is done)
|
||||
011 Misc Complete
|
||||
013 CPROM Complete
|
||||
|
@ -98,7 +98,7 @@ Open bus and bus conflict emulation is not considered complete or thorough in an
|
|||
180 Misc (J) Nothing
|
||||
182 MMC3Variant Nothing
|
||||
184 Sunsoft-1 Complete
|
||||
185 Misc (J) Nothing
|
||||
185 Misc (J) {{See 003}} This one will be an organizational pain as the games need additional data in gamedb
|
||||
189 MMC3Variant Nothing
|
||||
191 Pirate Junk
|
||||
192 Pirate Junk
|
||||
|
|
|
@ -4,7 +4,7 @@ using System.Diagnostics;
|
|||
|
||||
namespace BizHawk.Emulation.Consoles.Nintendo
|
||||
{
|
||||
//generally mapper3
|
||||
//generally mapper 3
|
||||
|
||||
//Solomon's Key
|
||||
//Arkanoid
|
||||
|
@ -46,6 +46,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
public override void WritePRG(int addr, byte value)
|
||||
{
|
||||
if (bus_conflict) value = HandleNormalPRGConflict(addr,value);
|
||||
value &= 3;
|
||||
chr = value&chr_mask;
|
||||
//Console.WriteLine("at {0}, set chr={1}", NES.ppu.ppur.status.sl, chr);
|
||||
}
|
||||
|
|
|
@ -9,14 +9,14 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
//Crystal Mines
|
||||
//Metal Fighter
|
||||
|
||||
public class Discrete_74x377 : NES.NESBoardBase
|
||||
public class IC_74x377 : NES.NESBoardBase
|
||||
{
|
||||
//configuration
|
||||
int prg_mask, chr_mask;
|
||||
int prg_bank_mask_32k, chr_bank_mask_8k;
|
||||
bool bus_conflict = true;
|
||||
|
||||
//state
|
||||
int prg, chr;
|
||||
int prg_bank_32k, chr_bank_8k;
|
||||
|
||||
public override bool Configure(NES.EDetectionOrigin origin)
|
||||
{
|
||||
|
@ -31,22 +31,22 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
prg_mask = (Cart.prg_size/8/2)-1;
|
||||
chr_mask = (Cart.chr_size / 8 - 1);
|
||||
|
||||
prg_bank_mask_32k = Cart.prg_size / 32 - 1;
|
||||
chr_bank_mask_8k = Cart.chr_size / 8 - 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
public override byte ReadPRG(int addr)
|
||||
{
|
||||
return ROM[addr + (prg<<15)];
|
||||
return ROM[addr + (prg_bank_32k << 15)];
|
||||
}
|
||||
|
||||
public override byte ReadPPU(int addr)
|
||||
{
|
||||
if (addr < 0x2000)
|
||||
{
|
||||
return VROM[addr + (chr << 13)];
|
||||
return VROM[addr + (chr_bank_8k << 13)];
|
||||
}
|
||||
else return base.ReadPPU(addr);
|
||||
}
|
||||
|
@ -60,15 +60,15 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
Debug.Assert(old_value == value, "Found a test case of Discrete_74x377 bus conflict. please report.");
|
||||
}
|
||||
|
||||
prg = (value & 3) & prg_mask;
|
||||
chr = (value >> 4) & chr_mask;
|
||||
prg_bank_32k = (value & 3) & prg_bank_mask_32k;
|
||||
chr_bank_8k = ((value >> 4) & 0xF) & chr_bank_mask_8k;
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("chr", ref chr);
|
||||
ser.Sync("prg", ref prg);
|
||||
ser.Sync("prg_bank_32k", ref prg_bank_32k);
|
||||
ser.Sync("chr_bank_8k", ref chr_bank_8k);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -87,6 +87,9 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
AssertPrg(128); AssertChr(128); AssertVram(0); AssertWram(0);
|
||||
AssertBattery(false);
|
||||
break;
|
||||
case "HVC-TNROM": //Final Fantasy 3 (J)
|
||||
AssertPrg(128, 256, 512); AssertChr(0, 8); AssertVram(0, 8); AssertWram(8);
|
||||
break;
|
||||
case "NES-TSROM": //super mario bros. 3 (U)
|
||||
AssertPrg(128, 256, 512); AssertChr(128, 256); AssertVram(0); AssertWram(8);
|
||||
AssertBattery(false);
|
||||
|
|
|
@ -19,16 +19,15 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
{
|
||||
case "HVC-NROM-256": //super mario bros.
|
||||
case "NES-NROM-256": //10 yard fight
|
||||
AssertPrg(32); AssertChr(8); AssertVram(0); AssertWram(0,8);
|
||||
break;
|
||||
|
||||
case "HVC-RROM": //balloon fight
|
||||
case "HVC-NROM-128":
|
||||
case "IREM-NROM-128":
|
||||
case "KONAMI-NROM-128":
|
||||
case "NES-NROM-128":
|
||||
case "NAMCOT-3301":
|
||||
AssertPrg(16); AssertChr(8); AssertVram(0); AssertWram(0,8);
|
||||
case "HVC-HROM": //Donkey Kong Jr. (J)
|
||||
case "JALECO-JF-01": //Exerion (J)
|
||||
AssertPrg(16, 32); AssertChr(8); AssertVram(0); AssertWram(0, 8);
|
||||
break;
|
||||
|
||||
case "NROM-HOMEBREW":
|
||||
|
@ -38,7 +37,6 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
default:
|
||||
return false;
|
||||
}
|
||||
if (origin != NES.EDetectionOrigin.INES) AssertWram(0);
|
||||
|
||||
prg_byte_mask = (Cart.prg_size*1024) - 1;
|
||||
SetMirrorType(Cart.pad_h, Cart.pad_v);
|
||||
|
|
|
@ -0,0 +1,115 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace BizHawk.Emulation.Consoles.Nintendo
|
||||
{
|
||||
//AKA MMC2 AKA Mike Tyson's Punch-Out!!
|
||||
class PxROM : NES.NESBoardBase
|
||||
{
|
||||
//configuration
|
||||
int prg_bank_mask_8k, chr_bank_mask_4k;
|
||||
|
||||
//state
|
||||
IntBuffer prg_banks_8k = new IntBuffer(4);
|
||||
IntBuffer chr_banks_4k = new IntBuffer(4);
|
||||
IntBuffer chr_latches = new IntBuffer(2);
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("prg_banks_8k", ref prg_banks_8k);
|
||||
ser.Sync("chr_banks_4k", ref chr_banks_4k);
|
||||
ser.Sync("chr_latches", ref chr_latches);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
prg_banks_8k.Dispose();
|
||||
chr_banks_4k.Dispose();
|
||||
chr_latches.Dispose();
|
||||
}
|
||||
|
||||
public override bool Configure(NES.EDetectionOrigin origin)
|
||||
{
|
||||
switch (Cart.board_type)
|
||||
{
|
||||
case "NES-PNROM": //punch-out!!
|
||||
case "HVC-PEEOROM":
|
||||
AssertPrg(128); AssertChr(128); AssertWram(0); AssertVram(0);
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
prg_bank_mask_8k = Cart.prg_size / 8 - 1;
|
||||
chr_bank_mask_4k = Cart.chr_size / 4 - 1;
|
||||
|
||||
prg_banks_8k[0] = 0;
|
||||
prg_banks_8k[1] = 0xFD & prg_bank_mask_8k;
|
||||
prg_banks_8k[2] = 0xFE & prg_bank_mask_8k; ;
|
||||
prg_banks_8k[3] = 0xFF & prg_bank_mask_8k; ;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public override void WritePRG(int addr, byte value)
|
||||
{
|
||||
switch (addr & 0xF000)
|
||||
{
|
||||
case 0x2000: //$A000: PRG Reg
|
||||
prg_banks_8k[0] = value & prg_bank_mask_8k;
|
||||
break;
|
||||
case 0x3000: //$B000: CHR Reg 0A
|
||||
chr_banks_4k[0] = value & chr_bank_mask_4k;
|
||||
break;
|
||||
case 0x4000: //$C000: CHR Reg 0B
|
||||
chr_banks_4k[1] = value & chr_bank_mask_4k;
|
||||
break;
|
||||
case 0x5000: //$D000: CHR Reg 1A
|
||||
chr_banks_4k[2] = value & chr_bank_mask_4k;
|
||||
break;
|
||||
case 0x6000: //$E000: CHR Reg 1B
|
||||
chr_banks_4k[3] = value & chr_bank_mask_4k;
|
||||
break;
|
||||
case 0x7000: //$F000: [.... ...M] Mirroring:
|
||||
SetMirrorType(value.Bit(0) ? EMirrorType.Horizontal : EMirrorType.Vertical);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public override byte ReadPPU(int addr)
|
||||
{
|
||||
int side = addr>>12;
|
||||
int tile = (addr>>4)&0xFF;
|
||||
if (addr < 0x2000)
|
||||
{
|
||||
switch (tile)
|
||||
{
|
||||
case 0xFD: chr_latches[side] = 0; break;
|
||||
case 0xFE: chr_latches[side] = 1; break;
|
||||
}
|
||||
int reg = side * 2 + chr_latches[side];
|
||||
int ofs = addr & ((1 << 12) - 1);
|
||||
int bank_4k = chr_banks_4k[reg];
|
||||
addr = (bank_4k << 12) | ofs;
|
||||
return VROM[addr];
|
||||
}
|
||||
else return base.ReadPPU(addr);
|
||||
}
|
||||
|
||||
public override byte ReadPRG(int addr)
|
||||
{
|
||||
int bank_8k = addr >> 13;
|
||||
int ofs = addr & ((1 << 13) - 1);
|
||||
bank_8k = prg_banks_8k[bank_8k];
|
||||
addr = (bank_8k << 13) | ofs;
|
||||
return ROM[addr];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -2270,6 +2270,8 @@ sha1:894F20405286F5F75133CE4648300E2C67972B40 Solomon's Key (U) NES board=NES-
|
|||
sha1:0C53B06E1D13AE917536BB39010914EA3D111FF5 Thunder & Lightning (U) NES board=NES-GNROM;PRG=128;CHR=32;bad
|
||||
sha1:9BDFF9A19265D84979F43F0F6E925A735DDEB38B Wai Xing Zhan Shi (Ch) NES board=Mapper242;PRG=512;CHR=0;VRAM=8;WRAM=8
|
||||
sha1:91CECCFCAC90E417E9AEE80E8F7B560A20EB33CC Ai Sensei No Oshiete - Watashi No Hoshi (J) NES board=IREM-G101;PRG=256;CHR=128;WRAM=8
|
||||
sha1:B6F6BD9D78CDD264A117D4B647AEE3309993E9A9 Mike Tyson's Punch-Out!! (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
|
||||
sha1:A0C4D4172A0037B7D9BA729A93E809978D0F10D2 Punch-Out!! (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
|
||||
|
||||
;and these are even labeled as bad in goodNES
|
||||
sha1:984ADAEB85403EEF1BA85CDCF310FAAECEB409A0 Adventures of Captain Comic, The (Bad Dump) (U) NES board=COLORDREAMS-74*377;PRG=64;CHR=64;WRAM=0;VRAM=0;bad
|
||||
|
@ -2288,6 +2290,8 @@ sha1:0AE47BD83202A5A2235B0BC16278F56D66038AB5 Deathbots (U) NES board=AVE-NINA
|
|||
|
||||
;these roms are in goodNES but theyre junk
|
||||
sha1:4D6117577CE301BB987C5C32FEEF7B132A21B046 Afro Man (Mega Man 3 Hack) (UNL) NES board=TXROM-HOMEBREW;PRG=256;CHR=128;WRAM=8
|
||||
sha1:7BD102770FE7766BF8430ACDB3C17EE51E30478C Mike Tyson's Punch-Out!! (Hacked) (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
|
||||
sha1:536D623BA02A622BDE8E2D7D514AE9785B5E0357 Punch Out!! Kirby (Hack) (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
|
||||
|
||||
;other assorted roms
|
||||
sha1:92D9695FEB774F60965A8303CFE3E6AAEE7B7B62 Magic Dragon (Unl) NES board=Mapper107;PRG=128;CHR=64;WRAM=8;PAD_H=1
|
||||
|
|
Loading…
Reference in New Issue