X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=mappers%2F189.c;h=68df5b5d75e0a802f8f4392e29238acd9021978b;hp=bdcf4b749c66b680312cbe368aca8aa24cab6c6a;hb=d97315ac0bca825d2d50a44453bc5652946e2c67;hpb=890e37ba2b8ea1c7593dc05926d7431e3bd00bfb diff --git a/mappers/189.c b/mappers/189.c index bdcf4b7..68df5b5 100644 --- a/mappers/189.c +++ b/mappers/189.c @@ -8,31 +8,45 @@ #define cmd mapbyte1[0] static DECLFW(Mapper189_write) { - if(A==0x4120) - { - ROM_BANK32(V>>4); - X6502_Rebase(); - } + //if(A>=0xc000) printf("$%04x:$%02x\n",A,V); + if((A&0xF100)==0x4100) ROM_BANK32(V>>4); + else if((A&0xF100)==0x6100) ROM_BANK32(V&3); else switch(A&0xE001) { case 0xa000:MIRROR_SET(V&1);break; case 0x8000:cmd=V;break; case 0x8001:switch(cmd&7) - { - case 0:VROM_BANK2(0x0000,V>>1);break; - case 1:VROM_BANK2(0x0800,V>>1);break; - case 2:VROM_BANK1(0x1000,V);break; + { + case 0:VROM_BANK2(0x0000,V>>1);break; + case 1:VROM_BANK2(0x0800,V>>1);break; + case 2:VROM_BANK1(0x1000,V);break; case 3:VROM_BANK1(0x1400,V);break; case 4:VROM_BANK1(0x1800,V);break; case 5:VROM_BANK1(0x1C00,V);break; - } - break; + } + case 0xc000:IRQLatch=V;break; + case 0xc001:IRQCount=IRQLatch;break; + case 0xe000:IRQa=0;X6502_IRQEnd(FCEU_IQEXT);break; + case 0xe001:IRQa=1;break; + break; } } +void m189irq(void) +{ + if(IRQa) + { + if(IRQCount) + { + IRQCount--; + if(!IRQCount) X6502_IRQBegin(FCEU_IQEXT); + } + } +} void Mapper189_init(void) { + GameHBIRQHook=m189irq; SetWriteHandler(0x4120,0xFFFF,Mapper189_write); SetReadHandler(0x6000,0x7FFF,0); ROM_BANK32(0);