From 210832c61854862c2c23b9255a1dd644f768496a Mon Sep 17 00:00:00 2001 From: LegendOfDragoon Date: Thu, 2 Jun 2016 20:54:52 -0700 Subject: [PATCH 1/2] Improve alist_polef This change fixes Body Harvest. --- Source/Android/PluginRSP/alist.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Android/PluginRSP/alist.cpp b/Source/Android/PluginRSP/alist.cpp index 06817e31a..3bf003726 100644 --- a/Source/Android/PluginRSP/alist.cpp +++ b/Source/Android/PluginRSP/alist.cpp @@ -868,6 +868,7 @@ void alist_polef(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t unsigned i; int16_t l1, l2; int16_t h2_before[8]; + int32_t state[2]; count = align(count, 16); @@ -875,9 +876,11 @@ void alist_polef(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t { l1 = 0; l2 = 0; + state[0] = 0; } else { + state[0] = *dram_u32(hle, address); l1 = *dram_u16(hle, address + 4); l2 = *dram_u16(hle, address + 6); } @@ -911,7 +914,8 @@ void alist_polef(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t count -= 16; } while (count != 0); - dram_store_u16(hle, (uint16_t*)(dst - 4), address, 4); + state[1] = (l1 << 16) + l2; + dram_store_u32(hle, (uint32_t*)(state), address, 2); } void alist_iirf(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t count, int16_t* table, uint32_t address) From c06ad3a276729e2fccc0523964271157f65fee2c Mon Sep 17 00:00:00 2001 From: LegendOfDragoon Date: Thu, 2 Jun 2016 22:55:44 -0700 Subject: [PATCH 2/2] Fix a mistake with previous commit I double checked and realized that the doc I read was not consistent with the RSP microcode. It should be good now. --- Source/Android/PluginRSP/alist.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Source/Android/PluginRSP/alist.cpp b/Source/Android/PluginRSP/alist.cpp index 3bf003726..6318cc54d 100644 --- a/Source/Android/PluginRSP/alist.cpp +++ b/Source/Android/PluginRSP/alist.cpp @@ -868,7 +868,6 @@ void alist_polef(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t unsigned i; int16_t l1, l2; int16_t h2_before[8]; - int32_t state[2]; count = align(count, 16); @@ -876,11 +875,9 @@ void alist_polef(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t { l1 = 0; l2 = 0; - state[0] = 0; } else { - state[0] = *dram_u32(hle, address); l1 = *dram_u16(hle, address + 4); l2 = *dram_u16(hle, address + 6); } @@ -914,8 +911,7 @@ void alist_polef(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t count -= 16; } while (count != 0); - state[1] = (l1 << 16) + l2; - dram_store_u32(hle, (uint32_t*)(state), address, 2); + dram_store_u32(hle, (uint32_t*)(dst - 4), address, 2); } void alist_iirf(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t count, int16_t* table, uint32_t address)