From 2682bc5d1d864341aaeb42a449db73c3ecd16d70 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Wed, 30 Dec 2020 19:07:31 +0000 Subject: Initial import --- tools/rasm/decrunch/lz49decrunch_v001.asm | 138 ++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 tools/rasm/decrunch/lz49decrunch_v001.asm (limited to 'tools/rasm/decrunch/lz49decrunch_v001.asm') diff --git a/tools/rasm/decrunch/lz49decrunch_v001.asm b/tools/rasm/decrunch/lz49decrunch_v001.asm new file mode 100644 index 0000000..7f811b5 --- /dev/null +++ b/tools/rasm/decrunch/lz49decrunch_v001.asm @@ -0,0 +1,138 @@ +; +; LZ48 decrunch +; input +; hl compressed data adress +; de output adress of data +; +; output +; hl last adress of compressed data read (you must inc once for LZ48 stream) +; de last adress of decrunched data write +1 +; bc always 3 +; a always zero +; lx undetermined +; flags (inc a -> 0) + +org #8000 + +; CALL #8000,source,destination +di + +; parameters +ld h,(ix+3) +ld l,(ix+2) +ld d,(ix+1) +ld e,(ix+0) + +call LZ49_decrunch + +ei +ret + + + + + +LZ49_decrunch +ldi +ld b,0 + +nextsequence +ld a,(hl) +inc hl +ld lx,a +and #70 +jr z,lzunpack ; no litteral bytes +rrca +rrca +rrca +rrca + +ld c,a +cp 7 ; more bytes for length? +jr nz,copyliteral + +getadditionallength +ld a,(hl) +inc hl +inc a +jr nz,lengthnext +inc b +dec bc +jr getadditionallength +lengthnext +dec a +add a,c +ld c,a +ld a,b +adc a,0 +ld b,a ; bc=length + +copyliteral +ldir + +lzunpack +ld a,lx +and #F +add 3 +ld c,a +cp 18 ; more bytes for length? +jr nz,readoffset + +getadditionallengthbis +ld a,(hl) +inc hl +inc a +jr nz,lengthnextbis +inc b +dec bc +jr getadditionallengthbis +lengthnextbis +dec a +add a,c +ld c,a +ld a,b +adc a,0 +ld b,a ; bc=length + +readoffset +ld a,lx +add a +jr c,extendedoffset +; read encoded offset +ld a,(hl) +inc a +ret z ; LZ48 end with zero offset +inc hl +push hl +ld l,a +ld a,e +sub l +ld l,a +ld a,d +sbc a,0 +ld h,a +; source=dest-copyoffset +ldir +pop hl +jr nextsequence + +extendedoffset +ld a,(hl) +inc hl +push hl +inc a +ld l,a +ld a,e +sub l +ld l,a +ld a,d +sbc a,1 +ld h,a +; source=dest-copyoffset +ldir +pop hl +jr nextsequence + + + + -- cgit v1.2.3