2 ; Lauri Kasanen, 6 Jun 2017
4 ; An optimized LZ4 decompressor
6 ; Almost 7 times faster, uses no RAM (vs 14 bytes BSS), and takes 1/4 the space
7 ; vs the official C source.
10 .importzp sp, sreg, regsave, regbank
11 .importzp tmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4
13 .import memcpy_upwards,pushax,popax
14 .export _decompress_lz4
24 ; ---------------------------------------------------------------
25 ; void decompress_lz4 (const u8 *in, u8 * const out, const u16 outlen)
26 ; ---------------------------------------------------------------
30 .proc _decompress_lz4: near
49 ; while (written < outlen) {
64 ; offset = token >> 4;
75 ; token += 4; // Minmatch
124 ; memcpy(&out[written], in, offset);
140 ; ldy #$00 - not needed as pushax zeroes Y
163 ; if (written >= outlen)
175 ; memcpy(&offset, in, 2);
193 ; copysrc = out + written - offset;
251 ; memcpy(&out[written], copysrc, offset);
275 ; while (written < outlen) {