*
* 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);
}
void Mapper227_init(void)
{
- SetWriteHandler(0x6000,0xffff,Mapper227_write);
+ SetWriteHandler(0x8000,0xffff,Mapper227_write);
MapperReset=M227Reset;
GameStateRestore=M227Restore;
M227Reset();