A2osX/SHARED/X.UNPAK.S.txt

271 lines
4.3 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
2019-10-15 06:43:24 +00:00
X.Unpak.STORE.8
2019-10-02 15:21:03 +00:00
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-15 15:32:50 +00:00
>DEBUG
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-10-15 15:32:50 +00:00
bcc .11
2019-09-24 15:25:07 +00:00
2019-10-15 15:32:50 +00:00
inc ZPInBufPtr+1
2019-09-24 15:25:07 +00:00
2019-10-15 15:32:50 +00:00
.11 lda #$80
2019-09-24 15:25:07 +00:00
sta ZPInMask
2019-10-14 05:23:09 +00:00
*--------------------------------------
2019-09-24 15:25:07 +00:00
.1 lda ZPnCnt
ora ZPnCnt+1
2019-10-15 06:43:24 +00:00
beq X.Unpak.STORE.8
2019-09-24 15:25:07 +00:00
*--------------------------------------
2019-10-15 15:32:50 +00:00
.2 >DEBUG
jsr X.Unpak.GetBitInC
bcs .3 ->TOP
2019-09-25 15:34:43 +00:00
* BYTE8
2019-10-15 06:43:24 +00:00
ldx #8
jsr X.Unpak.GetXBitInA
2019-09-25 15:34:43 +00:00
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-10-15 06:43:24 +00:00
ora #%1000
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-15 06:43:24 +00:00
ora #%10000
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
2019-10-15 15:32:50 +00:00
2019-09-25 15:34:43 +00:00
clc
rts
*--------------------------------------
2019-10-14 05:23:09 +00:00
* BACKLINK : 1111 OfsLBits OfsHBits LenBits
.6 ldx ZPBLOfsLBits
2019-10-15 15:32:50 +00:00
2019-10-14 05:23:09 +00:00
jsr X.Unpak.GetXBitInA
2019-10-15 15:32:50 +00:00
tay
eor #$ff
2019-10-15 06:43:24 +00:00
sec
2019-10-15 15:32:50 +00:00
adc ZPOutBufPtr
2019-09-24 15:25:07 +00:00
sta ZPPtr2
2019-10-15 15:32:50 +00:00
2019-10-14 05:23:09 +00:00
lda ZPBLOfsHBits
beq .61
2019-10-15 15:32:50 +00:00
php
2019-10-14 05:23:09 +00:00
tax
2019-09-24 15:25:07 +00:00
jsr X.Unpak.GetXBitInA
2019-10-15 15:32:50 +00:00
plp
2019-10-14 05:23:09 +00:00
2019-10-15 15:32:50 +00:00
.61 pha
>PUSHYA
pla
eor #$ff
adc ZPOutBufPtr+1
2019-09-24 15:25:07 +00:00
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-10-15 15:32:50 +00:00
>PUSHA
pha
>PUSHBI 3
2019-09-24 15:25:07 +00:00
2019-10-15 15:32:50 +00:00
>LDYA L.DBG
>SYSCALL printf
pla
tax
ldy #0
2019-09-24 15:25:07 +00:00
2019-10-15 15:32:50 +00:00
.62 lda (ZPPtr2),y
2019-09-24 15:25:07 +00:00
jsr X.Unpak.PutByte
beq .99
2019-10-15 15:32:50 +00:00
iny
dex
bne .62
lda #'\'
>SYSCALL putchar
lda #C.CR
>SYSCALL putchar
lda #C.LF
>SYSCALL putchar
jmp .1
2019-10-14 05:23:09 +00:00
.99 sec
rts
2019-09-24 15:25:07 +00:00
*--------------------------------------
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-10-15 15:32:50 +00:00
pha
phx
phy
lda (ZPOutBufPtr)
>SYSCALL putchar
lda (ZPOutBufPtr)
cmp #C.CR
bne .6
lda #C.LF
>SYSCALL putchar
.6
ply
plx
pla
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