merge mappers from FCEU-mm
[fceu.git] / boards / KS7032.c
similarity index 78%
rename from boards/ks7032.c
rename to boards/KS7032.c
index fcb0eb5..c93fc15 100644 (file)
  *\r
  * You should have received a copy of the GNU General Public License\r
  * along with this program; if not, write to the Free Software\r
  *\r
  * You should have received a copy of the GNU General Public License\r
  * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+ *\r
+ * FDS Conversion\r
+ *\r
  */\r
 \r
 #include "mapinc.h"\r
 \r
  */\r
 \r
 #include "mapinc.h"\r
 \r
-static uint8 reg[8], cmd, IRQa;\r
+static uint8 reg[8], cmd, IRQa = 0, isirqused = 0;\r
 static int32 IRQCount;\r
 \r
 static SFORMAT StateRegs[]=\r
 static int32 IRQCount;\r
 \r
 static SFORMAT StateRegs[]=\r
@@ -45,20 +48,20 @@ static void Sync(void)
 static DECLFW(UNLKS7032Write)\r
 {\r
 //  FCEU_printf("bs %04x %02x\n",A,V);\r
 static DECLFW(UNLKS7032Write)\r
 {\r
 //  FCEU_printf("bs %04x %02x\n",A,V);\r
-  switch(A)\r
+  switch(A&0xF000)\r
   {\r
 //    case 0x8FFF: reg[4]=V; Sync(); break;\r
   {\r
 //    case 0x8FFF: reg[4]=V; Sync(); break;\r
-    case 0x8000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x000F)|(V&0x0F); break;\r
-    case 0x9000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x00F0)|((V&0x0F)<<4); break;\r
-    case 0xA000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x0F00)|((V&0x0F)<<8); break;\r
-    case 0xB000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0xF000)|(V<<12); break;\r
-    case 0xC000: X6502_IRQEnd(FCEU_IQEXT); IRQa=1; break;\r
+    case 0x8000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x000F)|(V&0x0F); isirqused = 1; break;\r
+    case 0x9000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x00F0)|((V&0x0F)<<4); isirqused = 1; break;\r
+    case 0xA000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x0F00)|((V&0x0F)<<8); isirqused = 1; break;\r
+    case 0xB000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0xF000)|(V<<12); isirqused = 1; break;\r
+    case 0xC000: if(isirqused) { X6502_IRQEnd(FCEU_IQEXT); IRQa=1; } break;\r
     case 0xE000: cmd=V&7; break;\r
     case 0xF000: reg[cmd]=V; Sync(); break;\r
   }\r
 }\r
 \r
     case 0xE000: cmd=V&7; break;\r
     case 0xF000: reg[cmd]=V; Sync(); break;\r
   }\r
 }\r
 \r
-static void UNLSMB2JIRQHook(int a)\r
+static void FP_FASTAPASS(1) UNLSMB2JIRQHook(int a)\r
 {\r
   if(IRQa)\r
   {\r
 {\r
   if(IRQa)\r
   {\r