static DECLFW(UNLSL1632CMDWrite) { if(A==0xA131) { bbrk=V; } if(bbrk&2) { FixMMC3PRG(MMC3_cmd); FixMMC3CHR(MMC3_cmd); if(A<0xC000) MMC3_CMDWrite(A,V); else MMC3_IRQWrite(A,V); } else { if((A>=0xB000)&&(A<=0xE003)) { int ind=((((A&2)|(A>>10))>>1)+2)&7; int sar=((A&1)<<2); chrcmd[ind]=(chrcmd[ind]&(0xF0>>sar))|((V&0x0F)<<sar); } else switch(A&0xF003)
static DECLFW(M199Write) { if ((A == 0x8001) && (MMC3_cmd & 8)) { EXPREGS[MMC3_cmd & 3] = V; FixMMC3PRG(MMC3_cmd); FixMMC3CHR(MMC3_cmd); } else if (A < 0xC000) MMC3_CMDWrite(A, V); else MMC3_IRQWrite(A, V); }
static DECLFW(BMC8IN1Write) { if(A & 0x1000) { EXPREGS[0] = V; FixMMC3PRG(MMC3_cmd); FixMMC3CHR(MMC3_cmd); } else { if(A < 0xC000) MMC3_CMDWrite(A, V); else MMC3_IRQWrite(A, V); } }
static DECLFW(M199Write) { if((A==0x8001)&&(MMC3_cmd&8)) { // FCEU_printf("%02x=>%02x\n",MMC3_cmd,V); EXPREGS[MMC3_cmd&3]=V; FixMMC3PRG(MMC3_cmd); FixMMC3CHR(MMC3_cmd); } else if(A<0xC000) MMC3_CMDWrite(A,V); else MMC3_IRQWrite(A,V); }
static DECLFW(BMCFK23CHiWrite) { if(EXPREGS[0]&0x40) { if(EXPREGS[0]&0x30) unromchr=0; else { unromchr=V&3; FixMMC3CHR(MMC3_cmd); } } else { if((A==0x8001)&&(EXPREGS[3]&2)&&(MMC3_cmd&8)) { EXPREGS[4|(MMC3_cmd&3)]=V; FixMMC3PRG(MMC3_cmd); FixMMC3CHR(MMC3_cmd); } else if(A<0xC000) { if(UNIFchrrama) { // hacky... strange behaviour, must be bit scramble due to pcb layot restrictions // check if it not interfer with other dumps if((A==0x8000)&&(V==0x46)) V=0x47; else if((A==0x8000)&&(V==0x47)) V=0x46; } MMC3_CMDWrite(A,V); FixMMC3PRG(MMC3_cmd); } else MMC3_IRQWrite(A,V); } }