diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2018-11-18 17:50:06 +0100 |
|---|---|---|
| committer | Admiral H. Curtiss <pikachu025@gmail.com> | 2018-12-09 22:28:56 +0100 |
| commit | c3e9f534802421740b58fdee548ef0b120e707c8 (patch) | |
| tree | f8d735dceed7e9365a6b25cd3534772a93a1c00e /Source | |
| parent | 65f6250faa8bfa3fa47b361307cbdfbc42baa343 (diff) | |
GCMemcard: Use BigEndianValue for DEntry.m_icon_format.
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/HW/GCMemcard/GCMemcard.cpp | 13 | ||||
| -rw-r--r-- | Source/Core/Core/HW/GCMemcard/GCMemcard.h | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp b/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp index 8868cd40eb..f4e3c3e6d5 100644 --- a/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp +++ b/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp @@ -452,12 +452,14 @@ std::string GCMemcard::DEntry_IconFmt(u8 index) const if (!m_valid || index >= DIRLEN) return ""; - int x = CurrentDir->m_dir_entries[index].m_icon_format[0]; + std::array<u8, 2> tmp; + memcpy(tmp.data(), &CurrentDir->m_dir_entries[index].m_icon_format, 2); + int x = tmp[0]; std::string format; for (int i = 0; i < 16; i++) { if (i == 8) - x = CurrentDir->m_dir_entries[index].m_icon_format[1]; + x = tmp[1]; format.push_back((x & 0x80) ? '1' : '0'); x = x << 1; } @@ -1047,7 +1049,10 @@ void GCMemcard::Gcs_SavConvert(DEntry& tempDEntry, int saveType, int length) ByteSwap(&tmp[2], &tmp[3]); memcpy(&tempDEntry.m_image_offset, tmp.data(), 4); - ArrayByteSwap((tempDEntry.m_icon_format)); + memcpy(tmp.data(), &tempDEntry.m_icon_format, 2); + ByteSwap(&tmp[0], &tmp[1]); + memcpy(&tempDEntry.m_icon_format, tmp.data(), 2); + ArrayByteSwap((tempDEntry.m_animation_speed)); ByteSwap(&tempDEntry.m_file_permissions, &tempDEntry.m_copy_counter); ArrayByteSwap((tempDEntry.m_first_block)); @@ -1112,7 +1117,7 @@ u32 GCMemcard::ReadAnimRGBA8(u8 index, u32* buffer, u8* delays) const // Sonic Heroes it the only game I have seen that tries to use a CI8 and RGB5A3 icon // int fmtCheck = 0; - int formats = BE16(CurrentDir->m_dir_entries[index].m_icon_format); + int formats = CurrentDir->m_dir_entries[index].m_icon_format; int fdelays = BE16(CurrentDir->m_dir_entries[index].m_animation_speed); int flags = CurrentDir->m_dir_entries[index].m_banner_and_icon_flags; diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcard.h b/Source/Core/Core/HW/GCMemcard/GCMemcard.h index f4a9c8826a..ad733733ae 100644 --- a/Source/Core/Core/HW/GCMemcard/GCMemcard.h +++ b/Source/Core/Core/HW/GCMemcard/GCMemcard.h @@ -191,7 +191,7 @@ struct DEntry m_modification_time; // 0x28 0x04 Time of file's last modification in seconds since // 12am, January 1st, 2000 Common::BigEndianValue<u32> m_image_offset; // 0x2c 0x04 image data offset - u8 m_icon_format[2]; // 0x30 0x02 icon gfx format (2bits per icon) + Common::BigEndianValue<u16> m_icon_format; // 0x30 0x02 icon gfx format (2bits per icon) // Bits Description // 00 No icon // 01 CI8 with a shared color palette after the last frame |
