updated bords/mappers/stuff to 0.98.15, lots of them got broken, asmcore support...
[fceu.git] / mappers / 25.c
index 0735b9b..f8c1d73 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
 #define K4IRQ mapbyte1[1]
 #define K4sel mapbyte1[0]
 
-DECLFW(Mapper25_write)
+static int acount=0;
+static DECLFW(Mapper25_write)
 {
-       A=(A&0xF003)|((A&0xC)>>2);
+        A=(A&0xF003)|((A&0xC)>>2);
 
-       if((A&0xF000)==0xA000)
-       {
-         ROM_BANK8(0xA000,V);
-          X6502_Rebase();
-       }
-       else if(A>=0xB000 && A<=0xEFFF)
-       {
+        if((A&0xF000)==0xA000)
+          ROM_BANK8(0xA000,V);
+        else if(A>=0xB000 && A<=0xEFFF)
+        {
          int x=(A&1)|((A-0xB000)>>11);
 
          K4buf[x]&=(0xF0)>>((A&2)<<1);
          K4buf[x]|=(V&0xF)<<((A&2)<<1);
          VROM_BANK1(x<<10,K4buf[x]);
-       }
-       else if((A&0xF000)==0x8000)
-       {
+        }
+        else if((A&0xF000)==0x8000)
+        {
          if(K4sel&2)
           ROM_BANK8(0xC000,V);
          else
           ROM_BANK8(0x8000,V);
-         X6502_Rebase();
-       }
-       else switch(A)
-       {
-        case 0x9000: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 0x9001:if((K4sel&2)!=(V&2))
-                    {
-                     uint8 swa;
-                     swa=PRGBankList[0];
-                     ROM_BANK8(0x8000,PRGBankList[2]);
-                     ROM_BANK8(0xc000,swa);
-                      X6502_Rebase();
-                    }
-                    K4sel=V;
-                    break;
-       case 0xf000:IRQLatch&=0xF0;IRQLatch|=V&0xF;break;
-       case 0xf002:IRQLatch&=0x0F;IRQLatch|=V<<4;break;
-       case 0xf001:IRQCount=IRQLatch;IRQa=V&2;K4IRQ=V&1;break;
-       case 0xf003:IRQa=K4IRQ;break;
+        }
+        else switch(A)
+        {
+         case 0x9000: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 0x9001:if((K4sel&2)!=(V&2))
+                     {
+                           uint8 swa;
+                      swa=PRGBankList[0];
+                       ROM_BANK8(0x8000,PRGBankList[2]);
+                      ROM_BANK8(0xc000,swa);
+                     }
+                     K4sel=V;
+                     break;
+        case 0xf000:IRQLatch&=0xF0;IRQLatch|=V&0xF;break;
+        case 0xf002:IRQLatch&=0x0F;IRQLatch|=V<<4;break;
+        case 0xf001:IRQCount=IRQLatch;IRQa=V&2;K4IRQ=V&1;acount=0;X6502_IRQEnd(FCEU_IQEXT);break;
+        case 0xf003:IRQa=K4IRQ;X6502_IRQEnd(FCEU_IQEXT);break;
  }
 }
 
 static void FP_FASTAPASS(1) KonamiIRQHook(int a)
 {
-  static int count=0;
-  #define LCYCS 114
+//  #define LCYCS ((227*2))
+  #define LCYCS 341
   if(IRQa)
   {
-   count+=a;
-   if(count>=LCYCS)
+   acount+=a*3;
+  // acount+=a*4;
+   if(acount>=LCYCS)
    {
-    doagainbub:count-=LCYCS;IRQCount++;
-    if(IRQCount&0x100) {count=0;TriggerIRQ();IRQCount=IRQLatch;}
-    if(count>=LCYCS) goto doagainbub;
+    doagainbub:acount-=LCYCS;IRQCount++;
+    if(IRQCount&0x100)
+    {//acount=0;
+     X6502_IRQBegin(FCEU_IQEXT);IRQCount=IRQLatch;
+        }
+    if(acount>=LCYCS) goto doagainbub;
    }
  }
 }