Fix Samurai Spirits (rexsoft)
This commit is contained in:
parent
0ac114d3a1
commit
a96fb11b1d
|
@ -57,9 +57,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SinkMirror()
|
void SinkMirror(bool flip)
|
||||||
{
|
{
|
||||||
SetMirrorType(exnmt.Bit(0) ? EMirrorType.Vertical : EMirrorType.Horizontal);
|
if (flip)
|
||||||
|
SetMirrorType(exnmt.Bit(0) ? EMirrorType.Vertical : EMirrorType.Horizontal);
|
||||||
|
else
|
||||||
|
SetMirrorType(!exnmt.Bit(0) ? EMirrorType.Vertical : EMirrorType.Horizontal);
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly static byte[] modes = { 5, 5, 3, 1 };
|
readonly static byte[] modes = { 5, 5, 3, 1 };
|
||||||
|
@ -91,14 +94,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
// this is stupid as hell
|
// this is stupid as hell
|
||||||
public override void WritePRG(int addr, byte value)
|
public override void WritePRG(int addr, byte value)
|
||||||
{
|
{
|
||||||
Console.WriteLine("{0:x4}:{1:x2}", addr, value);
|
//Console.WriteLine("{0:x4}:{1:x2}", addr, value);
|
||||||
|
|
||||||
if ((addr & 0x2131) == 0x2131)
|
if ((addr & 0x2131) == 0x2131 && (exmode != value))
|
||||||
{
|
{
|
||||||
exmode = value;
|
exmode = value;
|
||||||
if (!exmode.Bit(1))
|
if (!exmode.Bit(1))
|
||||||
{
|
{
|
||||||
SinkMirror();
|
SinkMirror(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +111,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
{
|
{
|
||||||
case 0x0000: base.WritePRG(0x0000, value); break;
|
case 0x0000: base.WritePRG(0x0000, value); break;
|
||||||
case 0x0001: base.WritePRG(0x0001, value); break;
|
case 0x0001: base.WritePRG(0x0001, value); break;
|
||||||
case 0x2000: SinkMirror(); break;
|
case 0x2000: SinkMirror(true); break;
|
||||||
case 0x2001: base.WritePRG(0x2001, value); break;
|
case 0x2001: base.WritePRG(0x2001, value); break;
|
||||||
case 0x4000: base.WritePRG(0x4000, value); break;
|
case 0x4000: base.WritePRG(0x4000, value); break;
|
||||||
case 0x4001: base.WritePRG(0x4001, value); break;
|
case 0x4001: base.WritePRG(0x4001, value); break;
|
||||||
|
@ -117,11 +120,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (addr >= 3000 && addr <= 0x6003)
|
else if (addr >= 0x3000 && addr <= 0x6003)
|
||||||
{
|
{
|
||||||
int offset = addr << 2 & 4;
|
int offset = addr << 2 & 0x4;
|
||||||
addr = ((((addr & 0x2) | addr >> 10) >> 1) + 2) & 0x7;
|
addr = ((((addr & 0x2) | addr >> 10) >> 1) + 2) & 0x7;
|
||||||
exchr[addr] = (exchr[addr] & 0xf0 >> offset) | ((value & 0x0f) >> offset);
|
exchr[addr] = (exchr[addr] & 0xf0 >> offset) | ((value & 0x0f) << offset);
|
||||||
// sync chr
|
// sync chr
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -129,7 +132,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
switch (addr & 0x7003)
|
switch (addr & 0x7003)
|
||||||
{
|
{
|
||||||
case 0x0000: exprg[0] = value; break;
|
case 0x0000: exprg[0] = value; break;
|
||||||
case 0x1000: exnmt = value; SinkMirror(); break;
|
case 0x1000: exnmt = value; SinkMirror(false); break;
|
||||||
case 0x2000: exprg[1] = value; break;
|
case 0x2000: exprg[1] = value; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue