From 721224306c0fe2f7d9494387376bf5394966dadb Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 27 Nov 2017 13:12:48 -0800 Subject: [PATCH] GBA Cheats: More fixes --- src/gba/cheats/parv3.c | 9 ++++++++- src/gba/test/cheats.c | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gba/cheats/parv3.c b/src/gba/cheats/parv3.c index 979e60b40..a49333568 100644 --- a/src/gba/cheats/parv3.c +++ b/src/gba/cheats/parv3.c @@ -250,8 +250,15 @@ bool GBACheatAddProActionReplayRaw(struct GBACheatSet* cheats, uint32_t op1, uin if (cheats->incompleteCheat != COMPLETE) { struct mCheat* incompleteCheat = mCheatListGetPointer(&cheats->d.list, cheats->incompleteCheat); incompleteCheat->operand = op1 & (0xFFFFFFFFU >> ((4 - incompleteCheat->width) * 8)); + if (cheats->incompleteCheat > 0) { + struct mCheat* lastCheat = mCheatListGetPointer(&cheats->d.list, cheats->incompleteCheat - 1); + if (lastCheat->type == CHEAT_IF_BUTTON) { + cheats->incompleteCheat = COMPLETE; + return true; + } + } incompleteCheat->operandOffset = op2 >> 24; - incompleteCheat->repeat = ((op2 >> 16) & 0xFF) + 1; + incompleteCheat->repeat = (op2 >> 16) & 0xFF; incompleteCheat->addressOffset = (op2 & 0xFFFF) * incompleteCheat->width; cheats->incompleteCheat = COMPLETE; return true; diff --git a/src/gba/test/cheats.c b/src/gba/test/cheats.c index 08c8b1b82..a18e77c5e 100644 --- a/src/gba/test/cheats.c +++ b/src/gba/test/cheats.c @@ -1037,9 +1037,12 @@ M_TEST_DEFINE(doPARv3IfButton) { mCheatPressButton(device, true); mCheatRefresh(device, set); - assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); mCheatPressButton(device, false); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + core->rawWrite8(core, 0x03000000, -1, 0); mCheatRefresh(device, set); assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);