rewrite more of mapper 227 to work even better (fixes Xiang Shuai Chuan Qi better)

This commit is contained in:
zeromus 2012-04-15 04:24:29 +00:00
parent d27e7bf2b1
commit 4f4805760b
1 changed files with 41 additions and 29 deletions

View File

@ -20,51 +20,63 @@
#include "mapinc.h"
//zero 14-apr-2012 - redid this entirely to match bizhawk
#define rg mapbyte1
static void DoSync(uint32 A)
{
int32 p=((A>>3)&0xF) | ((A>>4)&0x10);
{
int S = A & 1;
int M_horz = (A>>1)&1;
int p = (A >> 2) & 0x1F;
p += (A&0x100) ? 0x20 : 0;
bool o = (A>>7)&1;
bool L = (A>>9)&1;
if (o && !S )
{
ROM_BANK16(0x8000,p);
ROM_BANK16(0xC000,p);
}
if (o && S )
{
ROM_BANK16(0x8000,p);
ROM_BANK16(0xC000,p+1);
}
if (!o && !S && !L )
{
ROM_BANK16(0x8000,p);
ROM_BANK16(0xC000,p&0x38);
}
if (!o && S && !L )
{
ROM_BANK16(0x8000,p&0x3E);
ROM_BANK16(0xC000,p&0x38);
}
if (!o && !S && L)
{
ROM_BANK16(0x8000,p);
ROM_BANK16(0xC000,p|7);
}
if (!o && S && L )
{
ROM_BANK16(0x8000,p&0x3E);
ROM_BANK16(0xC000,p|7);
}
rg[0]=A;
rg[1]=A>>8;
MIRROR_SET((A>>1)&1);
if(A&1) //32 KB
{
ROM_BANK32(p);
}
else //16 KB
{
ROM_BANK16(0x8000,(p<<1)|((A&4)>>2));
ROM_BANK16(0xc000,(p<<1)|((A&4)>>2));
}
if(A&0x80)
{
//zero 09-apr-2012 - re #3515350
//removed this to fix [NJXXX] Xiang Shuai Chuan Qi which wouldnt be able to write any of its vram otherwise
//if this needs to be here for some other reason, then we'll have to learn how to decide when to do it
//PPUCHRRAM=0;
}
else
{
PPUCHRRAM=0xFF;
if(A&0x200)
ROM_BANK16(0xC000,(p<<1)|7);
else
ROM_BANK16(0xC000,(p<<1)&(~7));
}
}
static DECLFW(Mapper227_write)
{
rg[A&1]=V;
DoSync(A);
}
static void M227Reset(void)
{
rg[0]=rg[1]=0;
DoSync(0);
}
@ -75,7 +87,7 @@ static void M227Restore(int version)
void Mapper227_init(void)
{
SetWriteHandler(0x6000,0xffff,Mapper227_write);
SetWriteHandler(0x8000,0xffff,Mapper227_write);
MapperReset=M227Reset;
GameStateRestore=M227Restore;
M227Reset();