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/lz48decrunch_v006.asm | 113 ++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 tools/rasm/decrunch/lz48decrunch_v006.asm (limited to 'tools/rasm/decrunch/lz48decrunch_v006.asm') diff --git a/tools/rasm/decrunch/lz48decrunch_v006.asm b/tools/rasm/decrunch/lz48decrunch_v006.asm new file mode 100644 index 0000000..750b571 --- /dev/null +++ b/tools/rasm/decrunch/lz48decrunch_v006.asm @@ -0,0 +1,113 @@ +; +; LZ48 decrunch +; +; hl compressed data adress +; de output adress of data +; + + +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 LZ48_decrunch + +ei +ret + + + + + +LZ48_decrunch +ldi +ld b,0 + +nextsequence +ld a,(hl) +inc hl +ld lx,a +and #F0 +jr z,lzunpack ; no litteral bytes +rrca +rrca +rrca +rrca + +ld c,a +cp 15 ; 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 +; 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 + +copykey +ldir + +pop hl +jr nextsequence + + -- cgit v1.2.3