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_b.s | 122 +++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 tools/apultra/asm/6809/unaplib_b.s (limited to 'tools/apultra/asm/6809/unaplib_b.s') diff --git a/tools/apultra/asm/6809/unaplib_b.s b/tools/apultra/asm/6809/unaplib_b.s new file mode 100644 index 0000000..02f943c --- /dev/null +++ b/tools/apultra/asm/6809/unaplib_b.s @@ -0,0 +1,122 @@ +; unaplib_b.s - aPLib backward decompressor for 6809 - 154 bytes +; +; in: x = last byte of compressed data +; y = last byte of decompression buffer +; out: y = first byte of decompressed data +; +; 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 leau $aaaa,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