load keys again after plat init
[fceu.git] / mappers / 23.c
index 12f30d8..d61a555 100644 (file)
@@ -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
@@ -23,8 +23,8 @@
 #define K4buf mapbyte2
 #define K4IRQ mapbyte1[1]
 #define K4sel mapbyte1[0]
-
-DECLFW(Mapper23_write)
+static int acount=0;
+static DECLFW(Mapper23_write)
 {
  if((A&0xF000)==0x8000)
  {
@@ -32,8 +32,8 @@ DECLFW(Mapper23_write)
    ROM_BANK8(0xC000,V);
   else
    ROM_BANK8(0x8000,V);
-  } 
-  else if((A&0xF000)==0xA000) 
+  }
+  else if((A&0xF000)==0xA000)
    ROM_BANK8(0xA000,V);
   else
   {
@@ -47,12 +47,12 @@ DECLFW(Mapper23_write)
     K4buf[x]|=(V&0xF)<<((A&1)<<2);
     VROM_BANK1(x<<10,K4buf[x]);
    }
-   else 
+   else
     switch(A)
     {
      case 0xf000:X6502_IRQEnd(FCEU_IQEXT);IRQLatch&=0xF0;IRQLatch|=V&0xF;break;
      case 0xf001:X6502_IRQEnd(FCEU_IQEXT);IRQLatch&=0x0F;IRQLatch|=V<<4;break;
-     case 0xf002:X6502_IRQEnd(FCEU_IQEXT);IRQCount=IRQLatch;IRQa=V&2;K4IRQ=V&1;break;
+     case 0xf002:X6502_IRQEnd(FCEU_IQEXT);acount=0;IRQCount=IRQLatch;IRQa=V&2;K4IRQ=V&1;break;
      case 0xf003:X6502_IRQEnd(FCEU_IQEXT);IRQa=K4IRQ;break;
      case 0x9001:
      case 0x9002:
@@ -67,29 +67,30 @@ DECLFW(Mapper23_write)
                  K4sel=V;
                  break;
      case 0x9000:
-               switch(V&0x3)
-               {
+            if(V!=0xFF)
+                     switch(V&0x3)
+                {
                  case 0:MIRROR_SET(0);break;
-                case 1:MIRROR_SET(1);break;
-                case 2:onemir(0);break;
-                case 3:onemir(1);break;
-               }
-               break;
+                      case 1:MIRROR_SET(1);break;
+                     case 2:onemir(0);break;
+                     case 3:onemir(1);break;
+                }
+                break;
   }
  }
 }
 
 void FP_FASTAPASS(1) KonamiIRQHook2(int a)
 {
-  static int acount=0;
+  #define LCYCS 341
   if(IRQa)
-   {
-    acount+=(a<<1)+a;
-    if(acount>=342)
+  {
+   acount+=a*3;
+    if(acount>=LCYCS)
     {
-     doagainbub:acount-=342;IRQCount++;
+     doagainbub:acount-=LCYCS;IRQCount++;
      if(IRQCount&0x100) {X6502_IRQBegin(FCEU_IQEXT);IRQCount=IRQLatch;}
-     if(acount>=342) goto doagainbub;
+     if(acount>=LCYCS) goto doagainbub;
     }
  }
 }