Terrible approach for alternative endianness strings

This commit is contained in:
SimoneN64
2024-03-28 21:18:32 +01:00
parent ef49954f41
commit 07d11300df

View File

@@ -3,26 +3,40 @@
#include <MemoryHelpers.hpp> #include <MemoryHelpers.hpp>
namespace Util { namespace Util {
#define Z64 0x80371240 #define Z64 0x80371200
#define N64 0x40123780 #define N64 0x00123780
#define V64 0x37804012 #define V64 0x37800012
#define Z64_ALT 0x80371241
#define N64_ALT 0x41123780
#define V64_ALT 0x37804112
template <bool toBE = false> template <bool toBE = false>
FORCE_INLINE void SwapN64Rom(size_t size, u8 *rom, u32 endianness) { FORCE_INLINE void SwapN64Rom(size_t size, u8 *rom, u32 endianness) {
u8 altByteShift = 0;
if((endianness >> 24) != 0x80) {
if((endianness & 0xFF) != 0x80) {
if(((endianness >> 16) & 0xff) != 0x80) {
Util::panic("TODO: Unrecognized rom endianness. Ideally, this should be more robust");
} else {
altByteShift = 12;
}
} else {
altByteShift = 24;
}
} else {
altByteShift = 0;
}
endianness &= ~(0xFF << altByteShift);
switch (endianness) { switch (endianness) {
case V64: case V64_ALT: case V64:
SwapBuffer16(size, rom); SwapBuffer16(size, rom);
if constexpr(!toBE) if constexpr(!toBE)
SwapBuffer32(size, rom); SwapBuffer32(size, rom);
break; break;
case N64: case N64_ALT: case N64:
if constexpr(toBE) if constexpr(toBE)
SwapBuffer32(size, rom); SwapBuffer32(size, rom);
break; break;
case Z64: case Z64_ALT: case Z64:
if constexpr(!toBE) if constexpr(!toBE)
SwapBuffer32(size, rom); SwapBuffer32(size, rom);
break; break;