X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=mappers%2F21.c;h=8d60d4c21e8fd7e8bd850ad3215900a06b09a059;hp=bda50a520670485ac376214be0acc5273da67f6d;hb=d97315ac0bca825d2d50a44453bc5652946e2c67;hpb=c62d28102c77e19c291c78bf6bf7f0a81abd54b9 diff --git a/mappers/21.c b/mappers/21.c index bda50a5..8d60d4c 100644 --- a/mappers/21.c +++ b/mappers/21.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 @@ -28,20 +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); - 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); - } - else if(A>=0xb000 && A<=0xefff) - { - A&=0xF006; + } + else if(A>=0xb000 && A<=0xefff) + { + A&=0xF006; { int x=((A>>2)&1)|((A-0xB000)>>11); @@ -49,47 +49,51 @@ DECLFW(Mapper21_write) K4buf[x]|=(V&0xF)<<((A&2)<<1); 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); - } - 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; } }