; ----------------------------------------------------------------------------- ; aplib_6502_b.s - fast aPLib backward decompressor for 6502 - 253 bytes ; written for the ACME assembler ; ; jsr apl_decompress to unpack data backwards. ; create backwards compressed data with apultra -b or oapack -b ; ; in: ; * apl_srcptr (low and high byte) = last byte of compressed data ; * apl_dstptr (low and high byte) = last byte of decompression buffer ; ; out: ; * apl_dstptr (low and high byte) = first byte of decompressed data ; ; Copyright (C) 2020 Emmanuel Marty ; With parts of the code inspired by John Brandwood, Peter Ferrie ; ; This software is provided 'as-is', without any express or implied ; warranty. In no event will the authors be held liable for any damages ; arising from the use of this software. ; ; Permission is granted to anyone to use this software for any purpose, ; including commercial applications, and to alter it and redistribute it ; freely, subject to the following restrictions: ; ; 1. The origin of this software must not be misrepresented; you must not ; claim that you wrote the original software. If you use this software ; in a product, an acknowledgment in the product documentation would be ; appreciated but is not required. ; 2. Altered source versions must be plainly marked as such, and must not be ; misrepresented as being the original software. ; 3. This notice may not be removed or altered from any source distribution. ; ----------------------------------------------------------------------------- ; Zero page locations apl_gamma2_hi = $F6 apl_bitbuf = $F7 apl_offset = $F8 apl_winptr = $FA apl_srcptr = $FC apl_dstptr = $FE ; Read a byte from the source into A. Trashes X !macro APL_GET_SRC { lda (apl_srcptr),y ldx = 256. cpx #$7d ; offset >= 32000 (7d00) ? bcs .offset_incby2 ; if so, increase match len by 2 cpx #$05 ; offset >= 1280 (0500) ? bcs .offset_incby1 ; if so, increase match len by 1 bcc .got_len ; length is fine, go copy .offset_1byte: ldx