merge mapper code from FCEUX
[fceu.git] / mappers / 25.c
index f8c1d73..e099cc9 100644 (file)
@@ -15,7 +15,8 @@
  *
  * 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
+ * (VRCII mapper)
  */
 
 #include "mapinc.h"
 #define K4sel mapbyte1[0]
 
 static int acount=0;
+static int weirdo=0;
 static DECLFW(Mapper25_write)
 {
-        A=(A&0xF003)|((A&0xC)>>2);
+        if(A==0xC007)
+               {
+                       weirdo=8; // Ganbare Goemon Gaiden does strange things!!! at the end credits
+                             // quick dirty hack, seems there is no other games with such PCB, so
+                             // we never know if it will not work for something else lol
+                       VROM_BANK1(0x0000,0xFC);
+                       VROM_BANK1(0x0400,0xFD);
+                       VROM_BANK1(0x0800,0xFF);
+                       VROM_BANK1(0x0c00,0xCF);
+               }
+
+               A=(A&0xF003)|((A&0xC)>>2);
 
         if((A&0xF000)==0xA000)
           ROM_BANK8(0xA000,V);
@@ -37,7 +50,10 @@ static DECLFW(Mapper25_write)
 
          K4buf[x]&=(0xF0)>>((A&2)<<1);
          K4buf[x]|=(V&0xF)<<((A&2)<<1);
-         VROM_BANK1(x<<10,K4buf[x]);
+                if(weirdo)
+                       weirdo--;
+                else
+                       VROM_BANK1(x<<10,K4buf[x]);
         }
         else if((A&0xF000)==0x8000)
         {
@@ -72,7 +88,7 @@ static DECLFW(Mapper25_write)
  }
 }
 
-static void FP_FASTAPASS(1) KonamiIRQHook(int a)
+static void KonamiIRQHook(int a)
 {
 //  #define LCYCS ((227*2))
   #define LCYCS 341