updated bords/mappers/stuff to 0.98.15, lots of them got broken, asmcore support...
[fceu.git] / mappers / 21.c
index ba20a86..8d60d4c 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
@@ -28,24 +28,20 @@ static int acount=0;
 
 DECLFW(Mapper21_write)
 {
-       A|=((A>>5)&0xF);
+        A|=((A>>5)&0xF);
 
-       if((A&0xF000)==0xA000)
-       {
-         ROM_BANK8(0xA000,V);
-          X6502_Rebase();
-       }
-       else if((A&0xF000)==0x8000)
-       {
+        if((A&0xF000)==0xA000)
+          ROM_BANK8(0xA000,V);
+        else if((A&0xF000)==0x8000)
+        {
          if(K4sel&2)
           ROM_BANK8(0xC000,V);
          else
           ROM_BANK8(0x8000,V);
-         X6502_Rebase();
-       }
-       else if(A>=0xb000 && A<=0xefff)
-       {
-         A&=0xF006;
+         }
+        else if(A>=0xb000 && A<=0xefff)
+        {
+          A&=0xF006;
           {
            int x=((A>>2)&1)|((A-0xB000)>>11);
 
@@ -54,47 +50,50 @@ DECLFW(Mapper21_write)
            VROM_BANK1(x<<10,K4buf[x]);
           }
 
-       }
-       else switch(A&0xF006)
+        }
+        else switch(A&0xF006)
         {
-        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 0x9006:
-        case 0x9004:
-        case 0x9002: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 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 0x9006:
+         case 0x9004:
+         case 0x9002: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 0xf004:IRQCount=IRQLatch;
-                    IRQa=V&2;K4IRQ=V&1;break;
-        case 0xf006:IRQa=K4IRQ;break;
+         case 0xf004:IRQCount=IRQLatch;acount=0;
+                     IRQa=V&2;K4IRQ=V&1;
+                     X6502_IRQEnd(FCEU_IQEXT);
+                     break;
+         case 0xf006:IRQa=K4IRQ;X6502_IRQEnd(FCEU_IQEXT);break;
  }
 }
 static void FP_FASTAPASS(1) KonamiIRQHook(int a)
 {
-  #define LCYCS 114
+  #define LCYCS ((227*2)+1)
+  //#define LCYCS 341
   if(IRQa)
-   {
-    acount+=a;
+  {
+//    acount+=a*3;
+    acount+=a*4;
     if(acount>=LCYCS)
     {
      doagainbub:acount-=LCYCS;IRQCount++;
-     if(IRQCount&0x100) {TriggerIRQ();IRQCount=IRQLatch;}
+     if(IRQCount&0x100) {X6502_IRQBegin(FCEU_IQEXT);IRQCount=IRQLatch;}
      if(acount>=LCYCS) goto doagainbub;
     }
  }