diff --git a/include/PSX/Auxiliary/unaligned_read.hpp b/include/PSX/Auxiliary/unaligned_read.hpp new file mode 100644 index 00000000..274b4c64 --- /dev/null +++ b/include/PSX/Auxiliary/unaligned_read.hpp @@ -0,0 +1,11 @@ +#ifndef __JABYENGINE_UNALIGNED_READ_HPP__ +#define __JABYENGINE_UNALIGNED_READ_HPP__ +#include "../../stdint.h" + +namespace JabyEngine { + uint16_t unaligned_lhu(const uint8_t* adr) { + return (static_cast(adr[0]) | static_cast(adr[1]) << 8); + } +} + +#endif //!__JABYENGINE_UNALIGNED_READ_HPP__ \ No newline at end of file diff --git a/src/Library/src/Auxiliary/lz4_decompressor.cpp b/src/Library/src/Auxiliary/lz4_decompressor.cpp index 77360d0e..3422a6ab 100644 --- a/src/Library/src/Auxiliary/lz4_decompressor.cpp +++ b/src/Library/src/Auxiliary/lz4_decompressor.cpp @@ -1,4 +1,5 @@ #include +#include namespace JabyEngine { static void memcpy(uint8_t* &dst, ArrayRange &src, size_t size) { @@ -94,7 +95,7 @@ namespace JabyEngine { // We are unused and invalid if(data.size >= sizeof(uint16_t)) { // We can read all - this->state.match_offset = *reinterpret_cast(data.start); + this->state.match_offset = unaligned_lhu(data.start); data.skip(sizeof(uint16_t)); if(!state_complete(this->state)) {