// 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 }
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]); } } }
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--; } }