X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=mappers%2F25.c;h=f8c1d73a0b9c2a987f000e10c9ded57312ffddf7;hp=0735b9b097a48ae679f1418924936acdfd42ccb9;hb=d97315ac0bca825d2d50a44453bc5652946e2c67;hpb=890e37ba2b8ea1c7593dc05926d7431e3bd00bfb diff --git a/mappers/25.c b/mappers/25.c index 0735b9b..f8c1d73 100644 --- a/mappers/25.c +++ b/mappers/25.c @@ -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 @@ -24,70 +24,70 @@ #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; } } }