X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mappers%2F227.c;h=e88649b2bb12ffa5ea7745092ac3d7c37d5e81f1;hb=5bd16b94320afa9dfba4985f5d69c2d84bae4c33;hp=2754369647002f86fb86be26ddab254836e5daed;hpb=c0bf6f9f02a2b6afb961a7e9195e2168d7e9cecf;p=fceu.git diff --git a/mappers/227.c b/mappers/227.c index 2754369..e88649b 100644 --- a/mappers/227.c +++ b/mappers/227.c @@ -1,7 +1,7 @@ /* FCE Ultra - NES/Famicom Emulator * * Copyright notice for this file: - * Copyright (C) 2002 Ben Parnell + * Copyright (C) 2002 Xodnizel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,57 +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)); - } - X6502_Rebase(); + 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(0x8000,0xffff,Mapper227_write); - MapperReset=M227Reset; - GameStateRestore=M227Restore; - M227Reset(); + SetWriteHandler(0x8000,0xffff,Mapper227_write); + MapperReset=M227Reset; + GameStateRestore=M227Restore; + M227Reset(); }