====== SMSR00 Compression ======
Yoshi's Story uses an LZ77-type compression format called SMSR00 which is very similar to SM64's MIO0 format. In the Yoshi's Story ROM, each SMSR00 block is preceded by a 16-byte 'CMPR' header which contains the size of the encoded block and its destination size.
===== CMPRHeader struct =====
struct CMPRHeader
{
/*00*/ char cmprSignature[4]; // 'CMPR'
/*04*/ u32 srcSize; // size of encoded data
/*08*/ u32 dstSize; // size of decoded data
/*0C*/ u8 _pad[4]; // structure padding
};
===== SMSRHeader struct =====
struct SMSRHeader
{
/*00*/ char smsrSignature[6]; // 'SMSR00'
/*06*/ u8 _pad[2]; // structure padding
/*08*/ u32 outputSize; // size of decoded data
/*0C*/ u32 dataOffset; // offset of the data section in the smsr00 block
};
===== Decoder implementations =====
* C: https://raw.githubusercontent.com/shygoo/ys-project/master/tools/src/smsr00.c
* JS: https://raw.githubusercontent.com/shygoo/ys-project/master/webtools/smsr00.js