16 位索引之后的数据使用 LZSS 压缩进行压缩。TI 工具链中的 LZSS 处理程序函数称为 _ _TI_decompress_lzss。有关格式的详细信息,请参阅 RTS 源代码中该函数的实现。
LZSS 的解压缩算法如下所示:
- 读取 16 位,它们是标记下一个 LZSS 编码数据包开始的编码标志 (F)。
- 对于 F 中的每个位 (B),从最低有效位到最高有效位,执行以下操作:
- 如果 (B & 0x1),则读取接下来的 16 位并将其写入输出缓冲区。然后前进到 F 中的下一位 (B) 并重复此步骤。
- 否则,将接下来的 16 位读入 temp (T),长度 (L) = (T & 0xf) + 2,以及偏移量 (O) = (T >> 4)。
- 如果 L == 17,则读取接下来的 16 位 (L');然后 L += L'。
- 如果 O == LZSS end of data (LZSS_EOD),我们已经到达数据的末尾,算法结束。
- 在位置 (P) = 输出缓冲区 - 偏移量 (O) - 1 处,从位置 P 读取 L 个字节并将它们写入输出缓冲区。
- 转到步骤 2a。