X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=mappers%2F215.c;fp=mappers%2F215.c;h=772691c256167bcbd35da07969a91ec74a091994;hp=0000000000000000000000000000000000000000;hb=d97315ac0bca825d2d50a44453bc5652946e2c67;hpb=890e37ba2b8ea1c7593dc05926d7431e3bd00bfb diff --git a/mappers/215.c b/mappers/215.c new file mode 100644 index 0000000..772691c --- /dev/null +++ b/mappers/215.c @@ -0,0 +1,96 @@ +/* +#include "mapinc.h" + +static uint8 cmdin; +static uint8 cmd; +static uint8 regs[8]; +static uint8 master,chrm; + +static void DoPRG215(void) +{ + if(master&0x80) + { + setprg16(0x8000,master&0x1F); + setprg16(0xc000,master&0x1F); + } + else + { + setprg8(0x8000,regs[4]); 6 + setprg8(0xA000,regs[6]); 7 0, 2, 5, 3, 6, 1, 7, 4 + setprg8(0xC000,~1); + setprg8(0xE000,~0); + } + +} + +static void DoCHR215(void) +{ + uint32 base=(cmd&0x80)<<5; + int orie=(chrm&0x4)<<6; + + setchr2(0x0000^base,(orie|regs[0])>>1); 0 + setchr2(0x0800^base,(orie|regs[5])>>1); 1 + + setchr1(0x1000,orie|regs[1]); 2 + setchr1(0x1400,orie|regs[3]); 3 + setchr1(0x1800,orie|regs[7]); 4 + setchr1(0x1c00,orie|regs[2]); 5 +} + +static DECLFW(Write215_write) +{ + switch(A&0xF001) + { + case 0xF001:IRQCount=V+2;break; + case 0xF000:X6502_IRQEnd(FCEU_IQEXT);break; + } + if(A==0x5000) + { + master=V; + DoPRG215(); +// DoCHR215(); + } + else if(A==0x5001) + { + chrm=V; + DoCHR215(); + } + else + switch(A&0xE001) + { + case 0xC000:setmirror(((V|(V>>7))&1)^1);break; + case 0xa000:cmd=V;cmdin=1;DoCHR215();break; + case 0x8001:if(!cmdin) break; + regs[cmd&7]=V; + DoPRG215(); + DoCHR215(); + cmdin=0; + break; + } +} + +static void hooko215(void) +{ + if(IRQCount) + { + IRQCount--; + if(!IRQCount) + { + X6502_IRQBegin(FCEU_IQEXT); + } + } +} + +void Mapper215_init(void) +{ + int x; + for(x=0;x<8;x++) regs[x]=0; + master=chrm=cmd=cmdin=IRQCount=0; + GameHBIRQHook=hooko215; + SetReadHandler(0x8000,0xFFFF,CartBR); + SetWriteHandler(0x5000,0xFFFF,Write215_write); + DoPRG215(); + DoCHR215(); +} + +*/