u32 HarryPotter5Input(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); // Wand cursor, normally controlled by DPad, now controlled by Wiimote! int cx = 0; int cy = 0; static int oldcx = 0; static int oldcy = 0; u8 WandOut = CPUReadByte(0x200e0dd); if (WandOut && CursorValid) { cx = (CursorX * 268)/640; cy = (CursorY * 187)/480; if (cx<0x14) cx=0x14; else if (cx>0xf8) cx=0xf8; if (cy<0x13) cy=0x13; else if (cy>0xa8) cy=0xa8; CPUWriteByte(0x200e0fe, cx); CPUWriteByte(0x200e102, cy); } oldcx = cx; oldcy = cy; // DPad works in the map if (wp->btns_h & WPAD_BUTTON_RIGHT) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_BUTTON_LEFT) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_BUTTON_UP) J |= VBA_UP; if (wp->btns_h & WPAD_BUTTON_DOWN) J |= VBA_DOWN; // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Map (actually objectives) if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // talk or interact if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // spells if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // Run (uses emulator speed button) if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) J |= VBA_SPEED; // CAKTODO spell gestures #endif return J; }
void gbaWriteByte(u32 addr, u8 value) { if (addr<0x8000000 || addr>=0xD000000) CPUWriteByte(addr, value); #ifndef USE_VM else rom[addr & 0x1FFFFFF] = value; #endif }
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--; } }