static DECLFW(M121Write) { // FCEU_printf("write: %04x:%04x\n",A&0xE003,V); if((A&0xF003)==0x8003) { // FCEU_printf(" prot write"); // FCEU_printf("write: %04x:%04x\n",A,V); if (V==0xAB) setprg8(0xE000,7); else if(V==0x26) setprg8(0xE000,8); // else if(V==0x26) setprg8(0xE000,1); // MK3 // else if(V==0x26) setprg8(0xE000,0x15); // sonic 3D blast, 8003 - command (0x26), 8001 - data 0x2A (<<1 = 0x15) else if(V==0xFF) setprg8(0xE000,9); else if(V==0x28) setprg8(0xC000,0xC); else if(V==0xEC) setprg8(0xE000,0xD); // else if(V==0xEC) setprg8(0xE000,0xC);//MK3 else if(V==0xEF) setprg8(0xE000,0xD); // damn mess, need real hardware to figure out bankswitching else if(V==0x2A) setprg8(0xA000,0x0E); // else if(V==0x2A) setprg8(0xE000,0x0C); // MK3 else if(V==0x20) setprg8(0xE000,0x13); else if(V==0x29) setprg8(0xE000,0x1B); else { // FCEU_printf(" unknown"); FixMMC3PRG(MMC3_cmd); MMC3_CMDWrite(A,V); } // FCEU_printf("\n"); } else { // FixMMC3PRG(MMC3_cmd); MMC3_CMDWrite(A,V); } }
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); } }