// Allows writes to the ROM memory for hacking
void gbaWriteMemory(u32 addr, u32 value) {
	if (addr<0x8000000 || addr>=0xD000000) CPUWriteMemory(addr, value);
#ifndef USE_VM
	else WRITE32LE(((u16 *)&rom[addr&0x1FFFFFC]), value);
#endif
}
Example #2
0
int LoadDotCodeData(int size, u32* DCdata, unsigned long MEM1, unsigned long MEM2, int loadraw)
{
	u32 temp1;
	int i,j;

	unsigned char scanmap[28];
	int scantotal=0;

	for(i=0;i<28;i++)
		scanmap[i] = 0;

	unsigned char longdotcodescan[28] = {
		0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
		0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
		0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
		0xF1, 0xF2, 0xB1, 0xB1
	};
	unsigned char shortdotcodescan[18] = {
		0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
		0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
		0xF1, 0xF1, 0xF1, 0xF2, 0xB1, 0xB1
	};

	temp1 = CPUReadMemory(MEM1-4);
	for(i=0;i<0x60;i+=4)
		CPUWriteMemory((MEM2-8)+i,0);
	for(i=0;i<0x1860;i+=4)
		CPUWriteMemory(temp1+i,0);
	if(DCdata != NULL)
	{
		if(size==0xB60)
		{
			for(i=0;i<28;i++)
			{
				for(j=0,scantotal=0;j<0x68;j+=4)
				{
					scantotal += DCdata[((i*0x68)+j)>>2];
				}
				if(scantotal)
					scanmap[i] = longdotcodescan[i];
			}
			for(i=0;i<size;i+=4)
			{
				CPUWriteMemory(temp1+i+0x9C0,DCdata[i>>2]);
			}
		}
		else if (size==0x750)
		{
			for(i=0;i<18;i++)
			{
				if((DCdata[0] == 0x02011394) && (DCdata[1] == 0x0203E110) && (i == 0))
					continue;
				for(j=0,scantotal=0;j<0x68;j+=4)
				{
					scantotal += DCdata[((i*0x68)+j)>>2];
				}
				if(scantotal)
					scanmap[i] = longdotcodescan[i];
			}
			for(i=0;i<size;i+=4)
			{
				CPUWriteMemory(temp1+i,DCdata[i>>2]);
			}
		}
	}
Example #3
0
int cheatsCheckKeys()
{
  u32 extended = 0; //0 bis ich es verstehe
  bool onoff = true;
  int ticks = 0;
  int i;
  mastercode = 0;

  for (i = 0; i<4; i++)
    if (rompatch2addr [i] != 0) {
      CHEAT_PATCH_ROM_16BIT(rompatch2addr [i],rompatch2oldval [i]);
      rompatch2addr [i] = 0;
    }

  for (i = 0; i < cheatsNumber; i++) {
    if(!cheatsList[i].enabled) {
      // make sure we skip other lines in this code
      i += getCodeLength(i)-1;
      continue;
    }
    switch(cheatsList[i].size) {
    case GSA_CODES_ON:
      onoff = true;
      break;
    case GSA_SLOWDOWN:
      // check if button was pressed and released, if so toggle our state
      if((cheatsList[i].status & 4) && !(extended & 4))
        cheatsList[i].status ^= 1;
      if(extended & 4)
        cheatsList[i].status |= 4;
      else
        cheatsList[i].status &= ~4;
      
      if(cheatsList[i].status & 1)
        ticks += ((cheatsList[i].value  & 0xFFFF) * 7);
      break;
    case GSA_8_BIT_SLIDE:
      i++;
      if(i < cheatsNumber) {
        u32 addr = cheatsList[i-1].value;
        u8 value = cheatsList[i].rawaddress;
        int vinc = (cheatsList[i].value >> 24) & 255;
        int count = (cheatsList[i].value >> 16) & 255;
        int ainc = (cheatsList[i].value & 0xffff);
        while(count > 0) {
          CPUWriteByte(addr, value);
          value += vinc;
          addr += ainc;
          count--;
        }
      }
      break;
    case GSA_16_BIT_SLIDE:
      i++;
      if(i < cheatsNumber) {
        u32 addr = cheatsList[i-1].value;
        u16 value = cheatsList[i].rawaddress;
        int vinc = (cheatsList[i].value >> 24) & 255;
        int count = (cheatsList[i].value >> 16) & 255;
        int ainc = (cheatsList[i].value & 0xffff)*2;
        while(count > 0) {
          CPUWriteHalfWord(addr, value);
          value += vinc;
          addr += ainc;
          count--;
        }
      }
      break;
    case GSA_32_BIT_SLIDE:
      i++;
      if(i < cheatsNumber) {
        u32 addr = cheatsList[i-1].value;
        u32 value = cheatsList[i].rawaddress;
        int vinc = (cheatsList[i].value >> 24) & 255;
        int count = (cheatsList[i].value >> 16) & 255;
        int ainc = (cheatsList[i].value & 0xffff)*4;
        while(count > 0) {
          CPUWriteMemory(addr, value);
          value += vinc;
          addr += ainc;
          count--;
        }
      }