2019-09-24 15:25:07 +00:00
|
|
|
|
NEW
|
|
|
|
|
AUTO 3,1
|
|
|
|
|
.LIST OFF
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* ZPInBufPtr = Ptr to Shunk Data
|
|
|
|
|
* Header : 16 SHORT4
|
|
|
|
|
* 8 SHORT3
|
|
|
|
|
* ZPOutBufPtr = Ptr to Uncompressed Data
|
|
|
|
|
* ZPULen = Uncompressed length
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* ZPPtr1
|
|
|
|
|
* ZPPtr2
|
|
|
|
|
* ZPnCnt = !ZPULen
|
|
|
|
|
* ZPInMask
|
|
|
|
|
* ZPOutLastByte
|
|
|
|
|
*-OLD----------------------------------
|
|
|
|
|
* SHORT3 : 0 xxx
|
|
|
|
|
* SHORT4 : 10 xxxx
|
|
|
|
|
* REPn : 110 xxxx (1-16)
|
|
|
|
|
* BACKLINK : 1110 oooooooo OO llllll (3-66)
|
|
|
|
|
* STOREn : 1111 xxxx (1-16)
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
X.Unpak lda ZPInBufPtr
|
|
|
|
|
clc
|
|
|
|
|
adc #24 skip SHORT4 & SHORT3
|
|
|
|
|
sta ZPPtr1
|
|
|
|
|
|
|
|
|
|
lda ZPInBufPtr+1
|
|
|
|
|
adc #0
|
|
|
|
|
sta ZPPtr1+1
|
|
|
|
|
|
|
|
|
|
lda ZPULen
|
|
|
|
|
eor #$ff
|
|
|
|
|
sta ZPnCnt
|
|
|
|
|
|
|
|
|
|
lda ZPULen+1
|
|
|
|
|
eor #$ff
|
|
|
|
|
sta ZPnCnt+1
|
|
|
|
|
|
|
|
|
|
lda #$80
|
|
|
|
|
sta ZPInMask
|
|
|
|
|
|
|
|
|
|
.1 lda ZPnCnt
|
|
|
|
|
ora ZPnCnt+1
|
|
|
|
|
bne .2
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.2 jsr X.Unpak.GetBitInC
|
|
|
|
|
bcs .3
|
|
|
|
|
* SHORT3 : 0 xxx
|
|
|
|
|
ldx #3
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
ora #$16 Skip SHORT4 (16 bytes)
|
|
|
|
|
bra .31
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.3 jsr X.Unpak.GetBitInC
|
|
|
|
|
bcs .4
|
|
|
|
|
* SHORT4 : 10 xxxx
|
|
|
|
|
ldx #4
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
.31 tay
|
|
|
|
|
lda (ZPInBufPtr),y
|
|
|
|
|
jsr X.Unpak.PutByte
|
|
|
|
|
bne .2
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.4 jsr X.Unpak.GetBitInC
|
|
|
|
|
bcs .5
|
|
|
|
|
* REPn : 110 xxxx
|
|
|
|
|
ldx #4
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
|
|
|
|
|
tay
|
|
|
|
|
|
|
|
|
|
lda ZPOutLastByte
|
|
|
|
|
|
|
|
|
|
.41 jsr X.Unpak.PutByte.1
|
|
|
|
|
beq .99
|
|
|
|
|
dey
|
|
|
|
|
bpl .41 +1
|
|
|
|
|
|
|
|
|
|
bra .1
|
|
|
|
|
|
|
|
|
|
.99 sec
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.5 jsr X.Unpak.GetBitInC
|
|
|
|
|
bcs .6
|
|
|
|
|
* BACKLINK : 1110 oooooooo OO llllll
|
|
|
|
|
jsr X.Unpak.GetByteInA
|
|
|
|
|
clc
|
|
|
|
|
adc ZPOutBufPtr
|
|
|
|
|
sta ZPPtr2
|
|
|
|
|
php
|
|
|
|
|
ldx #2
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
plp
|
|
|
|
|
adc ZPOutBufPtr+1
|
|
|
|
|
sta ZPPtr2+1
|
|
|
|
|
|
|
|
|
|
jsr X.Unpak.GetByteInA
|
|
|
|
|
|
|
|
|
|
inc +1
|
|
|
|
|
inc +1
|
|
|
|
|
* inc +1
|
|
|
|
|
|
|
|
|
|
tay
|
|
|
|
|
|
|
|
|
|
.51 lda (ZPPtr2),y
|
|
|
|
|
jsr X.Unpak.PutByte
|
|
|
|
|
beq .99
|
|
|
|
|
dey
|
|
|
|
|
bpl .51 +1
|
|
|
|
|
|
|
|
|
|
bra .1
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* STOREn : 1111 cccc Byte Byte Byte ...
|
|
|
|
|
.6 ldx #4
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
|
|
|
|
|
tay
|
|
|
|
|
|
|
|
|
|
.61 jsr X.Unpak.GetByteInA
|
|
|
|
|
jsr X.Unpak.PutByte
|
|
|
|
|
beq .99
|
|
|
|
|
dey
|
|
|
|
|
bpl .61 +1
|
|
|
|
|
|
|
|
|
|
bra .1
|
|
|
|
|
|
|
|
|
|
.9 sec
|
|
|
|
|
rts
|
|
|
|
|
*-NEW----------------------------------
|
2019-09-24 15:33:18 +00:00
|
|
|
|
* STRINGn : 0 xxxx
|
2019-09-24 15:25:07 +00:00
|
|
|
|
* {
|
|
|
|
|
* BYTE8 : 0 xxxxxxxx
|
2019-09-24 15:33:18 +00:00
|
|
|
|
* SHORT8 : 10 xxx
|
|
|
|
|
* SHORT16 : 110 xxxx
|
|
|
|
|
* REPn : 111 xxxx (1-16)
|
2019-09-24 15:25:07 +00:00
|
|
|
|
* }
|
|
|
|
|
* BACKLINK : 1 oooooooo OOOO llllll (3-66)
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
X.Unpak2 lda ZPInBufPtr
|
|
|
|
|
clc
|
2019-09-24 15:33:18 +00:00
|
|
|
|
adc #24 skip SHORTs
|
2019-09-24 15:25:07 +00:00
|
|
|
|
sta ZPPtr1
|
|
|
|
|
|
|
|
|
|
lda ZPInBufPtr+1
|
|
|
|
|
adc #0
|
|
|
|
|
sta ZPPtr1+1
|
|
|
|
|
|
|
|
|
|
lda ZPULen
|
|
|
|
|
eor #$ff
|
|
|
|
|
sta ZPnCnt
|
|
|
|
|
|
|
|
|
|
lda ZPULen+1
|
|
|
|
|
eor #$ff
|
|
|
|
|
sta ZPnCnt+1
|
|
|
|
|
|
|
|
|
|
lda #$80
|
|
|
|
|
sta ZPInMask
|
|
|
|
|
|
|
|
|
|
.1 lda ZPnCnt
|
|
|
|
|
ora ZPnCnt+1
|
|
|
|
|
bne .2
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.2 jsr X.Unpak.GetBitInC
|
|
|
|
|
bcs .3
|
|
|
|
|
* SHORT3 : 0 xxx
|
|
|
|
|
ldx #3
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
ora #$16 Skip SHORT4 (16 bytes)
|
|
|
|
|
bra .31
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.3 jsr X.Unpak.GetBitInC
|
|
|
|
|
bcs .4
|
|
|
|
|
* SHORT4 : 10 xxxx
|
|
|
|
|
ldx #4
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
.31 tay
|
|
|
|
|
lda (ZPInBufPtr),y
|
|
|
|
|
jsr X.Unpak.PutByte
|
|
|
|
|
bne .2
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.4 jsr X.Unpak.GetBitInC
|
|
|
|
|
bcs .5
|
|
|
|
|
* REPn : 110 xxxx
|
|
|
|
|
ldx #4
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
|
|
|
|
|
tay
|
|
|
|
|
|
|
|
|
|
lda ZPOutLastByte
|
|
|
|
|
|
|
|
|
|
.41 jsr X.Unpak.PutByte.1
|
|
|
|
|
beq .99
|
|
|
|
|
dey
|
|
|
|
|
bpl .41 +1
|
|
|
|
|
|
|
|
|
|
bra .1
|
|
|
|
|
|
|
|
|
|
.99 sec
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.5 jsr X.Unpak.GetBitInC
|
|
|
|
|
bcs .6
|
|
|
|
|
* BACKLINK : 1110 oooooooo OO llllll
|
|
|
|
|
jsr X.Unpak.GetByteInA
|
|
|
|
|
clc
|
|
|
|
|
adc ZPOutBufPtr
|
|
|
|
|
sta ZPPtr2
|
|
|
|
|
php
|
|
|
|
|
ldx #2
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
plp
|
|
|
|
|
adc ZPOutBufPtr+1
|
|
|
|
|
sta ZPPtr2+1
|
|
|
|
|
|
|
|
|
|
jsr X.Unpak.GetByteInA
|
|
|
|
|
|
|
|
|
|
inc +1
|
|
|
|
|
inc +1
|
|
|
|
|
* inc +1
|
|
|
|
|
|
|
|
|
|
tay
|
|
|
|
|
|
|
|
|
|
.51 lda (ZPPtr2),y
|
|
|
|
|
jsr X.Unpak.PutByte
|
|
|
|
|
beq .99
|
|
|
|
|
dey
|
|
|
|
|
bpl .51 +1
|
|
|
|
|
|
|
|
|
|
bra .1
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* STOREn : 1111 cccc Byte Byte Byte ...
|
|
|
|
|
.6 ldx #4
|
|
|
|
|
jsr X.Unpak.GetXBitInA
|
|
|
|
|
|
|
|
|
|
tay
|
|
|
|
|
|
|
|
|
|
.61 jsr X.Unpak.GetByteInA
|
|
|
|
|
jsr X.Unpak.PutByte
|
|
|
|
|
beq .99
|
|
|
|
|
dey
|
|
|
|
|
bpl .61 +1
|
|
|
|
|
|
|
|
|
|
bra .1
|
|
|
|
|
|
|
|
|
|
.9 sec
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
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
|
|
|
|
|
lda (ZPPtr1)
|
|
|
|
|
and ZPInMask
|
|
|
|
|
beq .1
|
|
|
|
|
sec
|
|
|
|
|
|
|
|
|
|
.1 php
|
|
|
|
|
|
|
|
|
|
lsr ZPInMask
|
|
|
|
|
bne .8
|
|
|
|
|
|
|
|
|
|
ror ZPInMask
|
|
|
|
|
|
|
|
|
|
inc ZPPtr1
|
|
|
|
|
bne .8
|
|
|
|
|
inc ZPPtr1+1
|
|
|
|
|
|
|
|
|
|
.8 plp
|
|
|
|
|
pla
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
X.Unpak.PutByte sta ZPOutLastByte
|
|
|
|
|
X.Unpak.PutByte.1
|
|
|
|
|
sta (ZPOutBufPtr)
|
|
|
|
|
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
|