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/6502/aplib_6502_b.asm | 218 ++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 tools/apultra/asm/6502/aplib_6502_b.asm (limited to 'tools/apultra/asm/6502/aplib_6502_b.asm') diff --git a/tools/apultra/asm/6502/aplib_6502_b.asm b/tools/apultra/asm/6502/aplib_6502_b.asm new file mode 100644 index 0000000..7963e02 --- /dev/null +++ b/tools/apultra/asm/6502/aplib_6502_b.asm @@ -0,0 +1,218 @@ +; ----------------------------------------------------------------------------- +; 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