diff --git a/include/functions.h b/include/functions.h index 26d8ee6090..946fa16df0 100644 --- a/include/functions.h +++ b/include/functions.h @@ -29,7 +29,7 @@ void ViConfig_UpdateVi(u32 black); void ViConfig_UpdateBlack(void); void* Yaz0_FirstDMA(void); void* Yaz0_NextDMA(u8* curSrcPos); -void Yaz0_DecompressImpl(Yaz0Header* hdr, u8* dst); +void Yaz0_DecompressImpl(u8* src, u8* dst); void Yaz0_Decompress(uintptr_t romStart, u8* dst, size_t size); void Locale_Init(void); void Locale_ResetRegion(void); @@ -45,7 +45,7 @@ void* is_proutSyncPrintf(void* arg, const char* str, size_t count); NORETURN void func_80002384(const char* exp, const char* file, u32 line); #endif OSPiHandle* osDriveRomInit(void); -void Mio0_Decompress(Yaz0Header* hdr, u8* dst); +void Mio0_Decompress(u8* src, u8* dst); void StackCheck_Init(StackEntry* entry, void* stackBottom, void* stackTop, u32 initValue, s32 minSpace, const char* name); void StackCheck_Cleanup(StackEntry* entry); diff --git a/include/z64.h b/include/z64.h index 09d205d5ee..976d932cce 100644 --- a/include/z64.h +++ b/include/z64.h @@ -695,8 +695,7 @@ typedef struct { /* 0x04 */ u32 decSize; /* 0x08 */ u32 compInfoOffset; // only used in mio0 /* 0x0C */ u32 uncompDataOffset; // only used in mio0 - /* 0x10 */ u8 data[1]; -} Yaz0Header; // size = 0x10 ("data" is not part of the header) +} Yaz0Header; // size = 0x10 struct ArenaNode; diff --git a/src/boot/yaz0.c b/src/boot/yaz0.c index 80d8509280..448ab38350 100644 --- a/src/boot/yaz0.c +++ b/src/boot/yaz0.c @@ -48,16 +48,18 @@ void* Yaz0_NextDMA(u8* curSrcPos) { return dst; } -void Yaz0_DecompressImpl(Yaz0Header* hdr, u8* dst) { +void Yaz0_DecompressImpl(u8* src, u8* dst) { + Yaz0Header* header = (Yaz0Header*)src; u32 bitIdx = 0; - u8* src = hdr->data; - u8* dstEnd = dst + hdr->decSize; + u8* dstEnd = dst + header->decSize; u32 chunkHeader; u32 nibble; u8* backPtr; u32 chunkSize; u32 off; + src += sizeof(Yaz0Header); + do { if (bitIdx == 0) { if ((sYaz0MaxPtr < src) && (sYaz0CurSize != 0)) {