Ejemplo n.º 1
0
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);
  }
}
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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);
    }
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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);
  }
}