/* 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
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();
}