diff --git a/BizHawk.Emulation/BizHawk.Emulation.csproj b/BizHawk.Emulation/BizHawk.Emulation.csproj
index 0088131b0f..13e58b398d 100644
--- a/BizHawk.Emulation/BizHawk.Emulation.csproj
+++ b/BizHawk.Emulation/BizHawk.Emulation.csproj
@@ -86,7 +86,7 @@
Code
-
+
Code
diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/TxROM.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/TxROM_DxROM.cs
similarity index 63%
rename from BizHawk.Emulation/Consoles/Nintendo/NES/Boards/TxROM.cs
rename to BizHawk.Emulation/Consoles/Nintendo/NES/Boards/TxROM_DxROM.cs
index 12d86700c3..9b9bdf2e6a 100644
--- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/TxROM.cs
+++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/TxROM_DxROM.cs
@@ -2,9 +2,12 @@
using System.IO;
using System.Diagnostics;
+//TODO - mapper 118 and 119 need to be gracefully worked in here.
+//but we might want to break them down into a new board type and reuse class mmc3. be sure to try that to see how it goes
+
namespace BizHawk.Emulation.Consoles.Nintendo
{
- public class TxROM : NES.NESBoardBase
+ public class TxROM_DxROM : NES.NESBoardBase
{
class MMC3 : IDisposable
{
@@ -100,9 +103,10 @@ namespace BizHawk.Emulation.Consoles.Nintendo
void ClockIRQ()
{
- if(irq_counter == 0)
+ if (irq_counter == 0)
irq_counter = irq_reload;
- else {
+ else
+ {
irq_counter--;
//Console.WriteLine(irq_counter);
if (irq_counter == 0)
@@ -118,13 +122,13 @@ namespace BizHawk.Emulation.Consoles.Nintendo
public void Tick_PPU(int addr)
{
ppubus_statecounter++;
- int state = (addr >> 12)&1;
- if(ppubus_state == 0 && ppubus_statecounter > 1 && state == 1)
+ int state = (addr >> 12) & 1;
+ if (ppubus_state == 0 && ppubus_statecounter > 1 && state == 1)
{
ppubus_statecounter = 0;
ClockIRQ();
}
- if(ppubus_state != state)
+ if (ppubus_state != state)
{
ppubus_state = state;
}
@@ -134,7 +138,9 @@ namespace BizHawk.Emulation.Consoles.Nintendo
//configuration
int prg_mask, chr_mask;
- int wram_mask;
+ int wram_mask, vram_mask;
+ int vram_bytes;
+ bool fourscreen;
//state
MMC3 mmc3;
@@ -170,13 +176,33 @@ namespace BizHawk.Emulation.Consoles.Nintendo
return VROM[addr];
else return VRAM[addr];
}
+ else if (fourscreen)
+ {
+ int myaddr = addr - 0x2000;
+ if (myaddr < vram_bytes)
+ return VRAM[myaddr];
+ else
+ return base.ReadPPU(addr);
+ }
else return base.ReadPPU(addr);
}
public override void WritePPU(int addr, byte value)
{
mmc3.Tick_PPU(addr);
- base.WritePPU(addr, value);
+ if (fourscreen)
+ {
+ if (addr >= 0x2000)
+ {
+ int myaddr = addr - 0x2000;
+ if (myaddr < vram_bytes)
+ VRAM[myaddr] = value;
+ else
+ base.WritePPU(addr, value);
+ }
+ else base.WritePPU(addr, value);
+ }
+ else base.WritePPU(addr, value);
}
public override byte ReadWRAM(int addr)
@@ -213,53 +239,64 @@ namespace BizHawk.Emulation.Consoles.Nintendo
//analyze board type
switch (Cart.board_type)
{
- case "NES-TBROM":
- AssertPrg(64); AssertChr(64); AssertVram(0); AssertWram(0);
- AssertBattery(false);
- break;
- case "NES-TEROM": //Adv of lolo 2
- AssertPrg(32); AssertChr(32); AssertVram(0); AssertWram(0);
- AssertBattery(false);
- break;
- case "NES-TFROM":
- AssertPrg(128); AssertChr(32, 64); AssertVram(0); AssertWram(0);
- AssertBattery(false);
- break;
- case "NES-TGROM": //mega man 4 & 6
+ case "NES-TBROM": //tecmo world cup soccer (DE) [untested]
+ AssertPrg(64); AssertChr(64); AssertVram(0); AssertWram(0);
+ AssertBattery(false);
+ break;
+ case "NES-TEROM": //Adv of lolo 2
+ AssertPrg(32); AssertChr(32); AssertVram(0); AssertWram(0);
+ AssertBattery(false);
+ break;
+ case "NES-TFROM": //legacy of the wizard
+ AssertPrg(128); AssertChr(32, 64); AssertVram(0); AssertWram(0);
+ AssertBattery(false);
+ break;
+ case "NES-TGROM": //mega man 4 & 6
AssertPrg(128, 256, 512); AssertChr(0); AssertVram(8); AssertWram(0);
- AssertBattery(false);
+ AssertBattery(false);
break;
case "NES-TKROM": //kirby's adventure
AssertPrg(128, 256, 512); AssertChr(128, 256); AssertVram(0); AssertWram(8);
break;
case "NES-TLROM": //mega man 3
AssertPrg(128, 256, 512); AssertChr(128, 256); AssertVram(0); AssertWram(0);
- AssertBattery(false);
+ AssertBattery(false);
+ break;
+ case "NES-TL1ROM": //Double dragon 2
+ AssertPrg(128); AssertChr(128); AssertVram(0); AssertWram(0);
+ AssertBattery(false);
+ break;
+ case "NES-TL2ROM": //batman (U) ?
+ AssertPrg(128); AssertChr(128); AssertVram(0); AssertWram(0);
+ AssertBattery(false);
+ break;
+ case "NES-TQROM": //{mapper 119} high speed - ALMOST POSITIVELTY NEEDS WORK
+ AssertPrg(128); AssertChr(64); AssertVram(8); AssertWram(0);
+ AssertBattery(false);
+ break;
+ case "NES-TR1ROM": //gauntlet (U) - someone please test this
+ AssertPrg(128); AssertChr(64); AssertVram(2); AssertWram(0);
+ fourscreen = true;
+ AssertBattery(false);
+ break;
+ case "NES-TSROM": //super mario bros. 3 (U)
+ AssertPrg(128, 256, 512); AssertChr(128, 256); AssertVram(0); AssertWram(8);
+ AssertBattery(false);
+ break;
+ case "NES-TVROM": //rad racer II (U)
+ AssertPrg(64); AssertChr(64); AssertVram(8); AssertWram(0);
+ fourscreen = true;
+ AssertBattery(false);
+ break;
+ case "NES-B4": //batman (U)
+ AssertPrg(128); AssertChr(128); AssertVram(0); AssertWram(0);
+ AssertBattery(false);
+ break;
+ case "NES-DRROM": //gauntlet (U) sometimes
+ AssertPrg(128); AssertChr(64); AssertVram(2); AssertWram(0);
+ fourscreen = true;
+ AssertBattery(false);
break;
- case "NES-TL1ROM": //Double dragon 2
- AssertPrg(128); AssertChr(128); AssertVram(0); AssertWram(0);
- AssertBattery(false);
- break;
- case "NES-TL2ROM":
- AssertPrg(128); AssertChr(128); AssertVram(0); AssertWram(0);
- AssertBattery(false);
- break;
- case "NES-TQROM":
- AssertPrg(128); AssertChr(64); AssertVram(8); AssertWram(0);
- AssertBattery(false);
- break;
- case "NESTR1-ROM":
- AssertPrg(128); AssertChr(64); AssertVram(2); AssertWram(0);
- AssertBattery(false);
- break;
- case "NES-TSROM": //super mario bros. 3 USA
- AssertPrg(128, 256, 512); AssertChr(128, 256); AssertVram(0); AssertWram(8);
- AssertBattery(false);
- break;
- case "NES-TVROM":
- AssertPrg(64); AssertChr(64); AssertVram(4); AssertWram(0);
- AssertBattery(false);
- break;
default:
return false;
}
@@ -272,6 +309,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo
chr_mask = num_chr_banks - 1;
wram_mask = (Cart.wram_size * 1024) - 1;
+ vram_mask = (Cart.vram_size * 1024) - 1;
+ vram_bytes = Cart.vram_size * 1024;
mmc3 = new MMC3(this, num_prg_banks);
SetMirrorType(EMirrorType.Vertical);