mirror of
https://github.com/Tolik-Trek/Crazy-Blaster.git
synced 2026-06-15 09:31:37 +03:00
158 lines
3.3 KiB
NASM
158 lines
3.3 KiB
NASM
;------------------------------------------------------------------------------
|
||
;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
|