From 9cddabbb3a4242dcc72063c2ba6c16395af9ec8b Mon Sep 17 00:00:00 2001 From: Zero Fanker Date: Wed, 5 Jun 2024 00:54:17 -0400 Subject: [PATCH] #11, fixed overlay decoding again . --- 3rdParty/xcc/misc/shp_decode.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/3rdParty/xcc/misc/shp_decode.cpp b/3rdParty/xcc/misc/shp_decode.cpp index 754d638..f001226 100644 --- a/3rdParty/xcc/misc/shp_decode.cpp +++ b/3rdParty/xcc/misc/shp_decode.cpp @@ -323,7 +323,7 @@ int decode80(const byte source[], byte dest[]) op_code = *source_ptr++; if (!(op_code & 0x80)) { count = (op_code >> 4) + 3; - copy_ptr = dest_ptr - ((uint64_t)*source_ptr++ + (((uint64_t)op_code & 0x0f) << 8)); + copy_ptr = dest_ptr - ((uint64_t)*source_ptr++ + ((uint64_t)(op_code & 0x0f) << 8)); while (count--) *dest_ptr++ = *copy_ptr++; } else { if (!(op_code & 0x40)) { @@ -339,17 +339,17 @@ int decode80(const byte source[], byte dest[]) word_data = data = *(source_ptr + 2); word_data = (word_data << 56) + (word_data << 48) + (word_data << 40) + (word_data << 32) + (word_data << 24) + (word_data << 16) + (word_data << 8) + word_data; source_ptr += 3; - copy_ptr = dest_ptr + 8 - ((uint64_t)dest_ptr & 0x7); + copy_ptr = dest_ptr + 4 - ((uint64_t)dest_ptr & 0x3); count -= (copy_ptr - dest_ptr); while (dest_ptr < copy_ptr) *dest_ptr++ = data; word_dest_ptr = (uint64_t*)dest_ptr; - dest_ptr += (count & 0xfffffffffffffff8); + dest_ptr += (count & 0xfffffffffffffffc); while (word_dest_ptr < (uint64_t*)dest_ptr) { *word_dest_ptr = word_data; *(word_dest_ptr + 1) = word_data; word_dest_ptr += 2; } - copy_ptr = dest_ptr + (count & 0x7); + copy_ptr = dest_ptr + (count & 0x3); while (dest_ptr < copy_ptr) *dest_ptr++ = data; } else { if (op_code == 0xff) {