X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=mappers%2F227.c;h=8b5cff99cc920dd4c2c362618d4e3f847ba1e7ef;hp=457e79e2379580e771a21374b21c16ef012c1091;hb=386f5371eb984fb9c2860c83e740890a75cd45c1;hpb=eec2623f6183dd0f9494b99065a16bf90f2a1ccf diff --git a/mappers/227.c b/mappers/227.c index 457e79e..8b5cff9 100644 --- a/mappers/227.c +++ b/mappers/227.c @@ -15,53 +15,68 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #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) - { - 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); } @@ -72,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();