A2osX/SHARED/X.UNPAK.S.txt

229 lines
3.8 KiB
Plaintext
Raw Normal View History

2019-09-24 15:25:07 +00:00
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* ZPInBufPtr = Ptr to Shunk Data
* ZPOutBufPtr = Ptr to Uncompressed Data
*--------------------------------------
2019-10-02 15:21:03 +00:00
* ZPnCnt = !ZPULen
2019-09-24 15:25:07 +00:00
* ZPPtr1
* ZPPtr2
2019-10-14 05:23:09 +00:00
* ZPInMask,ZPBLOfsLBits,ZPBLOfsHBits,ZPBLLenBits
2019-09-24 15:25:07 +00:00
*--------------------------------------
2019-09-25 15:34:43 +00:00
X.Unpak lda (ZPInBufPtr) ULEN LO
2019-09-24 15:25:07 +00:00
eor #$ff
sta ZPnCnt
2019-09-25 15:34:43 +00:00
jsr X.Unpak.NextByte
2019-09-24 15:25:07 +00:00
2019-09-25 15:34:43 +00:00
lda (ZPInBufPtr) ULEN HI
2019-10-02 15:21:03 +00:00
eor #$ff
2019-09-25 15:34:43 +00:00
sta ZPnCnt+1
2019-09-24 15:25:07 +00:00
2019-09-25 15:34:43 +00:00
jsr X.Unpak.NextByte
2019-09-24 15:25:07 +00:00
2019-10-02 15:21:03 +00:00
lda (ZPInBufPtr) CHNK.DATA.T
2019-10-14 05:23:09 +00:00
bne X.Unpak.PAK
*--------------------------------------
X.Unpak.STORE ldy #0
2019-10-02 15:21:03 +00:00
.1 iny
bne .2
2019-09-24 15:25:07 +00:00
2019-10-02 15:21:03 +00:00
inc ZPInBufPtr+1
.2 lda (ZPInBufPtr),y
2019-10-14 05:23:09 +00:00
jsr X.Unpak.PutByte
2019-10-02 15:21:03 +00:00
bne .1
clc
rts
2019-10-14 05:23:09 +00:00
*--------------------------------------
X.Unpak.PAK pha A = BLBITS
and #$70
lsr
lsr
lsr
lsr
sta ZPBLLenBits
pla
ldx #8
and #$0f
tax
cmp #8
bcc .10
2019-10-02 15:21:03 +00:00
2019-10-14 05:23:09 +00:00
ldx #8
and #7
.10 stx ZPBLOfsLBits
sta ZPBLOfsHBits
jsr X.Unpak.NextByte get TOPCNT
2019-10-14 15:58:16 +00:00
2019-10-02 15:21:03 +00:00
lda (ZPInBufPtr) CHNK.DATA.PAK.TOPLEN
2019-10-14 15:58:16 +00:00
tax
jsr X.Unpak.NextByte get TOPCNT
lda ZPInBufPtr
sta ZPPtr1
lda ZPInBufPtr+1
sta ZPPtr1+1
txa
2019-09-24 15:25:07 +00:00
clc
2019-09-25 15:34:43 +00:00
adc ZPInBufPtr skip TOP table
2019-10-14 15:58:16 +00:00
sta ZPInBufPtr
2019-09-24 15:25:07 +00:00
2019-10-14 15:58:16 +00:00
lda ZPInBufPtr+1
2019-09-24 15:25:07 +00:00
adc #0
2019-10-14 15:58:16 +00:00
sta ZPInBufPtr+1
2019-09-24 15:25:07 +00:00
lda #$80
sta ZPInMask
2019-10-14 05:23:09 +00:00
*--------------------------------------
2019-09-24 15:25:07 +00:00
.1 lda ZPnCnt
ora ZPnCnt+1
bne .2
clc
rts
*--------------------------------------
.2 jsr X.Unpak.GetBitInC
2019-09-25 15:34:43 +00:00
bcs .3 ->TOP
* BYTE8
jsr X.Unpak.GetByteInA
bra .52
2019-09-24 15:25:07 +00:00
*--------------------------------------
.3 jsr X.Unpak.GetBitInC
2019-09-25 15:34:43 +00:00
bcs .4 ->TOP16
* TOP8
ldx #3
2019-09-24 15:25:07 +00:00
jsr X.Unpak.GetXBitInA
2019-09-25 15:34:43 +00:00
bra .51
2019-09-24 15:25:07 +00:00
*--------------------------------------
.4 jsr X.Unpak.GetBitInC
2019-10-14 05:23:09 +00:00
bcs .5 ->TOP32
2019-09-25 15:34:43 +00:00
* TOP16
ldx #3
2019-09-24 15:25:07 +00:00
jsr X.Unpak.GetXBitInA
2019-09-25 15:34:43 +00:00
ora #8
2019-09-24 15:25:07 +00:00
2019-09-25 15:34:43 +00:00
bra .51
*--------------------------------------
.5 jsr X.Unpak.GetBitInC
2019-10-14 05:23:09 +00:00
bcs .6 ->BACKLINK
* TOP32
ldx #4
2019-09-25 15:34:43 +00:00
jsr X.Unpak.GetXBitInA
2019-10-14 05:23:09 +00:00
ora #32
2019-09-25 15:34:43 +00:00
.51 tay
2019-10-14 15:58:16 +00:00
lda (ZPPtr1),y
2019-09-25 15:34:43 +00:00
.52 jsr X.Unpak.PutByte
bne .2
clc
rts
*--------------------------------------
2019-10-14 05:23:09 +00:00
* BACKLINK : 1111 OfsLBits OfsHBits LenBits
.6 ldx ZPBLOfsLBits
jsr X.Unpak.GetXBitInA
2019-09-24 15:25:07 +00:00
clc
adc ZPOutBufPtr
sta ZPPtr2
php
2019-10-14 05:23:09 +00:00
lda ZPBLOfsHBits
beq .61
tax
2019-09-24 15:25:07 +00:00
jsr X.Unpak.GetXBitInA
2019-10-14 05:23:09 +00:00
.61 plp
2019-09-24 15:25:07 +00:00
adc ZPOutBufPtr+1
sta ZPPtr2+1
2019-10-14 05:23:09 +00:00
ldx ZPBLLenBits
jsr X.Unpak.GetXBitInA
2019-09-24 15:25:07 +00:00
inc +1
inc +1
2019-10-14 05:23:09 +00:00
inc +1
2019-09-24 15:25:07 +00:00
tay
2019-10-14 05:23:09 +00:00
.62 lda (ZPPtr2),y
2019-09-24 15:25:07 +00:00
jsr X.Unpak.PutByte
beq .99
2019-10-14 05:23:09 +00:00
2019-09-24 15:25:07 +00:00
dey
2019-10-14 05:23:09 +00:00
bne .62
2019-09-24 15:25:07 +00:00
bra .1
2019-10-14 05:23:09 +00:00
.99 sec
rts
2019-09-24 15:25:07 +00:00
*--------------------------------------
X.Unpak.GetByteInA
ldx #8
X.Unpak.GetXBitInA
lda #0
.1 jsr X.Unpak.GetBitInC
rol
dex
bne .1
rts
*--------------------------------------
X.Unpak.GetBitInC
pha
clc
2019-10-14 15:58:16 +00:00
lda (ZPInBufPtr)
2019-09-24 15:25:07 +00:00
and ZPInMask
beq .1
sec
.1 php
lsr ZPInMask
2019-09-25 15:34:43 +00:00
bcc .8
2019-09-24 15:25:07 +00:00
ror ZPInMask
2019-09-25 15:34:43 +00:00
jsr X.Unpak.NextByte
.8 plp
pla
rts
*--------------------------------------
X.Unpak.NextByte
2019-10-14 15:58:16 +00:00
inc ZPInBufPtr
2019-09-24 15:25:07 +00:00
bne .8
2019-10-14 15:58:16 +00:00
inc ZPInBufPtr+1
2019-09-24 15:25:07 +00:00
2019-09-25 15:34:43 +00:00
.8 rts
2019-09-24 15:25:07 +00:00
*--------------------------------------
2019-10-14 05:23:09 +00:00
X.Unpak.PutByte sta (ZPOutBufPtr)
2019-09-24 15:25:07 +00:00
inc ZPOutBufPtr
bne .1
inc ZPOutBufPtr+1
.1 inc ZPnCnt
bne .2
inc ZPnCnt+1
.2 rts
*--------------------------------------
.LIST ON
X.Unpak.Size .EQ *-X.Unpak
.LIST OFF
*--------------------------------------
MAN
SAVE USR/SRC/SHARED/X.UNPAK.S
LOAD USR/SRC/BIN/UNPAK.S
ASM