X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mappers%2F227.c;h=e88649b2bb12ffa5ea7745092ac3d7c37d5e81f1;hb=5bd16b94320afa9dfba4985f5d69c2d84bae4c33;hp=457e79e2379580e771a21374b21c16ef012c1091;hpb=d97315ac0bca825d2d50a44453bc5652946e2c67;p=fceu.git diff --git a/mappers/227.c b/mappers/227.c index 457e79e..e88649b 100644 --- a/mappers/227.c +++ b/mappers/227.c @@ -24,56 +24,68 @@ static void DoSync(uint32 A) { - int32 p=((A>>3)&0xF) | ((A>>4)&0x10); + uint32 S = A & 1; + uint32 p = (A >> 2) & 0x1F; + p += (A&0x100) ? 0x20 : 0; + uint32 o = (A>>7)&1; + uint32 L = (A>>9)&1; - rg[0]=A; - rg[1]=A>>8; + 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); + } - 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) - { - PPUCHRRAM=0; - } - else - { - PPUCHRRAM=0xFF; - if(A&0x200) - ROM_BANK16(0xC000,(p<<1)|7); - else - ROM_BANK16(0xC000,(p<<1)&(~7)); - } + rg[0]=A; + rg[1]=A>>8; + + MIRROR_SET((A>>1)&1); } static DECLFW(Mapper227_write) { - rg[A&1]=V; - DoSync(A); + DoSync(A); } static void M227Reset(void) { - rg[0]=rg[1]=0; - DoSync(0); + DoSync(0); } static void M227Restore(int version) { - DoSync(rg[0]|(rg[1]<<8)); + DoSync(rg[0]|(rg[1]<<8)); } void Mapper227_init(void) { - SetWriteHandler(0x6000,0xffff,Mapper227_write); - MapperReset=M227Reset; - GameStateRestore=M227Restore; - M227Reset(); + SetWriteHandler(0x8000,0xffff,Mapper227_write); + MapperReset=M227Reset; + GameStateRestore=M227Restore; + M227Reset(); }