-#include "mapinc.h"\r
-\r
-static uint32 regchr[9];\r
-\r
-static DECLFW(Mapper27_write)\r
-{\r
- A&=0xF00F;\r
- int regnum;\r
- if((A>=0xB000) && (A<=0xE003)) {\r
- regnum=((((A>>12)+1)&0x03)<<1)|((A&0x02)>>1);\r
- if(A&1)\r
- regchr[regnum]=(regchr[regnum]&0x0F)|(V<<4);\r
- else\r
- regchr[regnum]=(regchr[regnum]&0xFF0)|(V&0xF);\r
- VROM_BANK1(regnum<<10,regchr[regnum]);\r
- }\r
- switch(A)\r
- {\r
- case 0x8000: if(regchr[8]&2)\r
- ROM_BANK8(0xc000,V);\r
- else\r
- ROM_BANK8(0x8000,V);\r
- break;\r
- case 0xA000: ROM_BANK8(0xa000,V); break;\r
- case 0x9000:\r
- switch(V&3){\r
- case 0:setmirror(MI_V);break;\r
- case 1:setmirror(MI_H);break;\r
- case 2:setmirror(MI_0);break;\r
- case 3:setmirror(MI_1);break;\r
- }\r
- case 0x9002: regchr[8]=V; break;\r
- case 0xF000: //X6502_IRQEnd(FCEU_IQEXT);\r
- IRQLatch=(IRQLatch&0xF0)|(V&0x0F);\r
- break;\r
- case 0xF001: //X6502_IRQEnd(FCEU_IQEXT);\r
- IRQLatch=(IRQLatch&0x0F)|((V&0xF)<<4);\r
- break;\r
- case 0xF003: IRQa=((IRQa&0x1)<<1)|(IRQa&0x1);\r
- X6502_IRQEnd(FCEU_IQEXT);\r
- break;\r
- case 0xF002: IRQa=V&3;\r
- if(IRQa&0x02) IRQCount=IRQLatch;\r
- X6502_IRQEnd(FCEU_IQEXT);\r
- break;\r
- }\r
-// if((A&0xF000)==0xF000) FCEU_printf("$%04x:$%02x, %d\n",A,V, scanline);\r
-}\r
-\r
-static void Mapper27_hb(void)\r
-{\r
-// FCEU_printf("%02x-%d,%d,%d\n",scanline,IRQa,IRQCount,IRQLatch);\r
- if(IRQa&0x2){\r
- if(IRQCount==0xFF){\r
- X6502_IRQBegin(FCEU_IQEXT);\r
- IRQCount=IRQLatch+1;\r
- } else {\r
- IRQCount++;\r
- }\r
- }\r
-}\r
-\r
-void Mapper27_init(void)\r
-{\r
- int i;\r
- for (i=0; i<9; i++) {\r
- regchr[i]=0;\r
- }\r
- IRQa=0;\r
- IRQCount=IRQLatch=0;\r
- SetWriteHandler(0x8000,0xffff,Mapper27_write);\r
- GameHBIRQHook=Mapper27_hb;\r
-}\r
-\r
+#include "mapinc.h"
+
+static uint32 regchr[9];
+
+static DECLFW(Mapper27_write)
+{
+ A&=0xF00F;
+ int regnum;
+ if((A>=0xB000) && (A<=0xE003)) {
+ regnum=((((A>>12)+1)&0x03)<<1)|((A&0x02)>>1);
+ if(A&1)
+ regchr[regnum]=(regchr[regnum]&0x0F)|(V<<4);
+ else
+ regchr[regnum]=(regchr[regnum]&0xFF0)|(V&0xF);
+ VROM_BANK1(regnum<<10,regchr[regnum]);
+ }
+ switch(A)
+ {
+ case 0x8000: if(regchr[8]&2)
+ ROM_BANK8(0xc000,V);
+ else
+ ROM_BANK8(0x8000,V);
+ break;
+ case 0xA000: ROM_BANK8(0xa000,V); break;
+ case 0x9000:
+ switch(V&3){
+ case 0:setmirror(MI_V);break;
+ case 1:setmirror(MI_H);break;
+ case 2:setmirror(MI_0);break;
+ case 3:setmirror(MI_1);break;
+ }
+ case 0x9002: regchr[8]=V; break;
+ case 0xF000: //X6502_IRQEnd(FCEU_IQEXT);
+ IRQLatch=(IRQLatch&0xF0)|(V&0x0F);
+ break;
+ case 0xF001: //X6502_IRQEnd(FCEU_IQEXT);
+ IRQLatch=(IRQLatch&0x0F)|((V&0xF)<<4);
+ break;
+ case 0xF003: IRQa=((IRQa&0x1)<<1)|(IRQa&0x1);
+ X6502_IRQEnd(FCEU_IQEXT);
+ break;
+ case 0xF002: IRQa=V&3;
+ if(IRQa&0x02) IRQCount=IRQLatch;
+ X6502_IRQEnd(FCEU_IQEXT);
+ break;
+ }
+// if((A&0xF000)==0xF000) FCEU_printf("$%04x:$%02x, %d\n",A,V, scanline);
+}
+
+static void Mapper27_hb(void)
+{
+// FCEU_printf("%02x-%d,%d,%d\n",scanline,IRQa,IRQCount,IRQLatch);
+ if(IRQa&0x2){
+ if(IRQCount==0xFF){
+ X6502_IRQBegin(FCEU_IQEXT);
+ IRQCount=IRQLatch+1;
+ } else {
+ IRQCount++;
+ }
+ }
+}
+
+void Mapper27_init(void)
+{
+ int i;
+ for (i=0; i<9; i++) {
+ regchr[i]=0;
+ }
+ IRQa=0;
+ IRQCount=IRQLatch=0;
+ SetWriteHandler(0x8000,0xffff,Mapper27_write);
+ GameHBIRQHook=Mapper27_hb;
+}
+