Support the UNIF_UNL-T-230 board (a vrc pirate cart)
This commit is contained in:
parent
adcf2dc375
commit
c6db32437c
|
@ -82,6 +82,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
public int extra_vrom;
|
public int extra_vrom;
|
||||||
int latch6k_value;
|
int latch6k_value;
|
||||||
|
|
||||||
|
bool isPirate = false;
|
||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
base.Dispose();
|
base.Dispose();
|
||||||
|
@ -107,6 +109,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
SyncPRG();
|
SyncPRG();
|
||||||
SyncCHR();
|
SyncCHR();
|
||||||
SyncIRQ();
|
SyncIRQ();
|
||||||
|
ser.Sync("isPirate", ref isPirate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SyncPRG()
|
void SyncPRG()
|
||||||
|
@ -174,6 +177,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
remap = AddrA3A2_A1A0;
|
remap = AddrA3A2_A1A0;
|
||||||
Cart.wram_size = 8;
|
Cart.wram_size = 8;
|
||||||
break;
|
break;
|
||||||
|
case "UNIF_UNL-T-230":
|
||||||
|
isPirate = true;
|
||||||
|
goto case "MAPPER023";
|
||||||
case "MAPPER027":
|
case "MAPPER027":
|
||||||
//not exactly the same implementation as FCEUX, but we're taking functionality from it step by step as we discover and document it
|
//not exactly the same implementation as FCEUX, but we're taking functionality from it step by step as we discover and document it
|
||||||
//world hero (unl) is m027 and depends on the extrabig_chr functionality to have correct graphics.
|
//world hero (unl) is m027 and depends on the extrabig_chr functionality to have correct graphics.
|
||||||
|
@ -266,12 +272,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
|
|
||||||
public override byte ReadPPU(int addr)
|
public override byte ReadPPU(int addr)
|
||||||
{
|
{
|
||||||
if (addr < 0x2000)
|
if (addr < 0x2000 && VROM != null)
|
||||||
{
|
{
|
||||||
int bank_1k = addr >> 10;
|
int bank_1k = addr >> 10;
|
||||||
int ofs = addr & ((1 << 10) - 1);
|
int ofs = addr & ((1 << 10) - 1);
|
||||||
bank_1k = chr_banks_1k[bank_1k];
|
bank_1k = chr_banks_1k[bank_1k];
|
||||||
addr = (bank_1k << 10) | ofs;
|
addr = (bank_1k << 10) | ofs;
|
||||||
|
|
||||||
return VROM[addr + extra_vrom];
|
return VROM[addr + extra_vrom];
|
||||||
}
|
}
|
||||||
else return base.ReadPPU(addr);
|
else return base.ReadPPU(addr);
|
||||||
|
@ -296,8 +303,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
case 0x0002:
|
case 0x0002:
|
||||||
case 0x0003:
|
case 0x0003:
|
||||||
prg_bank_reg_8k[0] = value & prg_reg_mask_8k;
|
if (!isPirate)
|
||||||
SyncPRG();
|
{
|
||||||
|
prg_bank_reg_8k[0] = value & prg_reg_mask_8k;
|
||||||
|
SyncPRG();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x1000: //$9000
|
case 0x1000: //$9000
|
||||||
|
@ -322,7 +332,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
case 0x2001: //$A001
|
case 0x2001: //$A001
|
||||||
case 0x2002: //$A002
|
case 0x2002: //$A002
|
||||||
case 0x2003: //$A003
|
case 0x2003: //$A003
|
||||||
prg_bank_reg_8k[1] = value & prg_reg_mask_8k;
|
if (!isPirate)
|
||||||
|
{
|
||||||
|
prg_bank_reg_8k[1] = value & prg_reg_mask_8k;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prg_bank_reg_8k[0] = (value & 0x1F) << 1;
|
||||||
|
prg_bank_reg_8k[1] = ((value & 0x1F) << 1) | 1;
|
||||||
|
}
|
||||||
SyncPRG();
|
SyncPRG();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue