MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / handle_extended_t

Method handle_extended_t

pcsx2/Patch.cpp:1225–1705  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1223template <typename Memory>
1224 requires std::is_base_of_v<MemoryInterface, Memory>
1225void Patch::handle_extended_t(const PatchCommand* p, Memory& memory, ExtendedState& state)
1226{
1227 if (state.skip_count > 0)
1228 {
1229 state.skip_count--;
1230 }
1231 else
1232 switch (state.prev_cheat_type)
1233 {
1234 case 0x3040: // vvvvvvvv 00000000 Inc
1235 {
1236 u32 mem = memory.Read32(state.prev_cheat_addr);
1237 memory.Write32(state.prev_cheat_addr, mem + (p->addr));
1238 state.prev_cheat_type = 0;
1239 break;
1240 }
1241
1242 case 0x3050: // vvvvvvvv 00000000 Dec
1243 {
1244 u32 mem = memory.Read32(state.prev_cheat_addr);
1245 memory.Write32(state.prev_cheat_addr, mem - (p->addr));
1246 state.prev_cheat_type = 0;
1247 break;
1248 }
1249
1250 case 0x4000: // vvvvvvvv iiiiiiii
1251 for (u32 i = 0; i < state.iteration_count; i++)
1252 {
1253 memory.IdempotentWrite32((u32)(state.prev_cheat_addr + (i * state.iteration_increment)), (u32)(p->addr + ((u32)p->data * i)));
1254 }
1255 state.prev_cheat_type = 0;
1256 break;
1257
1258 case 0x5000: // bbbbbbbb 00000000
1259 for (u32 i = 0; i < state.iteration_count; i++)
1260 {
1261 u8 mem = memory.Read8(state.prev_cheat_addr + i);
1262 memory.IdempotentWrite8((p->addr + i) & 0x0FFFFFFF, mem);
1263 }
1264 state.prev_cheat_type = 0;
1265 break;
1266
1267 case 0x6000: // 000Xnnnn iiiiiiii
1268 {
1269 state.null_pointer_encountered = false;
1270
1271 // Get Number of pointers
1272 if (((u32)p->addr & 0x0000FFFF) == 0)
1273 state.iteration_count = 1;
1274 else
1275 state.iteration_count = (u32)p->addr & 0x0000FFFF;
1276
1277 // Read first pointer
1278 state.last_type = ((u32)p->addr & 0x000F0000) >> 16;
1279 u32 mem = memory.Read32(state.prev_cheat_addr);
1280 if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) == 0)
1281 state.null_pointer_encountered = true;
1282

Callers

nothing calls this directly

Calls 9

IdempotentWrite32Method · 0.80
IdempotentWrite8Method · 0.80
IdempotentWrite16Method · 0.80
Read32Method · 0.45
Write32Method · 0.45
Read8Method · 0.45
Write8Method · 0.45
Read16Method · 0.45
Write16Method · 0.45

Tested by

no test coverage detected