From 9bcf1e97960c0da7322a868efdbc07e2650716fe Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Sat, 9 Jan 2021 09:01:05 +0000 Subject: Extra libs: ap.lib aPLib support with apultra. --- tools/apultra/asm/6809/unaplib.s | 125 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 tools/apultra/asm/6809/unaplib.s (limited to 'tools/apultra/asm/6809/unaplib.s') diff --git a/tools/apultra/asm/6809/unaplib.s b/tools/apultra/asm/6809/unaplib.s new file mode 100644 index 0000000..641c3f4 --- /dev/null +++ b/tools/apultra/asm/6809/unaplib.s @@ -0,0 +1,125 @@ +; 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