Sprinter-BIOS/bios/rom/_not_used/LZ4_DEC.asm
2026-05-19 19:48:28 +10:00

158 lines
3.1 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;------------------------------------------------------------------------------
;hl=src de=dst
lz4decrunch:
ld bc,7
add hl,bc
ld c,(hl)
inc hl
ld b,(hl) ;„q„u„„v„} „t„r„p „q„p„z„„„p „y„x „x„p„s„€„|„€„r„{„p - „„p„x„}„u„
inc hl
inc hl
inc hl ;„~„p„‰„p„|„€ „ƒ„w„p„„„<E2809E>„‡ „t„p„~„~„<>„‡ „ƒ„€ „ƒ„}„u„„u„~„y„ #0B
ld a,l
add a,c
ld (.endL+1),a
ld a,h
adc a,b
ld (.endH+1),a ;„K„€„~„u„‰„~„<>„z „p„t„„u„ƒ „ƒ„w„p„„„<E2809E>„‡ „t„p„~„~„<>„‡
.loop:
ld a,(hl)
inc hl
ld (.litteral+1),a
and #F0
jr z,.copy ;„E„ƒ„|„y „t„|„y„~„p „„p„r„~„p 0, „ƒ„{„€„<E282AC>„y„„€„r„p„„„Ž „…„w„u „<>„u„„u„t„p„~„~„<>„u „t„p„~„~„<>„u
rrca
rrca
rrca
rrca
ld b,0
ld c,a
cp #0F
call z,.getlength ;„E„ƒ„|„y „t„|„y„~„p #0F, „„„€ „<>„€„|„…„‰„y„„„Ž „t„€„<E282AC>„€„|„~„y„„„u„|„Ž„~„…„<E280A6> „t„|„y„~„…
ldir ;„P„u„„u„t„p„‰„p „~„p„‰„y„~„p„u„„„ƒ„ „ƒ„€ „ƒ„|„u„t„…„<E280A6>„u„z „y„~„†„€„‚„}„p„ˆ„y„y „€ „t„|„y„~„u
.copy:
ld a,l ;„t„€„ƒ„„„y„s„|„y „|„y „ƒ„w„p„„„<E2809E>„u „t„p„~„~„<>„u „{„€„~„u„‰„~„€„s„€ „p„t„„u„ƒ„p
.endL:
sub #FF
ld a,h
.endH:
sbc a,#FF
ret nc ;„^„†„†„u„{„„„y„r„~„p„<>„€„r„u„„{„p zf=1
ld c,(hl)
inc hl
ld b,(hl) ;bc=2byte „X„„„u„~„y„u „x„~„p„‰„u„~„y„ „ƒ„}„u„„u„~„y„
inc hl
.litteral:
ld a,0 ;litteral „<>„u„„u„<75>„y„ƒ„p„„„Ž „x„t„u„ƒ„Ž
and #0F
add a,#04 ;cf=0
push hl
ld h,d
ld l,e
sbc hl,bc ;hl=de-bc „I„ƒ„<C692>„€„|„Ž„x„…„z„„„u „t„p„~„~„<>„u, „{„€„„„€„<E2809A>„u „…„w„u „q„<71>„|„y „„p„ƒ„Š„y„„u„~„<>, „r „{„p„‰„u„ƒ„„„r„u „y„ƒ„„„€„‰„~„y„{„p „<>„u„„u„t„p„‰„y
ld b,0
ld c,a
cp #0F+#04
ex (sp),hl
call z,.getlength
ex (sp),hl
ldir ;„K„€„<E282AC>„y„„€„r„p„„„Ž „<>„u„„u„~„€„ƒ „…„w„u „„p„x„r„u„„~„…„„„<E2809E>„‡ „t„p„~„~„<>„‡
pop hl
jp .loop
.getlength: ;„P„€„|„…„‰„y„„„Ž „t„|„y„~„… „q„p„z„„„p „<>„u„„u„r„€„t„p („q„€„|„ބЄu) bc=„„„u„{„…„„p„ „ƒ„…„}„}„p „<>„u„„u„r„€„t„p
ld a,(hl)
inc hl
cp #FF ;#FF „…„t„r„p„y„r„p„u„„„ƒ„ „{„p„{ „x„~„p„{, „x„p „{„€„„„€„<E2809A>„} „ƒ„|„u„t„…„u„„ „y„~„†„€„‚„}„p„ˆ„y„ „€ „t„|„y„~„u
jr nz,.addlen
inc b
dec bc ;bc += 255
jr .getlength
.addlen:
add a,c
ld c,a
adc a,b
sub c
ld b,a ;bc=„t„|„y„~„p „<>„u„„u„t„p„r„p„u„}„€„s„€ „q„p„z„„„p
ret
;------------------------------------------------------------------------------
;in: hl=„~„p„‰„p„|„Ž„~„<>„z „p„t„„u„ƒ bc=„t„|„y„~„p
;out: bcde=„„u„x„…„|„Ž„„„p„„
crc32:
push hl
push bc
ld de,#FFFF ; 0xFFFFFFFF ? „~„p„‰„p„|„Ž„~„€„u „x„~„p„‰„u„~„y„u CRC32, „y„ƒ„<C692>„€„|„Ž„x„…„u„}„€„s„€ „r ZIP
ld h,d
ld l,e
ld c,#20 ;„ƒ„€„{„„p„„u„~„y„u
exx
pop hl
dec hl
inc h
inc l
ld b,l
ld c,h
pop hl
.loop1:
ld a,(hl)
inc hl
exx
xor e
ld b,8
.loop2:
srl h
rr l
rr d
rra
jp nc,.skip
ld e,a
ld a,h
xor #ED
ld h,a
ld a,l
xor #B8
ld l,a
ld a,d
xor #83
ld d,a
ld a,e
; xor #20
xor c
.skip:
djnz .loop2
ld e,a
exx
djnz .loop1
dec c
jp nz,.loop1
exx
ld a,h ;CRC32, „y„ƒ„<C692>„€„|„Ž„x„…„u„}„<>„z „r ZIP, „<>„y„~„y„}„p„u„„ xor „ƒ 0xFFFFFFFF „r „{„€„~„ˆ„u
cpl
ld b,a
ld a,l
cpl
ld c,a
ld a,d
cpl
ld d,a
ld a,e
cpl
ld e,a
ret