; unaplib.s - aPLib decompressor for 6809 - 157 bytes ; ; in: x = start of compressed data ; y = start of decompression buffer ; out: y = end of decompression buffer + 1 ; ; Copyright (C) 2020 Emmanuel Marty ; ; 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. apl_decompress lda #$80 ; initialize empty bit queue sta = 32000 ? bge apincby2 ; if so, increase match len by 2 cmpx #$0500 ; offset >= 1280 ? bge apincby1 ; if so, increase match len by 1 cmpx #$80 ; offset < 128 ? bge apgotlen ; if so, increase match len by 2 apincby2 addd #1 apincby1 addd #1 apgotlen pshs u ; save source compressed data pointer tfr d,x ; copy match length to X aprepof ldd #$aaaa ; load match offset nega ; reverse sign of offset in D negb sbca #0 leau d,y ; put backreference start address in U (dst+offset) apcpymt lda ,u+ ; copy matched byte sta ,y+ leax -1,x ; decrement X bne apcpymt ; loop until all matched bytes are copied puls u ; restore source compressed data pointer lda #$02 ; clear 'follows literal' flag bra aptoken apdibits bsr apgetbit ; read bit rolb ; push into B apgetbit lsl